diff-files --stat: do not dump core with unmerged index.
Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
1cd95087c3
commit
cbdda02404
21
diff.c
21
diff.c
@ -202,6 +202,8 @@ struct diffstat_t {
|
|||||||
int alloc;
|
int alloc;
|
||||||
struct diffstat_file {
|
struct diffstat_file {
|
||||||
char *name;
|
char *name;
|
||||||
|
unsigned is_unmerged:1;
|
||||||
|
unsigned is_binary:1;
|
||||||
unsigned int added, deleted;
|
unsigned int added, deleted;
|
||||||
} **files;
|
} **files;
|
||||||
};
|
};
|
||||||
@ -248,6 +250,8 @@ static void show_stats(struct diffstat_t* data)
|
|||||||
for (i = 0; i < data->nr; i++) {
|
for (i = 0; i < data->nr; i++) {
|
||||||
struct diffstat_file *file = data->files[i];
|
struct diffstat_file *file = data->files[i];
|
||||||
|
|
||||||
|
if (file->is_binary || file->is_unmerged)
|
||||||
|
continue;
|
||||||
if (max_change < file->added + file->deleted)
|
if (max_change < file->added + file->deleted)
|
||||||
max_change = file->added + file->deleted;
|
max_change = file->added + file->deleted;
|
||||||
len = strlen(file->name);
|
len = strlen(file->name);
|
||||||
@ -292,11 +296,15 @@ static void show_stats(struct diffstat_t* data)
|
|||||||
if (max + len > 70)
|
if (max + len > 70)
|
||||||
max = 70 - len;
|
max = 70 - len;
|
||||||
|
|
||||||
if (added < 0) {
|
if (data->files[i]->is_binary) {
|
||||||
/* binary file */
|
|
||||||
printf(" %s%-*s | Bin\n", prefix, len, name);
|
printf(" %s%-*s | Bin\n", prefix, len, name);
|
||||||
goto free_diffstat_file;
|
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--;
|
total_files--;
|
||||||
goto free_diffstat_file;
|
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);
|
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)
|
if (fill_mmfile(&mf1, one) < 0 || fill_mmfile(&mf2, two) < 0)
|
||||||
die("unable to read files to diff");
|
die("unable to read files to diff");
|
||||||
|
|
||||||
if (mmfile_is_binary(&mf1) || mmfile_is_binary(&mf2))
|
if (mmfile_is_binary(&mf1) || mmfile_is_binary(&mf2))
|
||||||
data->added = -1;
|
data->is_binary = 1;
|
||||||
else {
|
else {
|
||||||
/* Crazy xdl interfaces.. */
|
/* Crazy xdl interfaces.. */
|
||||||
xpparam_t xpp;
|
xpparam_t xpp;
|
||||||
|
Loading…
Reference in New Issue
Block a user