summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 96716a1)
raw | patch | inline | side by side (parent: 96716a1)
author | Junio C Hamano <junkio@cox.net> | |
Wed, 25 May 2005 23:00:04 +0000 (16:00 -0700) | ||
committer | Linus Torvalds <torvalds@ppc970.osdl.org> | |
Wed, 25 May 2005 23:06:24 +0000 (16:06 -0700) |
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>
- 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>
diff-helper.c | patch | blob | history | |
diff.c | patch | blob | history | |
t/t4006-diff-mode.sh | [new file with mode: 0644] | patch | blob |
diff --git a/diff-helper.c b/diff-helper.c
index 4da2614fc699ddb6d6a963c1181ac5b372272a1f..2dd6bdac33a470d3ff4f6fe63149ba33f167a4a3 100644 (file)
--- a/diff-helper.c
+++ b/diff-helper.c
#include "cache.h"
#include "strbuf.h"
#include "diff.h"
+#include "diffcore.h" /* just for MAX_SCORE */
static const char *pickaxe = NULL;
static int line_termination = '\n';
if (status == 'R' || status == 'C') {
two_paths = 1;
sscanf(cp, "%d", &score);
+ score = score * MAX_SCORE / 100;
if (line_termination) {
cp = strchr(cp,
inter_name_termination);
index 8e3f49541115fda30fce630c781fe9f2fb54e484..dd4b4fffe28bca38660de895e91159575b59c9be 100644 (file)
--- a/diff.c
+++ b/diff.c
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;
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 */
diff --git a/t/t4006-diff-mode.sh b/t/t4006-diff-mode.sh
--- /dev/null
+++ b/t/t4006-diff-mode.sh
@@ -0,0 +1,34 @@
+#!/bin/sh
+#
+# Copyright (c) 2005 Junio C Hamano
+#
+
+test_description='Test mode change diffs.
+
+'
+. ./test-lib.sh
+
+test_expect_success \
+ 'setup' \
+ 'echo frotz >rezrov &&
+ git-update-cache --add rezrov &&
+ tree=`git-write-tree` &&
+ echo $tree'
+
+test_expect_success \
+ 'chmod' \
+ 'chmod +x rezrov &&
+ git-update-cache rezrov &&
+ git-diff-cache $tree >current'
+
+_x40='[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]'
+_x40="$_x40$_x40$_x40$_x40$_x40$_x40$_x40$_x40"
+sed -e 's/\(:100644 100755\) \('"$_x40"'\) \2 /\1 X X /' <current >check
+echo ":100644 100755 X X M rezrov" >expected
+
+test_expect_success \
+ 'verify' \
+ 'diff -u expected check'
+
+test_done
+