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

[PATCH] diffcore-rename: fix merging back a broken pair.

From
Junio C Hamano <junkio@cox.net>
Date
Apr 9, 2006, 03:30 UTC
Message-ID
<7vr747ctn3.fsf_-_@assigned-by-dhcp.cox.net>
In-Reply-To
<7vwtdzcvhb.fsf@assigned-by-dhcp.cox.net>

When a broken pair is matched up by rename detector to be merged back, we do not want to say it is "dissimilar" with the similarity index. The output should just say they were changed, taking the break score left by the earlier diffcore-break run if any.

Signed-off-by: Junio C Hamano <junkio@cox.net>
---
 diffcore-rename.c |   14 ++++++++++----
 1 files changed, 10 insertions(+), 4 deletions(-)
c17de73d793ff20fce6bcc8427e5f10ab8a2a7c5
diff --git a/diffcore-rename.c b/diffcore-rename.c
index e992698..d57e865 100644
--- a/diffcore-rename.c
+++ b/diffcore-rename.c
@@ -54,12 +54,14 @@ static struct diff_rename_dst *locate_re
 /* Table of rename/copy src files */
 static struct diff_rename_src {
 	struct diff_filespec *one;
+	unsigned short score; /* to remember the break score */
 	unsigned src_path_left : 1;
 } *rename_src;
 static int rename_src_nr, rename_src_alloc;
 
 static struct diff_rename_src *register_rename_src(struct diff_filespec *one,
-						   int src_path_left)
+						   int src_path_left,
+						   unsigned short score)
 {
 	int first, last;
 
@@ -89,6 +91,7 @@ static struct diff_rename_src *register_
 		memmove(rename_src + first + 1, rename_src + first,
 			(rename_src_nr - first - 1) * sizeof(*rename_src));
 	rename_src[first].one = one;
+	rename_src[first].score = score;
 	rename_src[first].src_path_left = src_path_left;
 	return &(rename_src[first]);
 }
@@ -198,7 +201,10 @@ static void record_rename_pair(int dst_i
 	fill_filespec(two, dst->sha1, dst->mode);
 
 	dp = diff_queue(NULL, one, two);
-	dp->score = score;
+	if (!strcmp(src->path, dst->path))
+		dp->score = rename_src[src_index].score;
+	else
+		dp->score = score;
 	dp->source_stays = rename_src[src_index].src_path_left;
 	rename_dst[dst_index].pair = dp;
 }
@@ -256,10 +262,10 @@ void diffcore_rename(struct diff_options
 			 * that means the source actually stays.
 			 */
 			int stays = (p->broken_pair && !p->score);
-			register_rename_src(p->one, stays);
+			register_rename_src(p->one, stays, p->score);
 		}
 		else if (detect_rename == DIFF_DETECT_COPY)
-			register_rename_src(p->one, 1);
+			register_rename_src(p->one, 1, p->score);
 	}
 	if (rename_dst_nr == 0 || rename_src_nr == 0 ||
 	    (0 < rename_limit && rename_limit < rename_dst_nr))
-- 
1.2.6.gad0b
Previous: Junio C Hamano
Message 3 of 3 in “git-diff-tree -B broken”
  1. Petr BaudisApr 9, 2006
  2. Junio C HamanoApr 9, 2006
  3. diffcore-rename: fix merging back a broken pair.Junio C Hamano, Apr 9, 2006

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.