From e4ddb05720710213108cd13ddd5a115e12a6211d Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Sat, 25 Jan 2014 22:06:46 +0000 Subject: tree_entry_interesting: match against all pathspecs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 Acked-by: Nguyễn Thái Ngọc Duy Signed-off-by: Junio C Hamano --- t/t4010-diff-pathspec.sh | 13 +++++++++++++ tree-walk.c | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/t/t4010-diff-pathspec.sh b/t/t4010-diff-pathspec.sh index af5134b70c..589bc6bfb4 100755 --- a/t/t4010-diff-pathspec.sh +++ b/t/t4010-diff-pathspec.sh @@ -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 diff --git a/tree-walk.c b/tree-walk.c index c626135234..d5914f598d 100644 --- a/tree-walk.c +++ b/tree-walk.c @@ -696,7 +696,7 @@ match_wildcards: 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 -- cgit v1.2.1