Thread (1 message) 1 message, 1 author, 2016-06-15
DORMANTno replies

[PATCH] diff --stat: make sure to set recursive.

From: Junio C Hamano <hidden>
Date: 2016-06-15 22:42:23
Subsystem: the rest · Maintainer: Linus Torvalds

Linus Torvalds [off-list ref] writes:
Junio, I just tested the "master" branch, and "git log --stat" doesn't 
work there. You may _think_ it works because you've tested it on the git 
tree, were it looks like it is working, but it's missing setting 
"recursive", so it won't actually go into any subdirectories (so it mostly 
works for git itself which has most stuff in the top-level directory, but 
it almost completely doesn't work for linux)
True.  It shows that I usually install and use "next" version
exclusively, which is fine during the normal development phase,
but it was a wrong thing to keep doing just before the release.

I think diff-tree --stat has the same problem in "master", so
I'd do it slightly differently.

-- >8 --
Just like "patch" format always needs recursive, "diffstat"
format does not make sense without setting recursive.

Signed-off-by: Junio C Hamano <redacted>

---

 diff-tree.c |    3 ---
 diff.c      |   10 ++++++++++
 git.c       |    2 --
 3 files changed, 10 insertions(+), 5 deletions(-)

f56ef54174598d5362d0446c5a560cb5892537c2
diff --git a/diff-tree.c b/diff-tree.c
index 7015b06..d1c61c8 100644
--- a/diff-tree.c
+++ b/diff-tree.c
@@ -117,9 +117,6 @@ int main(int argc, const char **argv)
 	if (opt->dense_combined_merges)
 		opt->diffopt.output_format = DIFF_FORMAT_PATCH;
 
-	if (opt->diffopt.output_format == DIFF_FORMAT_PATCH)
-		opt->diffopt.recursive = 1;
-
 	diff_tree_setup_paths(get_pathspec(prefix, argv), &opt->diffopt);
 	diff_setup_done(&opt->diffopt);
 
diff --git a/diff.c b/diff.c
index b54bbfa..3a1e6ce 100644
--- a/diff.c
+++ b/diff.c
@@ -1029,6 +1029,16 @@ int diff_setup_done(struct diff_options 
 	     options->detect_rename != DIFF_DETECT_COPY) ||
 	    (0 <= options->rename_limit && !options->detect_rename))
 		return -1;
+
+	/*
+	 * These cases always need recursive; we do not drop caller-supplied
+	 * recursive bits for other formats here.
+	 */
+	if ((options->output_format == DIFF_FORMAT_PATCH) ||
+	    (options->output_format == DIFF_FORMAT_DIFFSTAT) ||
+	    (options->with_stat))
+		options->recursive = 1;
+
 	if (options->detect_rename && options->rename_limit < 0)
 		options->rename_limit = diff_rename_limit_default;
 	if (options->setup & DIFF_SETUP_USE_CACHE) {
diff --git a/git.c b/git.c
index 140ed18..5209b04 100644
--- a/git.c
+++ b/git.c
@@ -344,8 +344,6 @@ static int cmd_log(int argc, const char 
 			opt.ignore_merges = 0;
 		if (opt.dense_combined_merges)
 			opt.diffopt.output_format = DIFF_FORMAT_PATCH;
-		if (opt.diffopt.output_format == DIFF_FORMAT_PATCH)
-			opt.diffopt.recursive = 1;
 		if (!full_diff && rev.prune_data)
 			diff_tree_setup_paths(rev.prune_data, &opt.diffopt);
 		diff_setup_done(&opt.diffopt);
-- 
1.3.0.rc4.g8060
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help