diff --stat: do not run diff on indentical files

If two objects are known to be equal, there is no point running the diff.

Signed-off-by: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Zbigniew Jędrzejewski-Szmek 2012-05-01 19:10:15 +02:00 committed by Junio C Hamano
parent e18872b2f0
commit 352ca4e105
1 changed files with 5 additions and 2 deletions

7
diff.c
View File

@ -2370,6 +2370,7 @@ static void builtin_diffstat(const char *name_a, const char *name_b,
{ {
mmfile_t mf1, mf2; mmfile_t mf1, mf2;
struct diffstat_file *data; struct diffstat_file *data;
int same_contents;


data = diffstat_add(diffstat, name_a, name_b); data = diffstat_add(diffstat, name_a, name_b);


@ -2378,9 +2379,11 @@ static void builtin_diffstat(const char *name_a, const char *name_b,
return; return;
} }


same_contents = !hashcmp(one->sha1, two->sha1);

if (diff_filespec_is_binary(one) || diff_filespec_is_binary(two)) { if (diff_filespec_is_binary(one) || diff_filespec_is_binary(two)) {
data->is_binary = 1; data->is_binary = 1;
if (!hashcmp(one->sha1, two->sha1)) { if (same_contents) {
data->added = 0; data->added = 0;
data->deleted = 0; data->deleted = 0;
} else { } else {
@ -2396,7 +2399,7 @@ static void builtin_diffstat(const char *name_a, const char *name_b,
data->added = count_lines(two->data, two->size); data->added = count_lines(two->data, two->size);
} }


else { else if (!same_contents) {
/* Crazy xdl interfaces.. */ /* Crazy xdl interfaces.. */
xpparam_t xpp; xpparam_t xpp;
xdemitconf_t xecfg; xdemitconf_t xecfg;