[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>
This commit is contained in:
parent
96716a1976
commit
9fdade0673
@ -4,6 +4,7 @@
|
||||
#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';
|
||||
@ -77,6 +78,7 @@ int main(int ac, const char **av) {
|
||||
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);
|
||||
|
6
diff.c
6
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 */
|
||||
|
34
t/t4006-diff-mode.sh
Normal file
34
t/t4006-diff-mode.sh
Normal file
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user