summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schindelin <Johannes.Schindelin@gmx.de>2006-04-15 11:41:18 (GMT)
committerJunio C Hamano <junkio@cox.net>2006-04-16 02:30:27 (GMT)
commit293532739415d287786a312ec10849723383796e (patch)
tree4525f9840d72189980a7e5c095b9ad81abe191fb
parentcbdda024049947366804d60bdc5e5fc3ab3ee3a5 (diff)
downloadgit-293532739415d287786a312ec10849723383796e.zip
git-293532739415d287786a312ec10849723383796e.tar.gz
git-293532739415d287786a312ec10849723383796e.tar.bz2
diff-options: add --patch-with-stat
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 <Johannes.Schindelin@gmx.de> Signed-off-by: Junio C Hamano <junkio@cox.net>
-rw-r--r--Documentation/diff-options.txt3
-rw-r--r--diff.c17
-rw-r--r--diff.h3
3 files changed, 22 insertions, 1 deletions
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 46e8529..b54bbfa 100644
--- a/diff.c
+++ b/diff.c
@@ -1060,6 +1060,10 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
}
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))
@@ -1529,7 +1533,7 @@ void diff_flush(struct diff_options *options)
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;
}
@@ -1541,6 +1545,17 @@ void diff_flush(struct diff_options *options)
}
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 @@ extern void diffcore_std_no_resolve(struct diff_options *);
" --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" \