git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH v3] Clarify pre-push hook documentation

From
Junio C Hamano <gitster@pobox.com>
Date
Mar 25, 2014, 17:11 UTC
Message-ID
<xmqqmwgemceq.fsf@gitster.dls.corp.google.com>
In-Reply-To
<1395705088-82216-1-git-send-email-dcow90@gmail.com>
David Cowden <dcow90@gmail.com> writes:
Show 12 quoted lines
> The documentation as-is does not mention that the pre-push hook is
> executed even when there is nothing to push.  This can lead a new
> reader to believe there will always be lines fed to the script's
> standard input and cause minor confusion as to what is happening
> when there are no lines provided to the pre-push script.
>
> Signed-off-by: David Cowden <dcow90@gmail.com>
> ---
>
> Notes:
>     I'm not sure if I've covered every case here.  If there are more cases to
>     consider, please let me know and I can update to include them.

I do not think of any offhand, but a more important point that I was trying to get at was that we should not give an incorrect impression to the readers that the scenario that is described is the only case they need to be worried about by pretending to be exhaustive.

The "may" in your wording "This may happen when" may be good enough to hint that these may not be the only cases.

Show 21 quoted lines
>     c.f. http://stackoverflow.com/questions/22585091/git-hooks-pre-push-script-does-not-receive-input-via-stdin
>
>  Documentation/githooks.txt | 9 +++++++++
>  1 file changed, 9 insertions(+)
>
> diff --git a/Documentation/githooks.txt b/Documentation/githooks.txt
> index d954bf6..1fd6da9 100644
> --- a/Documentation/githooks.txt
> +++ b/Documentation/githooks.txt
> @@ -203,6 +203,15 @@ SHA-1>` will be 40 `0`.  If the local commit was specified by something other
>  than a name which could be expanded (such as `HEAD~`, or a SHA-1) it will be
>  supplied as it was originally given.
>  
> +The hook is executed regardless of whether changes will actually be pushed or
> +not.  This may happen when 'git push' is called and:
> +
> + - the remote ref is already up to date, or
> + - pushing to the remote ref cannot be handled by a simple fast-forward
> +
> +In other words, the script is called for every push.  In the event that nothing
> +is to be pushed, no data will be provided on the script's standard input.

When two things are to be pushed, the script will see the two things. When one thing is to be pushed, the script will see the one thing. When no thing is to be pushed, the script will see no thing on its standard input.

But isn't that obvious? I still wonder if we really need to single out that "nothing" case. The more important thing is that it is invoked even in the "0-thing pushed" case, and "the list of things pushed that is given to the hook happens to be empty" is an obvious natural fallout.

>  If this hook exits with a non-zero status, 'git push' will abort without
>  pushing anything.  Information about why the push is rejected may be sent
>  to the user by writing to standard error.
Previous: David CowdenNext: Philip Oakley
Message 8 of 10 in “Clarify pre-push hook documentation”
  1. Clarify pre-push hook documentationDavid Cowden, Mar 23, 2014
  2. Clarify pre-push hook documentationDavid Cowden, Mar 23, 2014
  3. Junio C HamanoMar 23, 2014
  4. Clarify pre-push hook documentationDavid Cowden, Mar 23, 2014
  5. Eric SunshineMar 24, 2014
  6. Clarify pre-push hook documentationDavid Cowden, Mar 24, 2014
  7. Clarify pre-push hook documentationDavid Cowden, Mar 24, 2014
  8. Junio C HamanoMar 25, 2014
  9. Philip OakleyMar 26, 2014
  10. David CowdenApr 8, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.