filter-branch: avoid passing commit message through sed
commitdf0620108b9710a06d5a2d9c125d43b97590cce6
authorJeff King <peff@peff.net>
Wed, 29 Apr 2015 15:48:58 +0000 (29 11:48 -0400)
committerJunio C Hamano <gitster@pobox.com>
Wed, 29 Apr 2015 17:01:04 +0000 (29 10:01 -0700)
treee412b2280f96dee205ed20cb9c772d0477fb76f3
parent282616c72d1d08a77ca4fe1186cb708c38408d87
filter-branch: avoid passing commit message through sed

On some systems (like OS X), if sed encounters input without
a trailing newline, it will silently add it. As a result,
"git filter-branch" on such systems may silently rewrite
commit messages that omit a trailing newline. Even though
this is not something we generate ourselves with "git
commit", it's better for filter-branch to preserve the
original data as closely as possible.

We're using sed here only to strip the header fields from
the commit object. We can accomplish the same thing with a
shell loop. Since shell "read" calls are slow (usually one
syscall per byte), we use "cat" once we've skipped past the
header. Depending on the size of your commit messages, this
is probably faster (you pay the cost to fork, but then read
the data in saner-sized chunks). This idea is shamelessly
stolen from Junio.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
git-filter-branch.sh
t/t7003-filter-branch.sh