[PATCH] diff-options: add --patch-with-stat

Subsystems: documentation, the rest

DORMANTno replies

3 messages, 2 authors, 2016-06-15 · open the first message on its own page

[PATCH] diff-options: add --patch-with-stat

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:42:23

With this option, git prepends a diffstat in front of the patch.

Since I really, really do not know what a diffstat of a combined diff
("merge diff") should look like, the diffstat is not generated for these.

Signed-off-by: Johannes Schindelin <redacted>

---

	Buggeth, and you shall be given.

	BTW I really would like to have a diffstat for combined diffs.
	Any ideas?

 Documentation/diff-options.txt |    3 +++
 diff.c                         |   17 ++++++++++++++++-
 diff.h                         |    3 +++
 3 files changed, 22 insertions(+), 1 deletions(-)

c06cf94fe5a2f0b004e7b46c0322554e7ec4ff99
diff --git a/Documentation/diff-options.txt b/Documentation/diff-options.txt
index 447e522..c183dc9 100644
--- a/Documentation/diff-options.txt
+++ b/Documentation/diff-options.txt
@@ -10,6 +10,9 @@
 --stat::
 	Generate a diffstat instead of a patch.
 
+--patch-with-stat::
+	Generate patch and prepend its diffstat.
+
 -z::
 	\0 line termination on output
 
diff --git a/diff.c b/diff.c
index f1b672d..1b33465 100644
--- a/diff.c
+++ b/diff.c
@@ -1049,6 +1049,10 @@ int diff_opt_parse(struct diff_options *
 	}
 	else if (!strcmp(arg, "--stat"))
 		options->output_format = DIFF_FORMAT_DIFFSTAT;
+	else if (!strcmp(arg, "--patch-with-stat")) {
+		options->output_format = DIFF_FORMAT_PATCH;
+		options->with_stat = 1;
+	}
 	else if (!strcmp(arg, "-z"))
 		options->line_termination = 0;
 	else if (!strncmp(arg, "-l", 2))
@@ -1518,7 +1522,7 @@ void diff_flush(struct diff_options *opt
 	int diff_output_format = options->output_format;
 	struct diffstat_t *diffstat = NULL;
 
-	if (diff_output_format == DIFF_FORMAT_DIFFSTAT) {
+	if (diff_output_format == DIFF_FORMAT_DIFFSTAT || options->with_stat) {
 		diffstat = xcalloc(sizeof (struct diffstat_t), 1);
 		diffstat->xm.consume = diffstat_consume;
 	}
@@ -1530,6 +1534,17 @@ void diff_flush(struct diff_options *opt
 		}
 		putchar(options->line_termination);
 	}
+	if (options->with_stat) {
+		for (i = 0; i < q->nr; i++) {
+			struct diff_filepair *p = q->queue[i];
+			flush_one_pair(p, DIFF_FORMAT_DIFFSTAT, options,
+					diffstat);
+		}
+		show_stats(diffstat);
+		free(diffstat);
+		diffstat = NULL;
+		putchar(options->line_termination);
+	}
 	for (i = 0; i < q->nr; i++) {
 		struct diff_filepair *p = q->queue[i];
 		flush_one_pair(p, diff_output_format, options, diffstat);
diff --git a/diff.h b/diff.h
index 2f8aff2..f783bae 100644
--- a/diff.h
+++ b/diff.h
@@ -25,6 +25,7 @@ struct diff_options {
 	const char *pickaxe;
 	unsigned recursive:1,
 		 with_raw:1,
+		 with_stat:1,
 		 tree_in_recursive:1,
 		 full_index:1;
 	int break_opt;
@@ -120,6 +121,8 @@ #define COMMON_DIFF_OPTIONS_HELP \
 "  --patch-with-raw\n" \
 "                output both a patch and the diff-raw format.\n" \
 "  --stat        show diffstat instead of patch.\n" \
+"  --patch-with-stat\n" \
+"                output a patch and prepend its diffstat.\n" \
 "  --name-only   show only names of changed files.\n" \
 "  --name-status show names and status of changed files.\n" \
 "  --full-index  show full object name on index lines.\n" \
-- 
1.3.0.rc4.ga1167e-dirty

Re: [PATCH] diff-options: add --patch-with-stat

From: Marco Costalba <hidden>
Date: 2016-06-15 22:42:23

On 4/15/06, Johannes Schindelin [off-list ref] wrote:
With this option, git prepends a diffstat in front of the patch.
Thanks!  qgit will set this as default!
        Buggeth, and you shall be given.

        BTW I really would like to have a diffstat for combined diffs.
        Any ideas?
Well..hem..why do not  count  the (shifted) + and - in the combined diffs ouput?

I suspect this can be a total idiocy, but now I'm missing why.  :-)

Marco

Re: [PATCH] diff-options: add --patch-with-stat

From: Johannes Schindelin <hidden>
Date: 2016-06-15 22:42:23

Hi,

On Sat, 15 Apr 2006, Marco Costalba wrote:
On 4/15/06, Johannes Schindelin [off-list ref] wrote:
quoted
        BTW I really would like to have a diffstat for combined diffs.
        Any ideas?
Well..hem..why do not count the (shifted) + and - in the combined diffs 
ouput?
This does not help. The combined diff is so useful, because it contains 
the information as to which parent has this difference, and which parent 
has not.

By just counting the plusses and minusses, this information is filtered 
out.

Ciao,
Dscho
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help