From: "Josh England" <jjengla@sandia.gov>
To: "git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: [PATCH] post-checkout hook, and related docs and tests
Date: Fri, 21 Sep 2007 14:35:21 -0600 [thread overview]
Message-ID: <1190406921.6541.16.camel@beauty> (raw)
In-Reply-To: <1190406421-15620-1-git-send-email-jjengla@sandia.gov>
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@sandia.gov>
> ---
> 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
next prev parent reply other threads:[~2007-09-21 20:33 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-21 20:27 [PATCH] post-checkout hook, and related docs and tests root
2007-09-21 20:35 ` Josh England [this message]
2007-09-22 0:15 ` Junio C Hamano
2007-09-24 17:14 ` Josh England
2007-09-24 18:34 ` Junio C Hamano
2007-09-24 19:33 ` Josh England
2007-09-24 21:07 ` Junio C Hamano
2007-09-24 22:05 ` Josh England
2007-09-24 23:54 ` Junio C Hamano
2007-09-25 4:42 ` Andreas Ericsson
2007-09-25 16:41 ` Josh England
2007-09-25 21:29 ` Junio C Hamano
2007-09-25 21:47 ` Josh England
2007-09-26 14:52 ` Dmitry Potapov
2007-09-26 19:23 ` Josh England
2007-09-24 17:58 ` Josh England
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1190406921.6541.16.camel@beauty \
--to=jjengla@sandia.gov \
--cc=git@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).