Junk. Sorry about the address. My mailer went retarded. -JE On Fri, 2007-09-21 at 14:27 -0600, root wrote: > Signed-off-by: Josh England <jjengla@xxxxxxxxxx> > --- > Documentation/hooks.txt | 10 +++++++ > git-checkout.sh | 5 +++ > t/t5403-post-checkout-hook.sh | 61 +++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 76 insertions(+), 0 deletions(-) > create mode 100755 t/t5403-post-checkout-hook.sh > > diff --git a/Documentation/hooks.txt b/Documentation/hooks.txt > index c39edc5..e78f91a 100644 > --- a/Documentation/hooks.txt > +++ b/Documentation/hooks.txt > @@ -87,6 +87,16 @@ parameter, and is invoked after a commit is made. > This hook is meant primarily for notification, and cannot affect > the outcome of `git-commit`. > > +post-checkout > +----------- > + > +This hook is invoked when a `git-checkout` is run on a local repository. > +The hook is given two parameters: the ref of the previous HEAD, and the ref of > +the new HEAD. This hook cannot affect the outcome of `git-checkout`. > + > +This hook can be used to perform repository validity checks, auto-display > +differences from the previous HEAD, or set working dir metadata properties. > + > [[pre-receive]] > pre-receive > ----------- > diff --git a/git-checkout.sh b/git-checkout.sh > index 17f4392..0cff36c 100755 > --- a/git-checkout.sh > +++ b/git-checkout.sh > @@ -284,3 +284,8 @@ if [ "$?" -eq 0 ]; then > else > exit 1 > fi > + > +# Run a post-checkout hook > +if test -x "$GIT_DIR"/hooks/post-checkout; then > + "$GIT_DIR"/hooks/post-checkout $old $new > +fi > diff --git a/t/t5403-post-checkout-hook.sh b/t/t5403-post-checkout-hook.sh > new file mode 100755 > index 0000000..aa0216a > --- /dev/null > +++ b/t/t5403-post-checkout-hook.sh > @@ -0,0 +1,61 @@ > +#!/bin/sh > +# > +# Copyright (c) 2006 Josh England > +# > + > +test_description='Test the post-checkout hook.' > +. ./test-lib.sh > + > +test_expect_success setup ' > + echo Data for commit0. >a && > + git update-index --add a && > + tree0=$(git write-tree) && > + commit0=$(echo setup | git commit-tree $tree0) && > + git update-ref refs/heads/master $commit0 && > + git-clone ./. clone1 && > + git-clone ./. clone2 && > + GIT_DIR=clone2/.git git branch -a new2 && > + echo Data for commit1. >clone2/b && > + GIT_DIR=clone2/.git git add clone2/b && > + GIT_DIR=clone2/.git git commit -m new2 > +' > + > +for clone in 1 2; do > + cat >clone${clone}/.git/hooks/post-checkout <<'EOF' > +#!/bin/sh > +echo $@ > $GIT_DIR/post-checkout.args > +EOF > + chmod u+x clone${clone}/.git/hooks/post-checkout > +done > + > +test_expect_success 'post-checkout runs as expected ' ' > + GIT_DIR=clone1/.git git checkout master && > + test -e clone1/.git/post-checkout.args > +' > + > +test_expect_success 'post-checkout receives the right arguments with HEAD unchanged ' ' > + old=$(awk "{print \$1}" clone1/.git/post-checkout.args) && > + new=$(awk "{print \$2}" clone1/.git/post-checkout.args) && > + test $old = $new > +' > + > +test_expect_success 'post-checkout runs as expected ' ' > + GIT_DIR=clone1/.git git checkout master && > + test -e clone1/.git/post-checkout.args > +' > + > +test_expect_success 'post-checkout args are correct with git checkout -b ' ' > + GIT_DIR=clone1/.git git checkout -b new1 && > + old=$(awk "{print \$1}" clone1/.git/post-checkout.args) && > + new=$(awk "{print \$2}" clone1/.git/post-checkout.args) && > + test $old = $new > +' > + > +test_expect_success 'post-checkout receives the right arguments with HEAD changed ' ' > + GIT_DIR=clone2/.git git checkout new2 && > + old=$(awk "{print \$1}" clone2/.git/post-checkout.args) && > + new=$(awk "{print \$2}" clone2/.git/post-checkout.args) && > + test $old != $new > +' > + > +test_done - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html