Re* [PATCH] Add test for filter-branch on a subdirectory that's been added and deleted and re-added
From: Junio C Hamano <hidden>
Date: 2016-06-15 22:44:21
Subsystem:
the rest · Maintainer:
Linus Torvalds
Kevin Ballard [off-list ref] writes:
On Mar 8, 2008, at 1:41 PM, Junio C Hamano wrote:quoted
Such a test is a very good incentive to the people involved in the failing part of the system to fix, and is greatly appreciated. However, * please mark "currently-failing" test with "test_expect_failure";Ahh, didn't know about that. In retrospect I should have been able to guess, though.quoted
* please hint (after --- lines) if you will shortly be following up with a fix patch yourself, or if you are only reporting a bug.Ah. Yeah, I'm only reporting a bug. I don't know anything about how this stuff works, and the bug doesn't bite me, it bit someone else instead, I just thought it deserved to be documented somewhere as a failure.quoted
I can fix-up and forge your Sign-off.That would be great, thanks.
Heh, your test is broken. You are not re-adding foo. Here is a fix. --- git-filter-branch.sh | 11 ++++++++++- t/t7003-filter-branch.sh | 5 ++++- 2 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 49e13f0..8382212 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 $commit:"$filter_subdir" 2>&1 + 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 2ea8e3b..8f92fef 100755
--- a/t/t7003-filter-branch.sh
+++ b/t/t7003-filter-branch.sh@@ -188,8 +188,11 @@ test_expect_failure 'Subdirectory filter on folder with non-contiguous history' git commit -m "Removing foo" && mkdir foo && touch foo/bar && + git add foo && git commit -m "Re-adding foo" && - git filter-branch --subdirectory-filter foo + + git filter-branch --subdirectory-filter foo && + test $(git rev-list master | wc -l) = 3 ' test_done