Merge branch 'bw/pathspec-match-submodule-boundary'
An v2.12-era regression in pathspec match logic, which made it look into submodule tree even when it is not desired, has been fixed. * bw/pathspec-match-submodule-boundary: pathspec: only match across submodule boundaries when requested
This commit is contained in:
commit
f4f233e13d
@ -1015,6 +1015,7 @@ int cmd_grep(int argc, const char **argv, const char *prefix)
|
|||||||
prefix, argv + i);
|
prefix, argv + i);
|
||||||
pathspec.max_depth = opt.max_depth;
|
pathspec.max_depth = opt.max_depth;
|
||||||
pathspec.recursive = 1;
|
pathspec.recursive = 1;
|
||||||
|
pathspec.recurse_submodules = !!recurse_submodules;
|
||||||
|
|
||||||
#ifndef NO_PTHREADS
|
#ifndef NO_PTHREADS
|
||||||
if (list.nr || cached || show_in_pager)
|
if (list.nr || cached || show_in_pager)
|
||||||
|
@ -24,6 +24,7 @@ struct pathspec {
|
|||||||
int nr;
|
int nr;
|
||||||
unsigned int has_wildcard:1;
|
unsigned int has_wildcard:1;
|
||||||
unsigned int recursive:1;
|
unsigned int recursive:1;
|
||||||
|
unsigned int recurse_submodules:1;
|
||||||
unsigned magic;
|
unsigned magic;
|
||||||
int max_depth;
|
int max_depth;
|
||||||
struct pathspec_item {
|
struct pathspec_item {
|
||||||
|
@ -93,4 +93,23 @@ test_expect_success 'command line pathspec parsing for "git log"' '
|
|||||||
git log --merge -- a
|
git log --merge -- a
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'tree_entry_interesting does not match past submodule boundaries' '
|
||||||
|
test_when_finished "rm -rf repo submodule" &&
|
||||||
|
git init submodule &&
|
||||||
|
test_commit -C submodule initial &&
|
||||||
|
git init repo &&
|
||||||
|
>"repo/[bracket]" &&
|
||||||
|
git -C repo add "[bracket]" &&
|
||||||
|
test_tick &&
|
||||||
|
git -C repo commit -m bracket &&
|
||||||
|
git -C repo rev-list HEAD -- "[bracket]" >expect &&
|
||||||
|
|
||||||
|
git -C repo submodule add ../submodule &&
|
||||||
|
test_tick &&
|
||||||
|
git -C repo commit -m submodule &&
|
||||||
|
|
||||||
|
git -C repo rev-list HEAD -- "[bracket]" >actual &&
|
||||||
|
test_cmp expect actual
|
||||||
|
'
|
||||||
|
|
||||||
test_done
|
test_done
|
||||||
|
@ -1011,7 +1011,8 @@ static enum interesting do_match(const struct name_entry *entry,
|
|||||||
* character. More accurate matching can then
|
* character. More accurate matching can then
|
||||||
* be performed in the submodule itself.
|
* be performed in the submodule itself.
|
||||||
*/
|
*/
|
||||||
if (ps->recursive && S_ISGITLINK(entry->mode) &&
|
if (ps->recurse_submodules &&
|
||||||
|
S_ISGITLINK(entry->mode) &&
|
||||||
!ps_strncmp(item, match + baselen,
|
!ps_strncmp(item, match + baselen,
|
||||||
entry->path,
|
entry->path,
|
||||||
item->nowildcard_len - baselen))
|
item->nowildcard_len - baselen))
|
||||||
@ -1060,7 +1061,7 @@ match_wildcards:
|
|||||||
* character. More accurate matching can then
|
* character. More accurate matching can then
|
||||||
* be performed in the submodule itself.
|
* be performed in the submodule itself.
|
||||||
*/
|
*/
|
||||||
if (ps->recursive && S_ISGITLINK(entry->mode) &&
|
if (ps->recurse_submodules && S_ISGITLINK(entry->mode) &&
|
||||||
!ps_strncmp(item, match, base->buf + base_offset,
|
!ps_strncmp(item, match, base->buf + base_offset,
|
||||||
item->nowildcard_len)) {
|
item->nowildcard_len)) {
|
||||||
strbuf_setlen(base, base_offset + baselen);
|
strbuf_setlen(base, base_offset + baselen);
|
||||||
|
Loading…
Reference in New Issue
Block a user