From: Jim Meyering <jim@meyering.net>
To: git@vger.kernel.org
Subject: [PATCH] cogito: Honor either post-commit script name; fail if both are executable
Date: Fri, 20 Oct 2006 18:15:51 +0200 [thread overview]
Message-ID: <874ptzhsjs.fsf@rho.meyering.net> (raw)
Hi,
I promised this patch some time ago, made the changes,
and then never sent them. This is slightly different
from the current implementation in that it fails when both
scripts are executable. Also, it factors out the script names and
adds tests.
Signed-off-by: Jim Meyering <jim@meyering.net>
---
cg-commit | 43 ++++++++++++++++++++++++++++++-------------
t/t9800-hooks.sh | 37 +++++++++++++++++++++++++++++++++++++
2 files changed, 67 insertions(+), 13 deletions(-)
diff --git a/cg-commit b/cg-commit
index 01a4eb7..ee4769e 100755
--- a/cg-commit
+++ b/cg-commit
@@ -148,11 +148,11 @@ # If the file exists it will be used as
# the commit message. The template file makes it possible to
# automatically add `Signed-off-by` line to the log message.
#
-# $GIT_DIR/hooks/commit-post::
+# $GIT_DIR/hooks/post-commit:: (legacy: commit-post)
# If the file exists and is executable it will be executed upon
# completion of the commit. The script is passed two arguments.
# The first argument is the commit ID and the second is the
-# branchname. A sample `commit-post` script might look like:
+# branchname. A sample `post-commit` script might look like:
#
# #!/bin/sh
# id=$1
@@ -680,18 +680,35 @@ elif [ "$newhead" ]; then
branchname="$(cat "$_git/branch-name")"
fi
[ -z "$branchname" ] && [ "$_git_head" != "master" ] && branchname="$_git_head"
- if [ -x "$_git/hooks/commit-post" -o -x "$_git/hooks/post-commit" ] && [ ! "$no_hooks" ]; then
- if [ "$(git-repo-config --bool cogito.hooks.commit.post.allmerged)" = "true" ]; then
- # We just hope that for the initial commit, the user didn't
- # manage to install the hook yet.
- for merged in $(git-rev-list $newhead ^$oldhead | tac); do
- [ -x "$_git/hooks/commit-post" ] && "$_git/hooks/commit-post" "$merged" "$branchname"
- [ -x "$_git/hooks/post-commit" ] && "$_git/hooks/post-commit" "$merged" "$branchname"
- done
- else
- [ -x "$_git/hooks/commit-post" ] && "$_git/hooks/commit-post" "$newhead" "$branchname"
- [ -x "$_git/hooks/post-commit" ] && "$_git/hooks/post-commit" "$newhead" "$branchname"
+
+ if [ "$no_hooks" ]; then
+ exit 0
+ fi
+
+ # Decide which spelling to use for the post-commit hook script name.
+ post_commit="$_git/hooks/post-commit"
+ old_name="$_git/hooks/commit-post"
+ if [ -x "$post_commit" ]; then
+ if [ -x "$old_name" ]; then
+ die "both $post_commit and $old_name are executable."
fi
+ # This is the expected case: use $post_commit
+ else
+ if [ ! -x "$old_name" ]; then
+ # neither is executable: do nothing
+ exit 0
+ fi
+ post_commit=$old_name
+ fi
+
+ if [ "$(git-repo-config --bool cogito.hooks.commit.post.allmerged)" = "true" ]; then
+ # We just hope that for the initial commit, the user didn't
+ # manage to install the hook yet.
+ for merged in $(git-rev-list $newhead ^$oldhead | tac); do
+ "$post_commit" "$merged" "$branchname"
+ done
+ else
+ "$post_commit" "$newhead" "$branchname"
fi
exit 0
diff --git a/t/t9800-hooks.sh b/t/t9800-hooks.sh
new file mode 100755
index 0000000..a54e35f
--- /dev/null
+++ b/t/t9800-hooks.sh
@@ -0,0 +1,37 @@
+#!/usr/bin/env bash
+#
+# Copyright (c) 2006 Jim Meyering
+#
+test_description="Test the commit hooks."
+
+. ./test-lib.sh
+rm -rf .git
+
+echo x > f
+test_expect_success 'initialize repo' \
+ '(cg-init -m"Initial commit")'
+
+commit_post=.git/hooks/commit-post
+post_commit=.git/hooks/post-commit
+cat > $post_commit <<\EOF
+#!/bin/sh
+echo $0
+exit 0
+EOF
+cp $post_commit $commit_post
+
+chmod a+x $post_commit
+test_expect_success 'test the post-commit name' \
+ '(echo 1 >> f; test "`cg-commit -m x|grep git/hooks`" = $post_commit)'
+
+chmod a-x $post_commit
+chmod a+x $commit_post
+
+test_expect_success 'test the legacy commit-post name' \
+ '(echo 2 >> f; test "`cg-commit -m x|grep git/hooks`" = $commit_post)'
+
+chmod a+x $post_commit
+test_expect_failure 'fail when both are executable' \
+ '(echo 3 >> f; cg-commit -m x)'
+
+test_done
--
1.4.3.ge193
next reply other threads:[~2006-10-20 16:15 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-20 16:15 Jim Meyering [this message]
2006-10-27 2:05 ` [PATCH] cogito: Honor either post-commit script name; fail if both are executable Petr Baudis
2006-10-27 7:41 ` Jim Meyering
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=874ptzhsjs.fsf@rho.meyering.net \
--to=jim@meyering.net \
--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