Skip to content

Commit

Permalink
filter-branch: handle filenames that need quoting
Browse files Browse the repository at this point in the history
The command used a very old fashioned construct to extract
filenames out of diff-index and ended up corrupting the output.
We can simply use --name-only and pipe into --stdin mode of
update-index.  It's been like that for the past 2 years or so
since a94d994 (update-index: work with c-quoted name).

Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Junio C Hamano committed Feb 16, 2008
1 parent 0ef617f commit 1fe32cb
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 4 deletions.
9 changes: 5 additions & 4 deletions git-filter-branch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -276,10 +276,11 @@ while read commit parents; do
eval "$filter_tree" < /dev/null ||
die "tree filter failed: $filter_tree"

git diff-index -r $commit | cut -f 2- | tr '\012' '\000' | \
xargs -0 git update-index --add --replace --remove
git ls-files -z --others | \
xargs -0 git update-index --add --replace --remove
(
git diff-index -r --name-only $commit
git ls-files --others
) |
git update-index --add --replace --remove --stdin
fi

eval "$filter_index" < /dev/null ||
Expand Down
14 changes: 14 additions & 0 deletions t/t7003-filter-branch.sh
Original file line number Diff line number Diff line change
Expand Up @@ -165,4 +165,18 @@ test_expect_success '"map" works in commit filter' '
git rev-parse --verify master
'

test_expect_success 'Name needing quotes' '
git checkout -b rerere A &&
mkdir foo &&
name="れれれ" &&
>foo/$name &&
git add foo &&
git commit -m "Adding a file" &&
git filter-branch --tree-filter "rm -fr foo" &&
! git ls-files --error-unmatch "foo/$name" &&
test $(git rev-parse --verify rerere) != $(git rev-parse --verify A)
'

test_done

0 comments on commit 1fe32cb

Please sign in to comment.