[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