Merge branch 'as/tree-walk-fix-aggressive-short-cut' into maint
authorJunio C Hamano <gitster@pobox.com>
Thu, 13 Feb 2014 21:37:53 +0000 (13:37 -0800)
committerJunio C Hamano <gitster@pobox.com>
Thu, 13 Feb 2014 21:37:53 +0000 (13:37 -0800)
The pathspec matching code, while comparing two trees (e.g. "git
diff A B -- path1 path2") was too aggressive and failed to match
some paths when multiple pathspecs were involved.

* as/tree-walk-fix-aggressive-short-cut:
tree_entry_interesting: match against all pathspecs

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 5ece8c3477b11f3bf0c54196924ac24568309225..e06f240c7515ab7b08c4441c3cb48fce1602d0e2 100644 (file)
@@ -743,7 +743,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