Skip to content

Commit

Permalink
diff --stat: show complete rewrites consistently.
Browse files Browse the repository at this point in the history
The patch format shows complete rewrite as deletion of all old lines
followed by addition of all new lines.  Count lines consistenly with
that when doing diffstat.

Signed-off-by: Junio C Hamano <junkio@cox.net>
  • Loading branch information
Junio C Hamano committed Apr 26, 2006
1 parent e9b5b75 commit 710158e
Showing 1 changed file with 14 additions and 4 deletions.
18 changes: 14 additions & 4 deletions diff.c
Original file line number Diff line number Diff line change
Expand Up @@ -485,7 +485,8 @@ static void builtin_diff(const char *name_a,
static void builtin_diffstat(const char *name_a, const char *name_b,
struct diff_filespec *one,
struct diff_filespec *two,
struct diffstat_t *diffstat)
struct diffstat_t *diffstat,
int complete_rewrite)
{
mmfile_t mf1, mf2;
struct diffstat_file *data;
Expand All @@ -496,7 +497,13 @@ static void builtin_diffstat(const char *name_a, const char *name_b,
data->is_unmerged = 1;
return;
}

if (complete_rewrite) {
diff_populate_filespec(one, 0);
diff_populate_filespec(two, 0);
data->deleted = count_lines(one->data, one->size);
data->added = count_lines(two->data, two->size);
return;
}
if (fill_mmfile(&mf1, one) < 0 || fill_mmfile(&mf2, two) < 0)
die("unable to read files to diff");

Expand Down Expand Up @@ -1055,10 +1062,11 @@ static void run_diffstat(struct diff_filepair *p, struct diff_options *o,
{
const char *name;
const char *other;
int complete_rewrite = 0;

if (DIFF_PAIR_UNMERGED(p)) {
/* unmerged */
builtin_diffstat(p->one->path, NULL, NULL, NULL, diffstat);
builtin_diffstat(p->one->path, NULL, NULL, NULL, diffstat, 0);
return;
}

Expand All @@ -1068,7 +1076,9 @@ static void run_diffstat(struct diff_filepair *p, struct diff_options *o,
diff_fill_sha1_info(p->one);
diff_fill_sha1_info(p->two);

builtin_diffstat(name, other, p->one, p->two, diffstat);
if (p->status == DIFF_STATUS_MODIFIED && p->score)
complete_rewrite = 1;
builtin_diffstat(name, other, p->one, p->two, diffstat, complete_rewrite);
}

void diff_setup(struct diff_options *options)
Expand Down

0 comments on commit 710158e

Please sign in to comment.