Browse Source

Merge branch 'kb/maint-filter-branch-disappear'

* kb/maint-filter-branch-disappear:
  filter-branch: handle "disappearing tree" case correctly in subdir filter
maint
Junio C Hamano 17 years ago
parent
commit
832d586a0c
  1. 11
      git-filter-branch.sh
  2. 24
      t/t7003-filter-branch.sh

11
git-filter-branch.sh

@ -252,7 +252,16 @@ while read commit parents; do @@ -252,7 +252,16 @@ while read commit parents; do
git read-tree -i -m $commit
;;
*)
git read-tree -i -m $commit:"$filter_subdir"
# The commit may not have the subdirectory at all
err=$(git read-tree -i -m $commit:"$filter_subdir" 2>&1) || {
if ! git rev-parse --verify $commit:"$filter_subdir" 2>/dev/null
then
rm -f "$GIT_INDEX_FILE"
else
echo >&2 "$err"
false
fi
}
esac || die "Could not initialize the index"

GIT_COMMIT=$commit

24
t/t7003-filter-branch.sh

@ -179,4 +179,28 @@ test_expect_success 'Name needing quotes' ' @@ -179,4 +179,28 @@ test_expect_success 'Name needing quotes' '

'

test_expect_success 'Subdirectory filter with disappearing trees' '
git reset --hard &&
git checkout master &&

mkdir foo &&
touch foo/bar &&
git add foo &&
test_tick &&
git commit -m "Adding foo" &&

git rm -r foo &&
test_tick &&
git commit -m "Removing foo" &&

mkdir foo &&
touch foo/bar &&
git add foo &&
test_tick &&
git commit -m "Re-adding foo" &&

git filter-branch -f --subdirectory-filter foo &&
test $(git rev-list master | wc -l) = 3
'

test_done

Loading…
Cancel
Save