Git development
 help / color / mirror / Atom feed
From: Junio C Hamano <junkio@cox.net>
To: Petr Baudis <pasky@ucw.cz>
Cc: git@vger.kernel.org
Subject: [PATCH] diffcore-rename: fix merging back a broken pair.
Date: Sat, 08 Apr 2006 20:30:56 -0700	[thread overview]
Message-ID: <7vr747ctn3.fsf_-_@assigned-by-dhcp.cox.net> (raw)
In-Reply-To: <7vwtdzcvhb.fsf@assigned-by-dhcp.cox.net> (Junio C. Hamano's message of "Sat, 08 Apr 2006 19:51:12 -0700")

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

      reply	other threads:[~2006-04-09  3:31 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-04-09  0:46 git-diff-tree -B broken Petr Baudis
2006-04-09  2:51 ` Junio C Hamano
2006-04-09  3:30   ` Junio C Hamano [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7vr747ctn3.fsf_-_@assigned-by-dhcp.cox.net \
    --to=junkio@cox.net \
    --cc=git@vger.kernel.org \
    --cc=pasky@ucw.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox