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

Re: Bug report : bad filter-branch (OSX only)

From
Jeff King <peff@peff.net>
Date
Apr 29, 2015, 04:56 UTC
Message-ID
<20150429045600.GA10781@peff.net>
In-Reply-To
<20150429043947.GA10702@peff.net>
On Wed, Apr 29, 2015 at 12:39:47AM -0400, Jeff King wrote:
> So I can't figure out how to replicate the problem here.

Actually, that's not quite true. I could get hold of an OS X system to replicate, which I just did.

The problem is that commit 3b754f212 does not have a newline at the end of its commit message, and the OS X version of sed doesn't preserve that.

Here's a much smaller reproduction recipe:
  git init
  echo content >file
  git add file
  tree=$(git write-tree)
  commit=$(printf 'no newline' | git commit-tree $tree)
  git update-ref HEAD $commit
  git filter-branch

On my Linux system, this results in an unchanged history, but on OS X, the commit is rewritten to have a newline at the end of the commit message.

The culprit is this line from git-filter-branch:
        sed -e '1,/^$/d' <../commit | \
                eval "$filter_msg" > ../message ||
                        die "msg filter failed: $filter_msg"

The "sed" command silently appends an extra newline to the final line of the message. You can see the sed behavior more directly with:

  printf foo | sed -ne 1p

which adds a newline on OS X, but not when using GNU sed on Linux. It looks like OS X has just BSD sed, so the same behavior probably happens on FreeBSD and elsewhere.

I'm not sure of a solution short of replacing the use of sed here with something else. perl would be a simple choice, but filter-branch does not otherwise depend on it. We could use a shell "read" loop, but those are quite slow (and filter-branch is slow enough as it is!).

-Peff
Previous: Jeff KingNext: Junio C Hamano
Message 5 of 12 in “Bug report : bad filter-branch (OSX only)”
  1. Olivier ROLANDApr 26, 2015
  2. Jeff KingApr 28, 2015
  3. Olivier ROLANDApr 28, 2015
  4. Jeff KingApr 29, 2015
  5. Jeff KingApr 29, 2015
  6. Junio C HamanoApr 29, 2015
  7. Jeff KingApr 29, 2015
  8. Junio C HamanoApr 29, 2015
  9. Jeff KingApr 29, 2015
  10. Junio C HamanoApr 29, 2015
  11. Johannes SixtApr 29, 2015
  12. Roberto TyleyApr 29, 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.