tree_entry_interesting: match against all pathspecs
authorAndy Spencer <andy753421@gmail.com>
Sat, 25 Jan 2014 22:06:46 +0000 (22:06 +0000)
committerJunio C Hamano <gitster@pobox.com>
Mon, 27 Jan 2014 17:01:50 +0000 (09:01 -0800)
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>
t/t4010-diff-pathspec.sh
tree-walk.c
index af5134b70c6b4898aa652907d58191d45aa30ac4..589bc6bfb4543324dcf6f166c4db482958f26e63 100755 (executable)
@@ -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
index c626135234f2fbf2d8711e32a020d2e228a307b2..d5914f598dcacc681f747bb27df508a7f37f7f52 100644 (file)
@@ -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