summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLibravatar Junio C Hamano <gitster@pobox.com>2014-02-13 13:37:53 -0800
committerLibravatar Junio C Hamano <gitster@pobox.com>2014-02-13 13:37:53 -0800
commitb4e931d84eddaab144643831d9508ea12d9cf38e (patch)
treea20d81b50c24cf2a5fa10d30e6046e8c360ed84c
parentGit 1.8.5.4 (diff)
parenttree_entry_interesting: match against all pathspecs (diff)
downloadtgif-b4e931d84eddaab144643831d9508ea12d9cf38e.tar.xz
Merge branch 'as/tree-walk-fix-aggressive-short-cut' into maint
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
-rwxr-xr-xt/t4010-diff-pathspec.sh13
-rw-r--r--tree-walk.c2
2 files changed, 14 insertions, 1 deletions
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 5ece8c3477..e06f240c75 100644
--- a/tree-walk.c
+++ b/tree-walk.c
@@ -743,7 +743,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