The main difference in v2 is that instead of piping through an index_state struct into parse_pathspec, I ripped out the logic that needed to access the index and either removed it completely if it wasn't needed anymore (stripping submodule slash) or factored it out into its own function which can be called after initializing a pathspec object (dying if a path descends into a submodule). Brandon Williams (6): pathspec: provide a more descriptive die message submodule: add die_in_unpopulated_submodule function pathspec: remove PATHSPEC_STRIP_SUBMODULE_SLASH_EXPENSIVE flag ls-files: prevent prune_cache from overeagerly pruning submodules pathspec: remove PATHSPEC_STRIP_SUBMODULE_SLASH_CHEAP pathspec: convert find_pathspecs_matching_against_index to take an index builtin/add.c | 12 ++++-- builtin/check-ignore.c | 6 ++- builtin/ls-files.c | 31 ++++++++++++--- builtin/reset.c | 1 - builtin/rm.c | 3 +- builtin/submodule--helper.c | 3 +- pathspec.c | 86 ++++------------------------------------ pathspec.h | 25 +++++------- submodule.c | 63 +++++++++++++++++++++++++++++ submodule.h | 4 ++ t/t6134-pathspec-in-submodule.sh | 6 +-- 11 files changed, 124 insertions(+), 116 deletions(-) -- 2.13.0.rc2.291.g57267f2277-goog