threads / patch / 35733

patchtree_entry_interesting: match against all pathspecs

Subject: [PATCH] tree_entry_interesting: match against all pathspecs

## tl;dr

3 messages between Jan 25, 2014 and Jan 27, 2014. Diffs are folded; open one to read it.

replies: 2people: 3as markdown or json

Andy Spencer· Jan 25, 2014, 22:06 UTC · lore

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>
---
 tree-walk.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
Show changes to tree-walk.c +1 −1
diff --git a/tree-walk.c b/tree-walk.c
index 5ece8c3..e06f240 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
-- 
1.8.5.3
Duy Nguyen· Jan 25, 2014, 22:48 UTC · re: Andy Spencer · lore

Re: [PATCH] tree_entry_interesting: match against all pathspecs

On Sat, Jan 25, 2014 at 10:06:46PM +0000, Andy Spencer wrote:
Show 26 quoted lines
> 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>
> ---
>  tree-walk.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/tree-walk.c b/tree-walk.c
> index 5ece8c3..e06f240 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
Ack. Perhaps this on top to verify it
-- 8< --
Show changes to t/t4010-diff-pathspec.sh +13 −1
diff --git a/t/t4010-diff-pathspec.sh b/t/t4010-diff-pathspec.sh
index af5134b..d9f37c3 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
-- 8< --
Junio C Hamano· Jan 27, 2014, 16:57 UTC · re: Duy Nguyen · lore

Re: [PATCH] tree_entry_interesting: match against all pathspecs

Duy Nguyen <pclouds@gmail.com> writes:
Show 26 quoted lines
> Ack. Perhaps this on top to verify it
>
> -- 8< --
> diff --git a/t/t4010-diff-pathspec.sh b/t/t4010-diff-pathspec.sh
> index af5134b..d9f37c3 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
> -- 8< --
Thanks, both.  Will queue.

← back to recent threads