diff options
author | Junio C Hamano <gitster@pobox.com> | 2015-05-26 13:49:20 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-05-26 13:49:20 -0700 |
commit | a2e5c79c69ee6109b06efe9a483df5e6708432fe (patch) | |
tree | 169c2e5d48d2c8c9aacd22bf00d8c12e0783e771 | |
parent | Merge branch 'jc/daemon-no-ipv6-for-2.4.1' into maint (diff) | |
parent | filter-branch: avoid passing commit message through sed (diff) | |
download | tgif-a2e5c79c69ee6109b06efe9a483df5e6708432fe.tar.xz |
Merge branch 'jk/filter-branch-use-of-sed-on-incomplete-line' into maint
"filter-branch" corrupted commit log message that ends with an
incomplete line on platforms with some "sed" implementations that
munge such a line. Work it around by avoiding to use "sed".
* jk/filter-branch-use-of-sed-on-incomplete-line:
filter-branch: avoid passing commit message through sed
-rwxr-xr-x | git-filter-branch.sh | 10 | ||||
-rwxr-xr-x | t/t7003-filter-branch.sh | 10 |
2 files changed, 19 insertions, 1 deletions
diff --git a/git-filter-branch.sh b/git-filter-branch.sh index e6e99f5bb5..5b3f63d8bb 100755 --- a/git-filter-branch.sh +++ b/git-filter-branch.sh @@ -346,7 +346,15 @@ while read commit parents; do die "parent filter failed: $filter_parent" fi - sed -e '1,/^$/d' <../commit | \ + { + while read -r header_line && test -n "$header_line" + do + # skip header lines... + :; + done + # and output the actual commit message + cat + } <../commit | eval "$filter_msg" > ../message || die "msg filter failed: $filter_msg" workdir=$workdir @SHELL_PATH@ -c "$filter_commit" "git commit-tree" \ diff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh index 66643e4bd7..855afda80a 100755 --- a/t/t7003-filter-branch.sh +++ b/t/t7003-filter-branch.sh @@ -394,4 +394,14 @@ test_expect_success 'replace submodule revision' ' test $orig_head != `git show-ref --hash --head HEAD` ' +test_expect_success 'filter commit message without trailing newline' ' + git reset --hard original && + commit=$(printf "no newline" | git commit-tree HEAD^{tree}) && + git update-ref refs/heads/no-newline $commit && + git filter-branch -f refs/heads/no-newline && + echo $commit >expect && + git rev-parse refs/heads/no-newline >actual && + test_cmp expect actual +' + test_done |