From: Kevin Ballard Date: Sat, 08 Mar 2008 20:39:53 GMT Subject: Re: [PATCH] Add test for filter-branch on a subdirectory that's been added and deleted and re-added Message-ID: In-Reply-To: <7vejalt12h.fsf@gitster.siamese.dyndns.org> On Mar 8, 2008, at 3:25 PM, Junio C Hamano wrote: > This will hopefully be the final version. Assuming that the lack of a GIT_INDEX_FILE doesn't break git-checkout- index, git-diff-index, git-update-index, or anything that an --index- filter might run (I assume it doesn't, but I didn't test all the relevant commands), then this looks fine by me. -Kevin > > -- >8 -- > filter-branch: handle "disappearing tree" case correctly in subdir > filter > > The subdirectory filter had a bug to notice that the commit in > question > did not have anything in the path-limited part of the tree. $commit: > $path > does not name an empty tree when $path does not appear in $commit. > > This should fix it. The additional test in t7003 is originally from > Kevin > Ballard but with fixups. > > Signed-off-by: Junio C Hamano > --- > > * -f is needed because the previous one is about aborting the filter > and > leaving the "original" namespace. > > git-filter-branch.sh | 11 ++++++++++- > t/t7003-filter-branch.sh | 24 ++++++++++++++++++++++++ > 2 files changed, 34 insertions(+), 1 deletions(-) > > diff --git a/git-filter-branch.sh b/git-filter-branch.sh > index 49e13f0..010353a 100755 > --- a/git-filter-branch.sh > +++ b/git-filter-branch.sh > @@ -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 > diff --git a/t/t7003-filter-branch.sh b/t/t7003-filter-branch.sh > index 868babc..6e14bf1 100755 > --- a/t/t7003-filter-branch.sh > +++ b/t/t7003-filter-branch.sh > @@ -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 > -- Kevin Ballard http://kevin.sb.org kevin@sb.org http://www.tildesoft.com