diff options
-rw-r--r-- | diff.c | 21 |
1 files changed, 17 insertions, 4 deletions
@@ -202,6 +202,8 @@ struct diffstat_t { int alloc; struct diffstat_file { char *name; + unsigned is_unmerged:1; + unsigned is_binary:1; unsigned int added, deleted; } **files; }; @@ -248,6 +250,8 @@ static void show_stats(struct diffstat_t* data) for (i = 0; i < data->nr; i++) { struct diffstat_file *file = data->files[i]; + if (file->is_binary || file->is_unmerged) + continue; if (max_change < file->added + file->deleted) max_change = file->added + file->deleted; len = strlen(file->name); @@ -292,11 +296,15 @@ static void show_stats(struct diffstat_t* data) if (max + len > 70) max = 70 - len; - if (added < 0) { - /* binary file */ + if (data->files[i]->is_binary) { printf(" %s%-*s | Bin\n", prefix, len, name); goto free_diffstat_file; - } else if (added + deleted == 0) { + } + else if (data->files[i]->is_unmerged) { + printf(" %s%-*s | Unmerged\n", prefix, len, name); + goto free_diffstat_file; + } + else if (added + deleted == 0) { total_files--; goto free_diffstat_file; } @@ -424,11 +432,16 @@ static void builtin_diffstat(const char *name_a, const char *name_b, data = diffstat_add(diffstat, name_a ? name_a : name_b); + if (!one || !two) { + data->is_unmerged = 1; + return; + } + if (fill_mmfile(&mf1, one) < 0 || fill_mmfile(&mf2, two) < 0) die("unable to read files to diff"); if (mmfile_is_binary(&mf1) || mmfile_is_binary(&mf2)) - data->added = -1; + data->is_binary = 1; else { /* Crazy xdl interfaces.. */ xpparam_t xpp; |