From: Junio C Hamano Date: Tue, 15 Jan 2013 00:24:00 GMT Subject: Re: [PATCH v2 0/3] pre-push hook support Message-ID: <7vpq1770pr.fsf@alter.siamese.dyndns.org> In-Reply-To: <7va9sb8jg7.fsf@alter.siamese.dyndns.org> Junio C Hamano writes: > Junio C Hamano writes: > >> Aaron Schrab writes: >> >>> Main changes since the initial version: >>> >>> * The first patch converts the existing hook callers to use the new >>> find_hook() function. >>> * Information about what is to be pushed is now sent over a pipe rather >>> than passed as command-line parameters. >>> >>> Aaron Schrab (3): >>> hooks: Add function to check if a hook exists >>> push: Add support for pre-push hooks >>> Add sample pre-push hook script >> >> Getting much nicer. Thanks. > > Hmph, t5571 seems to be flaky in that it sometimes fails but passes > when run again. Something timing dependent is going on??? With this patch applied, repeatedly try to - make sure "foreign" ref does not exist; and - attempt pushing the HEAD:foreign to create the "foreign" ref until it fails, I can get it stop before the output scrolls off of my 114 line terminal. Then when I revert the changes to transport.[ch] and builtin/push.c in this series, the test will keep going. Wait. The sample hook used in the test _is_ fed some input but it exits without reading any. What happens when we fork it, and it completes execution before we even have a chance to feed a single byte? Wont' we get a sigpipe and die? Yup, I think that is what is missing from run_pre_push_hook() implementation. diff --git a/t/t5571-pre-push-hook.sh b/t/t5571-pre-push-hook.sh index d68fed7..050318b 100755 --- a/t/t5571-pre-push-hook.sh +++ b/t/t5571-pre-push-hook.sh @@ -16,8 +16,15 @@ test_expect_success 'setup' ' git init --bare repo1 && git remote add parent1 repo1 && test_commit one && - git push parent1 HEAD:foreign + while : + do + git push parent1 :refs/heads/foreign && + git push parent1 HEAD:foreign || break + done ' + +exit + write_script "$HOOK" <