git/builtin
Brandon Williams eef3df5a93 pathspec: only match across submodule boundaries when requested
Commit 74ed43711f (grep: enable recurse-submodules to work on <tree>
objects, 2016-12-16) taught 'tree_entry_interesting()' to be able to
match across submodule boundaries in the presence of wildcards.  This is
done by performing literal matching up to the first wildcard and then
punting to the submodule itself to perform more accurate pattern
matching.  Instead of introducing a new flag to request this behavior,
commit 74ed43711f overloaded the already existing 'recursive' flag in
'struct pathspec' to request this behavior.

This leads to a bug where whenever any other caller has the 'recursive'
flag set as well as a pathspec with wildcards that all submodules will
be indicated as matches.  One simple example of this is:

	git init repo
	cd repo

	git init submodule
	git -C submodule commit -m initial --allow-empty

	touch "[bracket]"
	git add "[bracket]"
	git commit -m bracket
	git add submodule
	git commit -m submodule

	git rev-list HEAD -- "[bracket]"

Fix this by introducing the new flag 'recurse_submodules' in 'struct
pathspec' and using this flag to determine if matches should be allowed
to cross submodule boundaries.

This fixes https://github.com/git-for-windows/git/issues/1371.

Signed-off-by: Brandon Williams <bmwill@google.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
2017-12-05 09:23:15 -08:00
..
add.c Merge branch 'jk/warn-add-gitlink' 2017-06-24 14:28:41 -07:00
am.c Merge branch 'ab/free-and-null' 2017-06-24 14:28:41 -07:00
annotate.c
apply.c
archive.c
bisect--helper.c
blame.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
branch.c Merge branch 'kn/ref-filter-branch-list' 2017-07-12 15:18:23 -07:00
bundle.c
cat-file.c Merge branch 'jt/unify-object-info' 2017-07-05 13:32:57 -07:00
check-attr.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
check-ignore.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
check-mailmap.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
check-ref-format.c
checkout-index.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
checkout.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
clean.c Merge branch 'ab/free-and-null' 2017-06-24 14:28:41 -07:00
clone.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
column.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
commit-tree.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
commit.c Merge branch 'ks/typofix-commit-c-comment' 2017-07-10 13:42:51 -07:00
config.c Merge branch 'ab/free-and-null' 2017-06-24 14:28:41 -07:00
count-objects.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
credential.c credential: handle invalid arguments earlier 2017-05-30 14:45:03 +09:00
describe.c Merge branch 'sb/hashmap-customize-comparison' 2017-07-13 16:14:54 -07:00
diff-files.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
diff-index.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
diff-tree.c Merge branch 'jc/diff-tree-stale-comment' into maint 2017-06-24 15:29:31 -07:00
diff.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
difftool.c hashmap.h: compare function has access to a data field 2017-06-30 12:49:28 -07:00
fast-export.c hashmap.h: compare function has access to a data field 2017-06-30 12:49:28 -07:00
fetch-pack.c
fetch.c submodule: remove fetch.recursesubmodules from submodule-config parsing 2017-08-02 14:26:46 -07:00
fmt-merge-msg.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
for-each-ref.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
fsck.c Merge branch 'rs/sha1-name-readdir-optim' 2017-07-05 13:32:56 -07:00
gc.c Merge branch 'rs/use-div-round-up' 2017-07-12 15:18:23 -07:00
get-tar-commit-id.c
grep.c pathspec: only match across submodule boundaries when requested 2017-12-05 09:23:15 -08:00
hash-object.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
help.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
index-pack.c Merge branch 'jt/unify-object-info' 2017-07-05 13:32:57 -07:00
init-db.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
interpret-trailers.c
log.c Merge branch 'rs/use-div-round-up' 2017-07-12 15:18:23 -07:00
ls-files.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
ls-remote.c wildmatch: remove unused wildopts parameter 2017-06-23 18:27:07 -07:00
ls-tree.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
mailinfo.c
mailsplit.c
merge-base.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
merge-file.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
merge-index.c
merge-ours.c
merge-recursive.c
merge-tree.c
merge.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
mktag.c
mktree.c
mv.c submodule: check for unstaged .gitmodules outside of config parsing 2017-08-02 14:26:46 -07:00
name-rev.c Merge branch 'ab/wildmatch' 2017-07-10 13:42:51 -07:00
notes.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
pack-objects.c Merge branch 'ab/free-and-null' 2017-06-24 14:28:41 -07:00
pack-redundant.c
pack-refs.c
patch-id.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
prune-packed.c sha1_file: guard against invalid loose subdirectory numbers 2017-06-24 11:09:52 -07:00
prune.c Merge branch 'rs/sha1-name-readdir-optim' 2017-07-05 13:32:56 -07:00
pull.c Merge branch 'sb/pull-rebase-submodule' 2017-07-13 16:14:54 -07:00
push.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
read-tree.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
rebase--helper.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
receive-pack.c Merge branch 'rs/use-div-round-up' 2017-07-12 15:18:23 -07:00
reflog.c Merge branch 'ab/wildmatch' 2017-07-10 13:42:51 -07:00
remote-ext.c remote-{ext,fd}: print usage message on invalid arguments 2017-05-30 14:45:04 +09:00
remote-fd.c remote-{ext,fd}: print usage message on invalid arguments 2017-05-30 14:45:04 +09:00
remote.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
repack.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
replace.c Merge branch 'ab/wildmatch' 2017-07-10 13:42:51 -07:00
rerere.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
reset.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
rev-list.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
rev-parse.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
revert.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
rm.c submodule: check for unstaged .gitmodules outside of config parsing 2017-08-02 14:26:46 -07:00
send-pack.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
shortlog.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
show-branch.c Merge branch 'ab/wildmatch' 2017-07-10 13:42:51 -07:00
show-ref.c
stripspace.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
submodule--helper.c submodule: remove submodule.fetchjobs from submodule-config parsing 2017-08-02 14:26:46 -07:00
symbolic-ref.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
tag.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
unpack-file.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
unpack-objects.c Merge branch 'ab/free-and-null' 2017-06-24 14:28:41 -07:00
update-index.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
update-ref.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
update-server-info.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
upload-archive.c upload-archive: handle "-h" option early 2017-05-30 14:45:04 +09:00
var.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
verify-commit.c Merge branch 'bw/config-h' 2017-06-24 14:28:41 -07:00
verify-pack.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
verify-tag.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00
worktree.c Merge branch 'ab/free-and-null' 2017-06-24 14:28:41 -07:00
write-tree.c config: don't include config.h by default 2017-06-15 12:56:22 -07:00