From a1dfa5448d583bbfd1ec45642a4495ad499970c9 Mon Sep 17 00:00:00 2001 From: Jeff King Date: Thu, 7 Aug 2025 22:52:58 +0200 Subject: diff: teach tree-diff a max-depth parameter When you are doing a tree-diff, there are basically two options: do not recurse into subtrees at all, or recurse indefinitely. While most callers would want to always recurse and see full pathnames, some may want the efficiency of looking only at a particular level of the tree. This is currently easy to do for the top-level (just turn off recursion), but you cannot say "show me what changed in subdir/, but do not recurse". This patch adds a max-depth parameter which is measured from the closest pathspec match, so that you can do: git log --raw --max-depth=1 -- a/b/c and see the raw output for a/b/c/, but not those of a/b/c/d/ (instead of the raw output you would see for a/b/c/d). Co-authored-by: Toon Claes Signed-off-by: Toon Claes Signed-off-by: Junio C Hamano --- diff.h | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'diff.h') diff --git a/diff.h b/diff.h index 62e5768a9a..bbced5f745 100644 --- a/diff.h +++ b/diff.h @@ -404,6 +404,14 @@ struct diff_options { struct strmap *additional_path_headers; int no_free; + + /* + * The value '0' is a valid max-depth (for no recursion), and value '-1' + * also (for unlimited recursion), so the extra "valid" flag is used to + * determined whether the user specified option --max-depth. + */ + int max_depth; + int max_depth_valid; }; unsigned diff_filter_bit(char status); -- cgit v1.3