git-apply --numstat

The new option, --numstat, shows number of inserted and deleted
lines for each path.  It is similar to --stat output but is
meant to be more machine friendly by giving number of added and
deleted lines and unabbreviated paths.

Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
Junio C Hamano 2005-10-28 02:43:31 -07:00
parent c485104741
commit 7d8b7c21c9
2 changed files with 32 additions and 2 deletions

View file

@ -8,7 +8,7 @@ git-apply - Apply patch on a git index file and a work tree
SYNOPSIS SYNOPSIS
-------- --------
'git-apply' [--stat] [--summary] [--check] [--index] [--apply] [--index-info] [-z] [<patch>...] 'git-apply' [--stat] [--numstat] [--summary] [--check] [--index] [--apply] [--index-info] [-z] [<patch>...]
DESCRIPTION DESCRIPTION
----------- -----------
@ -25,6 +25,12 @@ OPTIONS
Instead of applying the patch, output diffstat for the Instead of applying the patch, output diffstat for the
input. Turns off "apply". input. Turns off "apply".
--numstat::
Similar to \--stat, but shows number of added and
deleted lines in decimal notation and pathname without
abbreviation, to make it more machine friendly. Turns
off "apply".
--summary:: --summary::
Instead of applying the patch, output a condensed Instead of applying the patch, output a condensed
summary of information obtained from git diff extended summary of information obtained from git diff extended

26
apply.c
View file

@ -13,18 +13,20 @@
// --check turns on checking that the working tree matches the // --check turns on checking that the working tree matches the
// files that are being modified, but doesn't apply the patch // files that are being modified, but doesn't apply the patch
// --stat does just a diffstat, and doesn't actually apply // --stat does just a diffstat, and doesn't actually apply
// --numstat does numeric diffstat, and doesn't actually apply
// --index-info shows the old and new index info for paths if available. // --index-info shows the old and new index info for paths if available.
// //
static int check_index = 0; static int check_index = 0;
static int write_index = 0; static int write_index = 0;
static int diffstat = 0; static int diffstat = 0;
static int numstat = 0;
static int summary = 0; static int summary = 0;
static int check = 0; static int check = 0;
static int apply = 1; static int apply = 1;
static int show_index_info = 0; static int show_index_info = 0;
static int line_termination = '\n'; static int line_termination = '\n';
static const char apply_usage[] = static const char apply_usage[] =
"git-apply [--stat] [--summary] [--check] [--index] [--apply] [--index-info] [-z] <patch>..."; "git-apply [--stat] [--numstat] [--summary] [--check] [--index] [--apply] [--index-info] [-z] <patch>...";
/* /*
* For "diff-stat" like behaviour, we keep track of the biggest change * For "diff-stat" like behaviour, we keep track of the biggest change
@ -1317,6 +1319,20 @@ static void stat_patch_list(struct patch *patch)
printf(" %d files changed, %d insertions(+), %d deletions(-)\n", files, adds, dels); printf(" %d files changed, %d insertions(+), %d deletions(-)\n", files, adds, dels);
} }
static void numstat_patch_list(struct patch *patch)
{
for ( ; patch; patch = patch->next) {
const char *name;
name = patch->old_name ? patch->old_name : patch->new_name;
printf("%d\t%d\t", patch->lines_added, patch->lines_deleted);
if (line_termination && quote_c_style(name, NULL, NULL, 0))
quote_c_style(name, NULL, stdout, 0);
else
fputs(name, stdout);
putchar('\n');
}
}
static void show_file_mode_name(const char *newdelete, unsigned int mode, const char *name) static void show_file_mode_name(const char *newdelete, unsigned int mode, const char *name)
{ {
if (mode) if (mode)
@ -1650,6 +1666,9 @@ static int apply_patch(int fd)
if (diffstat) if (diffstat)
stat_patch_list(list); stat_patch_list(list);
if (numstat)
numstat_patch_list(list);
if (summary) if (summary)
summary_patch_list(list); summary_patch_list(list);
@ -1683,6 +1702,11 @@ int main(int argc, char **argv)
diffstat = 1; diffstat = 1;
continue; continue;
} }
if (!strcmp(arg, "--numstat")) {
apply = 0;
numstat = 1;
continue;
}
if (!strcmp(arg, "--summary")) { if (!strcmp(arg, "--summary")) {
apply = 0; apply = 0;
summary = 1; summary = 1;