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>
This commit is contained in:

committed by
Junio C Hamano

parent
cbdda02404
commit
2935327394
@ -10,6 +10,9 @@
|
|||||||
--stat::
|
--stat::
|
||||||
Generate a diffstat instead of a patch.
|
Generate a diffstat instead of a patch.
|
||||||
|
|
||||||
|
--patch-with-stat::
|
||||||
|
Generate patch and prepend its diffstat.
|
||||||
|
|
||||||
-z::
|
-z::
|
||||||
\0 line termination on output
|
\0 line termination on output
|
||||||
|
|
||||||
|
17
diff.c
17
diff.c
@ -1060,6 +1060,10 @@ int diff_opt_parse(struct diff_options *options, const char **av, int ac)
|
|||||||
}
|
}
|
||||||
else if (!strcmp(arg, "--stat"))
|
else if (!strcmp(arg, "--stat"))
|
||||||
options->output_format = DIFF_FORMAT_DIFFSTAT;
|
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"))
|
else if (!strcmp(arg, "-z"))
|
||||||
options->line_termination = 0;
|
options->line_termination = 0;
|
||||||
else if (!strncmp(arg, "-l", 2))
|
else if (!strncmp(arg, "-l", 2))
|
||||||
@ -1529,7 +1533,7 @@ void diff_flush(struct diff_options *options)
|
|||||||
int diff_output_format = options->output_format;
|
int diff_output_format = options->output_format;
|
||||||
struct diffstat_t *diffstat = NULL;
|
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 = xcalloc(sizeof (struct diffstat_t), 1);
|
||||||
diffstat->xm.consume = diffstat_consume;
|
diffstat->xm.consume = diffstat_consume;
|
||||||
}
|
}
|
||||||
@ -1541,6 +1545,17 @@ void diff_flush(struct diff_options *options)
|
|||||||
}
|
}
|
||||||
putchar(options->line_termination);
|
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++) {
|
for (i = 0; i < q->nr; i++) {
|
||||||
struct diff_filepair *p = q->queue[i];
|
struct diff_filepair *p = q->queue[i];
|
||||||
flush_one_pair(p, diff_output_format, options, diffstat);
|
flush_one_pair(p, diff_output_format, options, diffstat);
|
||||||
|
3
diff.h
3
diff.h
@ -25,6 +25,7 @@ struct diff_options {
|
|||||||
const char *pickaxe;
|
const char *pickaxe;
|
||||||
unsigned recursive:1,
|
unsigned recursive:1,
|
||||||
with_raw:1,
|
with_raw:1,
|
||||||
|
with_stat:1,
|
||||||
tree_in_recursive:1,
|
tree_in_recursive:1,
|
||||||
full_index:1;
|
full_index:1;
|
||||||
int break_opt;
|
int break_opt;
|
||||||
@ -120,6 +121,8 @@ extern void diffcore_std_no_resolve(struct diff_options *);
|
|||||||
" --patch-with-raw\n" \
|
" --patch-with-raw\n" \
|
||||||
" output both a patch and the diff-raw format.\n" \
|
" output both a patch and the diff-raw format.\n" \
|
||||||
" --stat show diffstat instead of patch.\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-only show only names of changed files.\n" \
|
||||||
" --name-status show names and status of changed files.\n" \
|
" --name-status show names and status of changed files.\n" \
|
||||||
" --full-index show full object name on index lines.\n" \
|
" --full-index show full object name on index lines.\n" \
|
||||||
|
Reference in New Issue
Block a user