aboutsummaryrefslogtreecommitdiff
path: root/diff.c
diff options
context:
space:
mode:
authorJunio C Hamano <junkio@cox.net>2005-05-25 16:00:04 -0700
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-05-25 16:06:24 -0700
commit9fdade06739af0b3e27422a973ae4fd83e3c918e (patch)
tree9112544543b2a807d3ca2cce5f6e4e0d6e391f38 /diff.c
parent96716a197658e069557e7615ce2019107d72225e (diff)
downloadgit-9fdade06739af0b3e27422a973ae4fd83e3c918e.tar.gz
git-9fdade06739af0b3e27422a973ae4fd83e3c918e.tar.xz
[PATCH] Mode only changes from diff.
This fixes another bug. - Mode-only changes were pruned incorrectly from the output. - Added test to catch the above problem. - Normalize rename/copy similarity score in the diff-raw output to per-cent, no matter what scale we internally use. Signed-off-by: Junio C Hamano <junkio@cox.net> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'diff.c')
-rw-r--r--diff.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/diff.c b/diff.c
index 8e3f49541..dd4b4fffe 100644
--- a/diff.c
+++ b/diff.c
@@ -517,7 +517,8 @@ static void diff_flush_raw(struct diff_filepair *p,
switch (p->status) {
case 'C': case 'R':
two_paths = 1;
- sprintf(status, "%c%1d", p->status, p->score);
+ sprintf(status, "%c%03d", p->status,
+ (int)(0.5 + p->score * 100.0/MAX_SCORE));
break;
default:
two_paths = 0;
@@ -750,7 +751,8 @@ static void diff_resolve_rename_copy(void)
if (!p->status)
p->status = 'R';
}
- else if (memcmp(p->one->sha1, p->two->sha1, 20))
+ else if (memcmp(p->one->sha1, p->two->sha1, 20) ||
+ p->one->mode != p->two->mode)
p->status = 'M';
else
/* this is a "no-change" entry */