]> git.ipfire.org Git - thirdparty/git.git/commitdiff
diff-lib: skip paths outside prefix in oneway_diff()
authorJeff King <peff@peff.net>
Sun, 26 Jul 2026 08:47:05 +0000 (04:47 -0400)
committerJunio C Hamano <gitster@pobox.com>
Tue, 28 Jul 2026 16:28:09 +0000 (09:28 -0700)
Commit 8174627b3d (diff-lib: ignore paths that are outside $cwd if
--relative asked, 2021-08-22) taught run_diff_files() to skip entries
outside the requested prefix before processing them.

Do the same in oneway_diff(), which handles the diff-index code path.
The lower-level diff queue functions already reject such paths, but
checking here avoids unnecessary work and keeps them out of every
do_oneway_diff() code path.

Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff-lib.c

index bcab7c8500ae033c9f81632bc7950b99690b5f44..d07e5d8d5b0aaeecaa539d1474c5859cf22eba7e 100644 (file)
@@ -538,6 +538,11 @@ static int oneway_diff(const struct cache_entry * const *src,
        if (!idx && !tree)
                BUG("oneway_diff with neither idx nor tree");
 
+       if (revs->diffopt.prefix &&
+           strncmp((idx ? idx : tree)->name, revs->diffopt.prefix,
+                   revs->diffopt.prefix_length))
+               return 0;
+
        if (ce_path_match(revs->diffopt.repo->index,
                          idx ? idx : tree,
                          &revs->prune_data, NULL)) {