projects
/
git.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
diff-files --stat: do not dump core with unmerged index.
[git.git]
/
diff.c
diff --git
a/diff.c
b/diff.c
index
c120239
..
46e8529
100644
(file)
--- a/
diff.c
+++ b/
diff.c
@@
-202,6
+202,8
@@
struct diffstat_t {
int alloc;
struct diffstat_file {
char *name;
int alloc;
struct diffstat_file {
char *name;
+ unsigned is_unmerged:1;
+ unsigned is_binary:1;
unsigned int added, deleted;
} **files;
};
unsigned int added, deleted;
} **files;
};
@@
-245,11
+247,11
@@
static void show_stats(struct diffstat_t* data)
if (data->nr == 0)
return;
if (data->nr == 0)
return;
- printf("---\n");
-
for (i = 0; i < data->nr; i++) {
struct diffstat_file *file = data->files[i];
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);
if (max_change < file->added + file->deleted)
max_change = file->added + file->deleted;
len = strlen(file->name);
@@
-294,11
+296,15
@@
static void show_stats(struct diffstat_t* data)
if (max + len > 70)
max = 70 - len;
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;
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;
}
total_files--;
goto free_diffstat_file;
}
@@
-426,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)
die("unable to read files to diff");
if (mmfile_is_binary(&mf1) || mmfile_is_binary(&mf2))
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;
else {
/* Crazy xdl interfaces.. */
xpparam_t xpp;
@@
-438,8
+449,8
@@
static void builtin_diffstat(const char *name_a, const char *name_b,
xdemitcb_t ecb;
xpp.flags = XDF_NEED_MINIMAL;
xdemitcb_t ecb;
xpp.flags = XDF_NEED_MINIMAL;
- xecfg.ctxlen =
3
;
- xecfg.flags =
XDL_EMIT_FUNCNAMES
;
+ xecfg.ctxlen =
0
;
+ xecfg.flags =
0
;
ecb.outf = xdiff_outf;
ecb.priv = diffstat;
xdl_diff(&mf1, &mf2, &xpp, &xecfg, &ecb);
ecb.outf = xdiff_outf;
ecb.priv = diffstat;
xdl_diff(&mf1, &mf2, &xpp, &xecfg, &ecb);