git/list[1] front-page[2] threads[3] people[4] search[5] about
 

[PATCH] Mode only changes from diff.

From
Junio C Hamano <junkio@cox.net>
Date
May 25, 2005, 23:00 UTC
Message-ID
<7v1x7uj4i3.fsf_-_@assigned-by-dhcp.cox.net>
In-Reply-To
<Pine.LNX.4.58.0505251544250.2307@ppc970.osdl.org>
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>
---

diff-helper.c | 2 ++ diff.c | 6 ++++-- t/t4006-diff-mode.sh | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 40 insertions(+), 2 deletions(-) new file (100755): t/t4006-diff-mode.sh

diff --git a/diff-helper.c b/diff-helper.c
--- a/diff-helper.c
+++ b/diff-helper.c
@@ -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);
diff --git a/diff.c b/diff.c
--- a/diff.c
+++ b/diff.c
@@ -517,7 +517,8 @@ static void diff_flush_raw(struct diff_f
 	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(voi
 			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
new file mode 100755
--- /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
+
------------------------------------------------
Previous: Linus TorvaldsNext: Junio C Hamano
Message 10 of 20 in “change of git-diff-tree and symlinks”
  1. Kay SieversMay 25, 2005
  2. Linus TorvaldsMay 25, 2005
  3. Kay SieversMay 25, 2005
  4. Junio C HamanoMay 25, 2005
  5. Adjust show-files test for dotfiles.Junio C Hamano, May 25, 2005
  6. Fix type-change handling when assigning the status code to filepairs.Junio C Hamano, May 25, 2005
  7. Kay SieversMay 25, 2005
  8. Junio C HamanoMay 25, 2005
  9. Linus TorvaldsMay 25, 2005
  10. Mode only changes from diff.Junio C Hamano, May 25, 2005
  11. Test case portability fix.Junio C Hamano, May 26, 2005
  12. Linus TorvaldsMay 26, 2005
  13. Junio C HamanoMay 26, 2005
  14. Jochen RoemlingMay 29, 2005
  15. Kay SieversMay 29, 2005
  16. Jochen RoemlingMay 29, 2005
  17. Sebastian KuzminskyMay 29, 2005
  18. Sebastian KuzminskyMay 30, 2005
  19. Junio C HamanoMay 29, 2005
  20. Petr BaudisMay 29, 2005

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.