Browse Source

Merge branch 'cb/filter-branch-prune-empty-degenerate-merges'

"filter-branch" left an empty single-parent commit that results when
all parents of a merge commit gets mapped to the same commit, even
under "--prune-empty".

* cb/filter-branch-prune-empty-degenerate-merges:
  filter-branch: eliminate duplicate mapped parents
maint
Junio C Hamano 11 years ago
parent
commit
6a5713b576
  1. 8
      git-filter-branch.sh
  2. 11
      t/t7003-filter-branch.sh

8
git-filter-branch.sh

@ -332,7 +332,13 @@ while read commit parents; do @@ -332,7 +332,13 @@ while read commit parents; do
parentstr=
for parent in $parents; do
for reparent in $(map "$parent"); do
parentstr="$parentstr -p $reparent"
case "$parentstr " in
*" -p $reparent "*)
;;
*)
parentstr="$parentstr -p $reparent"
;;
esac
done
done
if [ "$filter_parent" ]; then

11
t/t7003-filter-branch.sh

@ -308,6 +308,17 @@ test_expect_success 'Prune empty commits' ' @@ -308,6 +308,17 @@ test_expect_success 'Prune empty commits' '
test_cmp expect actual
'

test_expect_success 'prune empty collapsed merges' '
test_config merge.ff false &&
git rev-list HEAD >expect &&
test_commit to_remove_2 &&
git reset --hard HEAD^ &&
test_merge non-ff to_remove_2 &&
git filter-branch -f --index-filter "git update-index --remove to_remove_2.t" --prune-empty HEAD &&
git rev-list HEAD >actual &&
test_cmp expect actual
'

test_expect_success '--remap-to-ancestor with filename filters' '
git checkout master &&
git reset --hard A &&

Loading…
Cancel
Save