From: Jacob Keller <jacob.keller@xxxxxxxxx> This series adds support for using pathspecs to limit the comparison when using git diff --no-index. This is similar to how you can limit what is included with pathspecs when comparing inside a repository. This version uses only one set of pathspecs and instead uses some logic to skip past the root of each directory tree being scanned. This avoids needing to parse pathspecs multiple times, and is overall a simpler approach. I also opted to add a match_leading_pathspec() instead of exposing the match_pathspec_with_flags(), since I didn't how DO_MATCH_EXCLUDES wasn't exposed. It felt messy. I tried a couple of different methods for skipping past the leading portion of a path, including skip_prefix. Ultimately just the index to skip to seemed like the simplest solution. I like that it means we only need a single pathspec array now, and that we no longer have to worry about changing prefix_path_gently. Changes since v3: * Drop the patch modifying prefix_path(_gently). * Instead of exposing the do_match_pathspec flags, create a match_leading_pathspec() variant that sets both flags when is_dir is true. * Use some simple logic to skip past the starting portions of each path before calling match_leading_pathspec * Re-write the commit message for the final patch * Add a couple more test cases * Simplify existing test cases to use --name-status * Drop remaining TODOs Jacob Keller (3): pathspec: add match_leading_pathspec variant pathspec: add flag to indicate operation without repository diff --no-index: support limiting by pathspec pathspec.h | 11 +++++ builtin/diff.c | 2 +- diff-no-index.c | 89 ++++++++++++++++++++++++++++++------- dir.c | 19 ++++++-- pathspec.c | 6 ++- Documentation/git-diff.adoc | 10 +++-- t/t4053-diff-no-index.sh | 75 +++++++++++++++++++++++++++++++ 7 files changed, 187 insertions(+), 25 deletions(-) -- 2.48.1.397.gec9d649cc640