aboutsummaryrefslogtreecommitdiff
path: root/git-filter-branch.sh
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2008-03-08 12:25:58 -0800
committerJunio C Hamano <gitster@pobox.com>2008-03-08 13:25:57 -0800
commit5b044ac3879b0950675f0e762f1dccbbb9f4001e (patch)
treecdaf1135c309ab0bab7b6d4bc5a59e30738e5ca1 /git-filter-branch.sh
parentc8744d6a8b27115503565041566d97c21e722584 (diff)
downloadgit-5b044ac3879b0950675f0e762f1dccbbb9f4001e.tar.gz
git-5b044ac3879b0950675f0e762f1dccbbb9f4001e.tar.xz
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 <gitster@pobox.com>
Diffstat (limited to 'git-filter-branch.sh')
-rwxr-xr-xgit-filter-branch.sh11
1 files changed, 10 insertions, 1 deletions
diff --git a/git-filter-branch.sh b/git-filter-branch.sh
index 49e13f0bb..010353ad8 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