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

Re: [PATCH v2] filter-branch: remove multi-line headers in msg filter

From
Michael J Gruber <git@drmicha.warpmail.net>
Date
Oct 9, 2015, 07:07 UTC
Message-ID
<561767AC.6060503@drmicha.warpmail.net>
In-Reply-To
<20151009002113.GA329@freya.jamessan.com>
James McCoy venit, vidit, dixit 09.10.2015 02:21:
Show 41 quoted lines
> df062010 (filter-branch: avoid passing commit message through sed)
> introduced a regression when filtering commits with multi-line headers,
> if the header contains a blank line.  An example of this is a gpg-signed
> commit:
> 
>   $ git cat-file commit signed-commit
>   tree 3d4038e029712da9fc59a72afbfcc90418451630
>   parent 110eac945dc1713b27bdf49e74e5805db66971f0
>   author A U Thor <author@example.com> 1112912413 -0700
>   committer C O Mitter <committer@example.com> 1112912413 -0700
>   gpgsig -----BEGIN PGP SIGNATURE-----
>    Version: GnuPG v1
> 
>    iEYEABECAAYFAlYXADwACgkQE7b1Hs3eQw23CACgldB/InRyDgQwyiFyMMm3zFpj
>    pUsAnA+f3aMUsd9mNroloSmlOgL6jIMO
>    =0Hgm
>    -----END PGP SIGNATURE-----
> 
>   Adding gpg
> 
> As a consequence, "filter-branch --msg-filter cat" (which should leave the
> commit message unchanged) spills the signature (after the internal blank
> line) into the original commit message.
> 
> The reason is that although the signature is indented, making the line a
> whitespace only line, the “read” call is splitting the line based on
> the shell's IFS, which defaults to <space><tab><newline>.  The leading
> space is consumed and $header_line is empty, causing the “skip header
> lines” loop to exit.
> 
> The rest of the commit object is then re-used as the rewritten commit
> message, causing the new message to include the signature of the
> original commit.
> 
> Set IFS to an empty string for the “read” call, thus disabling the word
> splitting, which causes $header_line to be set to the non-empty value '
> '.  This allows the loop to fully consume the header lines before
> emitting the original, intact commit message.
> 
> Signed-off-by: James McCoy <vega.james@gmail.com>
> ---
Thanks for hanging in :)
Reviewed-by: Michael J Gruber <git@drmicha.warpmail.net>
Previous: James McCoyNext: Junio C Hamano
Message 2 of 5 in “filter-branch: remove multi-line headers in msg filter”
  1. filter-branch: remove multi-line headers in msg filterJames McCoy, Oct 9, 2015
  2. Michael J GruberOct 9, 2015
  3. Junio C HamanoOct 9, 2015
  4. Michael J GruberOct 12, 2015
  5. Junio C HamanoOct 12, 2015

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.