Code

diff --dirstat: saner handling of binary and unmerged files
authorJunio C Hamano <gitster@pobox.com>
Mon, 25 Feb 2008 01:37:15 +0000 (17:37 -0800)
committerJunio C Hamano <gitster@pobox.com>
Mon, 25 Feb 2008 01:39:10 +0000 (17:39 -0800)
We do not account binary nor unmerged files when --shortstat is
asked for (or the summary stat at the end of --stat).

The new option --dirstat should work the same way as it is about
summarizing the changes of multiple files by adding them up.

Signed-off-by: Junio C Hamano <gitster@pobox.com>
diff.c

diff --git a/diff.c b/diff.c
index dd374d436f0220acb1a42384c047480279e25dde..bcc323f19fd5878776fecde7074e230c61667de6 100644 (file)
--- a/diff.c
+++ b/diff.c
@@ -1016,7 +1016,10 @@ static long gather_dirstat(struct diffstat_dir *dir, unsigned long changed, cons
                        this = gather_dirstat(dir, changed, f->name, newbaselen);
                        sources++;
                } else {
-                       this = f->added + f->deleted;
+                       if (f->is_unmerged || f->is_binary)
+                               this = 0;
+                       else
+                               this = f->added + f->deleted;
                        dir->files++;
                        dir->nr--;
                        sources += 2;
@@ -1053,6 +1056,8 @@ static void show_dirstat(struct diffstat_t *data, struct diff_options *options)
        /* Calculate total changes */
        changed = 0;
        for (i = 0; i < data->nr; i++) {
+               if (data->files[i]->is_binary || data->files[i]->is_unmerged)
+                       continue;
                changed += data->files[i]->added;
                changed += data->files[i]->deleted;
        }