summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2015-05-11 14:23:54 -0700
committerJunio C Hamano <gitster@pobox.com>2015-05-11 14:23:54 -0700
commit02f8203740c63a2a8f2f63979b46ecfce976dfc0 (patch)
tree25e913179f0e1cca93b4065b0e16b31840bf6246
parent9e4d2f6d45ef46e5774bbf752786ca3b9a4142a5 (diff)
parentdf0620108b9710a06d5a2d9c125d43b97590cce6 (diff)
downloadgit-02f8203740c63a2a8f2f63979b46ecfce976dfc0.tar.gz
Merge branch 'jk/filter-branch-use-of-sed-on-incomplete-line'
"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-xgit-filter-branch.sh10
-rwxr-xr-xt/t7003-filter-branch.sh10
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