Merge branch 'jk/filter-branch-use-of-sed-on-incomplete-line'
authorJunio C Hamano <gitster@pobox.com>
Mon, 11 May 2015 21:23:54 +0000 (14:23 -0700)
committerJunio C Hamano <gitster@pobox.com>
Mon, 11 May 2015 21:23:54 +0000 (14:23 -0700)
"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

git-filter-branch.sh
t/t7003-filter-branch.sh
index e6e99f5bb5102d394a25f156dbcba956f246054b..5b3f63d8bbc65e80d1f4278e1ec6e27df604dc9a 100755 (executable)
@@ -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" \
index 66643e4bd758aa55f4f58d70675e32f1ad173460..855afda80a1b0dea6d74aa18a96018f59cb2e50b 100755 (executable)
@@ -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