Andrew's git
/
gitweb.git
/ diff
summary
|
log
|
commit
| diff |
tree
commit
grep
author
committer
pickaxe
?
re
diff --stat: show complete rewrites consistently.
author
Junio C Hamano
<junkio@cox.net>
Wed, 26 Apr 2006 06:40:09 +0000
(23:40 -0700)
committer
Junio C Hamano
<junkio@cox.net>
Wed, 26 Apr 2006 06:40:09 +0000
(23:40 -0700)
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>
diff.c
patch
|
blob
|
history
raw
|
patch
|
inline
| side by side (parent:
e9b5b75
)
diff --git
a/diff.c
b/diff.c
index 13b216f2733763b4e6cc6a3c37ff2624d7f55266..6762fcee5af881b93b97da2dff190137768c1a8e 100644
(file)
--- a/
diff.c
+++ b/
diff.c
@@
-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,
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;
{
mmfile_t mf1, mf2;
struct diffstat_file *data;
@@
-496,7
+497,13
@@
static void builtin_diffstat(const char *name_a, const char *name_b,
data->is_unmerged = 1;
return;
}
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");
if (fill_mmfile(&mf1, one) < 0 || fill_mmfile(&mf2, two) < 0)
die("unable to read files to diff");
@@
-1055,10
+1062,11
@@
static void run_diffstat(struct diff_filepair *p, struct diff_options *o,
{
const char *name;
const char *other;
{
const char *name;
const char *other;
+ int complete_rewrite = 0;
if (DIFF_PAIR_UNMERGED(p)) {
/* unmerged */
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;
}
return;
}
@@
-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);
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)
}
void diff_setup(struct diff_options *options)