Merge branch 'tg/range-diff-same-file-fix'
"git range-diff" showed incorrect diffstat, which has been corrected. * tg/range-diff-same-file-fix: diff: fix modified lines stats with --stat and --numstat
This commit is contained in:
commit
ac4089da7b
12
diff.c
12
diff.c
@ -3663,7 +3663,7 @@ static void builtin_diffstat(const char *name_a, const char *name_b,
|
|||||||
{
|
{
|
||||||
mmfile_t mf1, mf2;
|
mmfile_t mf1, mf2;
|
||||||
struct diffstat_file *data;
|
struct diffstat_file *data;
|
||||||
int same_contents;
|
int may_differ;
|
||||||
int complete_rewrite = 0;
|
int complete_rewrite = 0;
|
||||||
|
|
||||||
if (!DIFF_PAIR_UNMERGED(p)) {
|
if (!DIFF_PAIR_UNMERGED(p)) {
|
||||||
@ -3681,12 +3681,14 @@ static void builtin_diffstat(const char *name_a, const char *name_b,
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
same_contents = oideq(&one->oid, &two->oid);
|
/* saves some reads if true, not a guarantee of diff outcome */
|
||||||
|
may_differ = !(one->oid_valid && two->oid_valid &&
|
||||||
|
oideq(&one->oid, &two->oid));
|
||||||
|
|
||||||
if (diff_filespec_is_binary(o->repo, one) ||
|
if (diff_filespec_is_binary(o->repo, one) ||
|
||||||
diff_filespec_is_binary(o->repo, two)) {
|
diff_filespec_is_binary(o->repo, two)) {
|
||||||
data->is_binary = 1;
|
data->is_binary = 1;
|
||||||
if (same_contents) {
|
if (!may_differ) {
|
||||||
data->added = 0;
|
data->added = 0;
|
||||||
data->deleted = 0;
|
data->deleted = 0;
|
||||||
} else {
|
} else {
|
||||||
@ -3702,7 +3704,7 @@ static void builtin_diffstat(const char *name_a, const char *name_b,
|
|||||||
data->added = count_lines(two->data, two->size);
|
data->added = count_lines(two->data, two->size);
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (!same_contents) {
|
else if (may_differ) {
|
||||||
/* Crazy xdl interfaces.. */
|
/* Crazy xdl interfaces.. */
|
||||||
xpparam_t xpp;
|
xpparam_t xpp;
|
||||||
xdemitconf_t xecfg;
|
xdemitconf_t xecfg;
|
||||||
@ -3727,7 +3729,7 @@ static void builtin_diffstat(const char *name_a, const char *name_b,
|
|||||||
diffstat->files[diffstat->nr - 1];
|
diffstat->files[diffstat->nr - 1];
|
||||||
/*
|
/*
|
||||||
* Omit diffstats of modified files where nothing changed.
|
* Omit diffstats of modified files where nothing changed.
|
||||||
* Even if !same_contents, this might be the case due to
|
* Even if may_differ, this might be the case due to
|
||||||
* ignoring whitespace changes, etc.
|
* ignoring whitespace changes, etc.
|
||||||
*
|
*
|
||||||
* But note that we special-case additions, deletions,
|
* But note that we special-case additions, deletions,
|
||||||
|
@ -252,17 +252,13 @@ test_expect_success 'changed commit with --stat diff option' '
|
|||||||
git range-diff --no-color --stat topic...changed >actual &&
|
git range-diff --no-color --stat topic...changed >actual &&
|
||||||
cat >expect <<-EOF &&
|
cat >expect <<-EOF &&
|
||||||
1: $(test_oid t1) = 1: $(test_oid c1) s/5/A/
|
1: $(test_oid t1) = 1: $(test_oid c1) s/5/A/
|
||||||
a => b | 0
|
|
||||||
1 file changed, 0 insertions(+), 0 deletions(-)
|
|
||||||
2: $(test_oid t2) = 2: $(test_oid c2) s/4/A/
|
2: $(test_oid t2) = 2: $(test_oid c2) s/4/A/
|
||||||
a => b | 0
|
|
||||||
1 file changed, 0 insertions(+), 0 deletions(-)
|
|
||||||
3: $(test_oid t3) ! 3: $(test_oid c3) s/11/B/
|
3: $(test_oid t3) ! 3: $(test_oid c3) s/11/B/
|
||||||
a => b | 0
|
a => b | 2 +-
|
||||||
1 file changed, 0 insertions(+), 0 deletions(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
4: $(test_oid t4) ! 4: $(test_oid c4) s/12/B/
|
4: $(test_oid t4) ! 4: $(test_oid c4) s/12/B/
|
||||||
a => b | 0
|
a => b | 2 +-
|
||||||
1 file changed, 0 insertions(+), 0 deletions(-)
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
EOF
|
EOF
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
'
|
'
|
||||||
|
Loading…
Reference in New Issue
Block a user