Skip to content

Commit

Permalink
clone: run post-checkout hook when checking out
Browse files Browse the repository at this point in the history
The mental model for clone is that the branch is "checked
out" (and it even says this in Documentation/git-clone.txt:
"...creates and checks out an initial branch"). Therefore it
is reasonable for users to expect that any post-checkout
hook would be run.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Jeff King authored and Junio C Hamano committed Mar 3, 2009
1 parent f474c52 commit dfa7a6c
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 1 deletion.
7 changes: 6 additions & 1 deletion builtin-clone.c
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
#include "dir.h"
#include "pack-refs.h"
#include "sigchain.h"
#include "run-command.h"

/*
* Overall FIXMEs:
Expand Down Expand Up @@ -377,6 +378,7 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
struct strbuf branch_top = STRBUF_INIT, reflog_msg = STRBUF_INIT;
struct transport *transport = NULL;
char *src_ref_prefix = "refs/heads/";
int err = 0;

struct refspec refspec;

Expand Down Expand Up @@ -631,12 +633,15 @@ int cmd_clone(int argc, const char **argv, const char *prefix)
if (write_cache(fd, active_cache, active_nr) ||
commit_locked_index(lock_file))
die("unable to write new index file");

err |= run_hook(NULL, "post-checkout", sha1_to_hex(null_sha1),
sha1_to_hex(remote_head->old_sha1), "1", NULL);
}

strbuf_release(&reflog_msg);
strbuf_release(&branch_top);
strbuf_release(&key);
strbuf_release(&value);
junk_pid = 0;
return 0;
return err;
}
12 changes: 12 additions & 0 deletions t/t5403-post-checkout-hook.sh
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,16 @@ test_expect_success 'post-checkout receives the right args when not switching br
test $old = $new -a $flag = 0
'

mkdir -p templates/hooks
cat >templates/hooks/post-checkout <<'EOF'
#!/bin/sh
echo $@ > $GIT_DIR/post-checkout.args
EOF
chmod +x templates/hooks/post-checkout

test_expect_success 'post-checkout hook is triggered by clone' '
git clone --template=templates . clone3 &&
test -f clone3/.git/post-checkout.args
'

test_done

0 comments on commit dfa7a6c

Please sign in to comment.