From: Josh Steadmon <steadmon@google.com>
To: git@vger.kernel.org
Cc: gitster@pobox.com, git@grubix.eu, martin.agren@gmail.com
Subject: [PATCH v5 0/4] pre-merge-commit hook
Date: Wed, 7 Aug 2019 11:57:04 -0700 [thread overview]
Message-ID: <cover.1565203880.git.steadmon@google.com> (raw)
In-Reply-To: <cover.1565044345.git.steadmon@google.com>
This series adds a new pre-merge-commit hook, similar in usage to
pre-commit. It also improves hook testing in t7503, by verifying that
the correct hooks are run or bypassed as expected.
The original series was done by Michael J Gruber <git@grubix.eu>. I have
addressed the outstanding review comments, and noted my changes in the
commit messages in "[js: ...]" blocks.
Changes since V4:
* Used "cp" instead of "ln -s" in test hook setup to make tests more
portable.
Changes since V3:
* Applied several test style fixes suggested by Martin (thanks!).
* Clarified the documentation for pre-merge-commit hook.
* Fixed a few cases where testing that the merge hook did not run might
erroneously succeed if we don't have any merge to actually perform.
* Simplified test cleanup by adding a new non-executable sample hook
script.
* Added test cases for non-executable pre-merge-commit hooks.
Changes since V2:
* Renamed the hook from "pre-merge" to "pre-merge-commit".
* Added a new patch (1/4) to improve t7503 by verifying that the
expected hooks are (or are not) run.
* Squashed test changes (from V2's patch 4/4) into patch 3/4.
Modified the tests to follow the example set in patch 1/4.
* Reworded commit messages to match with the current state of certain
flags, which changed in between V1 and V2 of this series.
Josh Steadmon (1):
t7503: verify proper hook execution
Michael J Gruber (3):
merge: do no-verify like commit
git-merge: honor pre-merge-commit hook
merge: --no-verify to bypass pre-merge-commit hook
Documentation/git-merge.txt | 2 +-
Documentation/githooks.txt | 22 ++
Documentation/merge-options.txt | 4 +
builtin/merge.c | 18 +-
...3-pre-commit-and-pre-merge-commit-hooks.sh | 281 ++++++++++++++++++
t/t7503-pre-commit-hook.sh | 139 ---------
templates/hooks--pre-merge-commit.sample | 13 +
7 files changed, 336 insertions(+), 143 deletions(-)
create mode 100755 t/t7503-pre-commit-and-pre-merge-commit-hooks.sh
delete mode 100755 t/t7503-pre-commit-hook.sh
create mode 100755 templates/hooks--pre-merge-commit.sample
Range-diff against v4:
1: 5085729095 ! 1: 60bbbbf9e0 t7503: verify proper hook execution
@@ t/t7503-pre-commit-hook.sh: test_description='pre-commit hook'
-
- echo "more" >> file &&
+ test_when_finished "rm -f \"$PRECOMMIT\" expected_hooks actual_hooks" &&
-+ ln -s "success.sample" "$PRECOMMIT" &&
++ cp "$HOOKDIR/success.sample" "$PRECOMMIT" &&
+ echo "$PRECOMMIT" >expected_hooks &&
+ echo "more" >>file &&
git add file &&
@@ t/t7503-pre-commit-hook.sh: test_description='pre-commit hook'
-
- echo "even more" >> file &&
+ test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
-+ ln -s "success.sample" "$PRECOMMIT" &&
++ cp "$HOOKDIR/success.sample" "$PRECOMMIT" &&
+ echo "even more" >>file &&
git add file &&
- git commit --no-verify -m "even more"
@@ t/t7503-pre-commit-hook.sh: test_description='pre-commit hook'
-
- echo "another" >> file &&
+ test_when_finished "rm -f \"$PRECOMMIT\" expected_hooks actual_hooks" &&
-+ ln -s "fail.sample" "$PRECOMMIT" &&
++ cp "$HOOKDIR/fail.sample" "$PRECOMMIT" &&
+ echo "$PRECOMMIT" >expected_hooks &&
+ echo "another" >>file &&
git add file &&
@@ t/t7503-pre-commit-hook.sh: test_description='pre-commit hook'
-
- echo "stuff" >> file &&
+ test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
-+ ln -s "fail.sample" "$PRECOMMIT" &&
++ cp "$HOOKDIR/fail.sample" "$PRECOMMIT" &&
+ echo "stuff" >>file &&
git add file &&
- git commit --no-verify -m "stuff"
@@ t/t7503-pre-commit-hook.sh: test_description='pre-commit hook'
-
- echo "content" >> file &&
+ test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
-+ ln -s "non-exec.sample" "$PRECOMMIT" &&
++ cp "$HOOKDIR/non-exec.sample" "$PRECOMMIT" &&
+ echo "content" >>file &&
git add file &&
- git commit -m "content"
@@ t/t7503-pre-commit-hook.sh: test_description='pre-commit hook'
-
- echo "more content" >> file &&
+ test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
-+ ln -s "non-exec.sample" "$PRECOMMIT" &&
++ cp "$HOOKDIR/non-exec.sample" "$PRECOMMIT" &&
+ echo "more content" >>file &&
git add file &&
- git commit --no-verify -m "more content"
@@ t/t7503-pre-commit-hook.sh: test_description='pre-commit hook'
-
- echo "more content" >> file &&
+ test_when_finished "rm -rf \"$PRECOMMIT\" expected_hooks actual_hooks success" &&
-+ ln -s "require-prefix.sample" "$PRECOMMIT" &&
++ cp "$HOOKDIR/require-prefix.sample" "$PRECOMMIT" &&
+ echo "$PRECOMMIT" >expected_hooks &&
+ echo "more content" >>file &&
git add file &&
@@ t/t7503-pre-commit-hook.sh: test_description='pre-commit hook'
-
- echo "more content" >> file &&
+ test_when_finished "rm -rf \"$PRECOMMIT\" expected_hooks actual_hooks fail" &&
-+ ln -s "require-prefix.sample" "$PRECOMMIT" &&
++ cp "$HOOKDIR/require-prefix.sample" "$PRECOMMIT" &&
+ echo "$PRECOMMIT" >expected_hooks &&
+ echo "more content" >>file &&
git add file &&
@@ t/t7503-pre-commit-hook.sh: test_description='pre-commit hook'
- test "$GIT_AUTHOR_NAME" = "New Author" &&
- test "$GIT_AUTHOR_EMAIL" = "newauthor@example.com"
+ test_when_finished "rm -f \"$PRECOMMIT\" expected_hooks actual_hooks" &&
-+ ln -s "check-author.sample" "$PRECOMMIT" &&
++ cp "$HOOKDIR/check-author.sample" "$PRECOMMIT" &&
+ cat >expected_hooks <<-EOF &&
+ $PRECOMMIT
+ $PRECOMMIT
2: 3b701a5c41 = 2: 02a97eb369 merge: do no-verify like commit
3: 9210421fbb ! 3: 2d41e0ff79 git-merge: honor pre-merge-commit hook
@@ t/t7503-pre-commit-and-pre-merge-commit-hooks.sh: test_expect_success 'with succ
+test_expect_success 'with succeeding hook (merge)' '
+ test_when_finished "rm -f \"$PREMERGE\" expected_hooks actual_hooks" &&
-+ ln -s "success.sample" "$PREMERGE" &&
++ cp "$HOOKDIR/success.sample" "$PREMERGE" &&
+ echo "$PREMERGE" >expected_hooks &&
+ git checkout side &&
+ git merge -m "merge master" master &&
@@ t/t7503-pre-commit-and-pre-merge-commit-hooks.sh: test_expect_success 'with succ
+ test_when_finished "rm -f \"$PREMERGE\" \"$PRECOMMIT\"" &&
+ test_when_finished "rm -f expected_hooks actual_hooks" &&
+ test_when_finished "git checkout master" &&
-+ ln -s "success.sample" "$PREMERGE" &&
-+ ln -s "success.sample" "$PRECOMMIT" &&
++ cp "$HOOKDIR/success.sample" "$PREMERGE" &&
++ cp "$HOOKDIR/success.sample" "$PRECOMMIT" &&
+
+ git checkout conflicting-a &&
+ test_must_fail git merge -m "merge conflicting-b" conflicting-b &&
@@ t/t7503-pre-commit-and-pre-merge-commit-hooks.sh: test_expect_success 'with succ
+
test_expect_success '--no-verify with succeeding hook' '
test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
- ln -s "success.sample" "$PRECOMMIT" &&
+ cp "$HOOKDIR/success.sample" "$PRECOMMIT" &&
@@ t/t7503-pre-commit-and-pre-merge-commit-hooks.sh: test_expect_success '--no-verify with failing hook' '
test_path_is_missing actual_hooks
'
+test_expect_success 'with failing hook (merge)' '
+ test_when_finished "rm -f \"$PREMERGE\" expected_hooks actual_hooks" &&
-+ ln -s "fail.sample" "$PREMERGE" &&
++ cp "$HOOKDIR/fail.sample" "$PREMERGE" &&
+ echo "$PREMERGE" >expected_hooks &&
+ git checkout side &&
+ test_must_fail git merge -m "merge master" master &&
@@ t/t7503-pre-commit-and-pre-merge-commit-hooks.sh: test_expect_success '--no-veri
+
test_expect_success POSIXPERM 'with non-executable hook' '
test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
- ln -s "non-exec.sample" "$PRECOMMIT" &&
+ cp "$HOOKDIR/non-exec.sample" "$PRECOMMIT" &&
@@ t/t7503-pre-commit-and-pre-merge-commit-hooks.sh: test_expect_success POSIXPERM '--no-verify with non-executable hook' '
test_path_is_missing actual_hooks
'
+test_expect_success POSIXPERM 'with non-executable hook (merge)' '
+ test_when_finished "rm -f \"$PREMERGE\" actual_hooks" &&
-+ ln -s "non-exec.sample" "$PREMERGE" &&
++ cp "$HOOKDIR/non-exec.sample" "$PREMERGE" &&
+ git branch -f side side-orig &&
+ git checkout side &&
+ git merge -m "merge master" master &&
@@ t/t7503-pre-commit-and-pre-merge-commit-hooks.sh: test_expect_success POSIXPERM
+
test_expect_success 'with hook requiring GIT_PREFIX' '
test_when_finished "rm -rf \"$PRECOMMIT\" expected_hooks actual_hooks success" &&
- ln -s "require-prefix.sample" "$PRECOMMIT" &&
+ cp "$HOOKDIR/require-prefix.sample" "$PRECOMMIT" &&
## templates/hooks--pre-merge-commit.sample (new) ##
@@
4: 96c54883d3 ! 4: 7b81e2717f merge: --no-verify to bypass pre-merge-commit hook
@@ t/t7503-pre-commit-and-pre-merge-commit-hooks.sh: test_expect_success '--no-veri
+
test_expect_success 'with succeeding hook' '
test_when_finished "rm -f \"$PRECOMMIT\" expected_hooks actual_hooks" &&
- ln -s "success.sample" "$PRECOMMIT" &&
+ cp "$HOOKDIR/success.sample" "$PRECOMMIT" &&
@@ t/t7503-pre-commit-and-pre-merge-commit-hooks.sh: test_expect_success '--no-verify with succeeding hook' '
test_path_is_missing actual_hooks
'
+test_expect_success '--no-verify with succeeding hook (merge)' '
+ test_when_finished "rm -f \"$PREMERGE\" actual_hooks" &&
-+ ln -s "success.sample" "$PREMERGE" &&
++ cp "$HOOKDIR/success.sample" "$PREMERGE" &&
+ git branch -f side side-orig &&
+ git checkout side &&
+ git merge --no-verify -m "merge master" master &&
@@ t/t7503-pre-commit-and-pre-merge-commit-hooks.sh: test_expect_success '--no-veri
+
test_expect_success 'with failing hook' '
test_when_finished "rm -f \"$PRECOMMIT\" expected_hooks actual_hooks" &&
- ln -s "fail.sample" "$PRECOMMIT" &&
+ cp "$HOOKDIR/fail.sample" "$PRECOMMIT" &&
@@ t/t7503-pre-commit-and-pre-merge-commit-hooks.sh: test_expect_success 'with failing hook (merge)' '
test_cmp expected_hooks actual_hooks
'
+test_expect_success '--no-verify with failing hook (merge)' '
+ test_when_finished "rm -f \"$PREMERGE\" actual_hooks" &&
-+ ln -s "fail.sample" "$PREMERGE" &&
++ cp "$HOOKDIR/fail.sample" "$PREMERGE" &&
+ git branch -f side side-orig &&
+ git checkout side &&
+ git merge --no-verify -m "merge master" master &&
@@ t/t7503-pre-commit-and-pre-merge-commit-hooks.sh: test_expect_success 'with fail
+
test_expect_success POSIXPERM 'with non-executable hook' '
test_when_finished "rm -f \"$PRECOMMIT\" actual_hooks" &&
- ln -s "non-exec.sample" "$PRECOMMIT" &&
+ cp "$HOOKDIR/non-exec.sample" "$PRECOMMIT" &&
@@ t/t7503-pre-commit-and-pre-merge-commit-hooks.sh: test_expect_success POSIXPERM 'with non-executable hook (merge)' '
test_path_is_missing actual_hooks
'
+test_expect_success POSIXPERM '--no-verify with non-executable hook (merge)' '
+ test_when_finished "rm -f \"$PREMERGE\" actual_hooks" &&
-+ ln -s "non-exec.sample" "$PREMERGE" &&
++ cp "$HOOKDIR/non-exec.sample" "$PREMERGE" &&
+ git branch -f side side-orig &&
+ git checkout side &&
+ git merge --no-verify -m "merge master" master &&
@@ t/t7503-pre-commit-and-pre-merge-commit-hooks.sh: test_expect_success POSIXPERM
+
test_expect_success 'with hook requiring GIT_PREFIX' '
test_when_finished "rm -rf \"$PRECOMMIT\" expected_hooks actual_hooks success" &&
- ln -s "require-prefix.sample" "$PRECOMMIT" &&
+ cp "$HOOKDIR/require-prefix.sample" "$PRECOMMIT" &&
--
2.22.0.770.g0f2c4a37fd-goog
next prev parent reply other threads:[~2019-08-07 18:57 UTC|newest]
Thread overview: 59+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-22 12:04 [PATCH 0/4] pre-merge hook Michael J Gruber
2017-09-22 12:04 ` [PATCH 1/4] git-merge: Honor " Michael J Gruber
2017-09-22 19:52 ` Stefan Beller
2017-09-23 0:04 ` Martin Ågren
2017-09-22 12:04 ` [PATCH 2/4] merge: do no-verify like commit Michael J Gruber
2017-09-22 19:55 ` Stefan Beller
2017-09-22 12:04 ` [PATCH 3/4] merge: --no-verify to bypass pre-merge hook Michael J Gruber
2017-09-23 23:48 ` Junio C Hamano
2017-09-25 10:54 ` Michael J Gruber
2017-09-22 12:04 ` [PATCH 4/4] t7503: add tests for pre-merge-hook Michael J Gruber
2017-09-22 20:01 ` Stefan Beller
2017-10-02 5:54 ` [PATCH 0/4] pre-merge hook Junio C Hamano
2017-10-02 16:59 ` Stefan Beller
2017-10-17 4:05 ` Junio C Hamano
2019-07-18 22:57 ` [PATCH v2 " Josh Steadmon
2019-07-18 23:56 ` Josh Steadmon
2019-07-18 22:57 ` [PATCH v2 1/4] git-merge: Honor " Josh Steadmon
2019-07-29 20:00 ` Martin Ågren
2019-07-18 22:57 ` [PATCH v2 2/4] merge: do no-verify like commit Josh Steadmon
2019-07-18 22:57 ` [PATCH v2 3/4] merge: --no-verify to bypass pre-merge hook Josh Steadmon
2019-07-29 20:02 ` Martin Ågren
2019-07-29 23:33 ` Josh Steadmon
2019-07-18 22:57 ` [PATCH v2 4/4] t7503: add tests for pre-merge-hook Josh Steadmon
2019-07-29 20:04 ` Martin Ågren
2019-07-29 23:43 ` Josh Steadmon
2019-07-30 7:13 ` Martin Ågren
2019-07-31 18:34 ` Josh Steadmon
2019-07-29 20:09 ` [PATCH v2 0/4] pre-merge hook Martin Ågren
2019-07-29 23:29 ` Josh Steadmon
2019-07-29 20:29 ` Martin Ågren
2019-07-29 23:39 ` Josh Steadmon
2019-08-01 22:20 ` [PATCH v3 0/4] pre-merge-commit hook Josh Steadmon
2019-08-01 22:20 ` [PATCH v3 1/4] t7503: verify proper hook execution Josh Steadmon
2019-08-02 9:43 ` Martin Ågren
2019-08-01 22:20 ` [PATCH v3 2/4] merge: do no-verify like commit Josh Steadmon
2019-08-01 22:20 ` [PATCH v3 3/4] git-merge: honor pre-merge-commit hook Josh Steadmon
2019-08-02 9:45 ` Martin Ågren
2019-08-02 22:20 ` Josh Steadmon
2019-08-01 22:20 ` [PATCH v3 4/4] merge: --no-verify to bypass " Josh Steadmon
2019-08-02 9:56 ` [PATCH v3 0/4] " Martin Ågren
2019-08-02 9:56 ` [PATCH 1/5] t7503: use "&&" in "test_when_finished" rather than ";" Martin Ågren
2019-08-02 9:56 ` [PATCH 2/5] t7503: avoid touch when mtime doesn't matter Martin Ågren
2019-08-02 9:56 ` [PATCH 3/5] t7503: simplify file-juggling Martin Ågren
2019-08-02 9:56 ` [PATCH 4/5] t7503: don't create "actual_hooks" for later appending Martin Ågren
2019-08-02 9:56 ` [PATCH 5/5] t7503: test failing merge with both hooks available Martin Ågren
2019-08-02 22:18 ` [PATCH v3 0/4] pre-merge-commit hook Josh Steadmon
2019-08-05 22:43 ` [PATCH v4 " Josh Steadmon
2019-08-05 22:43 ` [PATCH v4 1/4] t7503: verify proper hook execution Josh Steadmon
2019-08-06 18:14 ` Junio C Hamano
2019-08-07 18:11 ` Josh Steadmon
2019-08-05 22:43 ` [PATCH v4 2/4] merge: do no-verify like commit Josh Steadmon
2019-08-05 22:43 ` [PATCH v4 3/4] git-merge: honor pre-merge-commit hook Josh Steadmon
2019-08-05 22:43 ` [PATCH v4 4/4] merge: --no-verify to bypass " Josh Steadmon
2019-08-07 18:57 ` Josh Steadmon [this message]
2019-08-07 18:57 ` [PATCH v5 1/4] t7503: verify proper hook execution Josh Steadmon
2019-08-07 18:57 ` [PATCH v5 2/4] merge: do no-verify like commit Josh Steadmon
2019-08-07 18:57 ` [PATCH v5 3/4] git-merge: honor pre-merge-commit hook Josh Steadmon
2019-08-07 18:57 ` [PATCH v5 4/4] merge: --no-verify to bypass " Josh Steadmon
2019-08-08 13:08 ` [PATCH v5 0/4] " Martin Ågren
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=cover.1565203880.git.steadmon@google.com \
--to=steadmon@google.com \
--cc=git@grubix.eu \
--cc=git@vger.kernel.org \
--cc=gitster@pobox.com \
--cc=martin.agren@gmail.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.