Skip to content

Commit

Permalink
tree_entry_interesting: match against all pathspecs
Browse files Browse the repository at this point in the history
The current basedir compare aborts early in order to avoid futile
recursive searches. However, a match may still be found by another
pathspec. This can cause an error while checking out files from a branch
when using multiple pathspecs:

$ git checkout master -- 'a/*.txt' 'b/*.txt'
error: pathspec 'a/*.txt' did not match any file(s) known to git.

Signed-off-by: Andy Spencer <andy753421@gmail.com>
Acked-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Andy Spencer authored and Junio C Hamano committed Jan 27, 2014
1 parent 2f93541 commit e4ddb05
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 1 deletion.
13 changes: 13 additions & 0 deletions t/t4010-diff-pathspec.sh
Original file line number Diff line number Diff line change
Expand Up @@ -110,4 +110,17 @@ test_expect_success 'diff-tree -r with wildcard' '
test_cmp expected result
'

test_expect_success 'diff multiple wildcard pathspecs' '
mkdir path2 &&
echo rezrov >path2/file1 &&
git update-index --add path2/file1 &&
tree3=`git write-tree` &&
git diff --name-only $tree $tree3 -- "path2*1" "path1*1" >actual &&
cat <<-\EOF >expect &&
path1/file1
path2/file1
EOF
test_cmp expect actual
'

test_done
2 changes: 1 addition & 1 deletion tree-walk.c
Original file line number Diff line number Diff line change
Expand Up @@ -696,7 +696,7 @@ enum interesting tree_entry_interesting(const struct name_entry *entry,

if (item->nowildcard_len &&
!match_wildcard_base(item, base_str, baselen, &matched))
return entry_not_interesting;
continue;

/*
* Concatenate base and entry->path into one and do
Expand Down

0 comments on commit e4ddb05

Please sign in to comment.