Commit 7edb74d374f401cea50be143b63c7d2d141d18be

Russell Belfer 2013-08-04T14:06:13

Update rename src map for any split src When using a rename source that is actually a to-be-split record, we have to update the best-fit mapping data in both the case where the target is also a split record and the case where the target is a simple added record. Before this commit, we were only doing the update when the target was itself a split record (and even in that case, the test was slightly wrong).

diff --git a/src/diff_tform.c b/src/diff_tform.c
index 92c4036..ba35d3c 100644
--- a/src/diff_tform.c
+++ b/src/diff_tform.c
@@ -947,6 +947,11 @@ find_best_matches:
 				src->new_file.flags |= GIT_DIFF_FLAG_VALID_OID;
 
 				num_updates++;
+
+				if (src2tgt[t].similarity > 0 && src2tgt[t].idx > t) {
+					/* what used to be at src t is now at src s */
+					tgt2src[src2tgt[t].idx].idx = (uint32_t)s;
+				}
 			}
 		}
 
@@ -996,7 +1001,7 @@ find_best_matches:
 					num_rewrites--;
 				}
 				/* otherwise, if we just overwrote a source, update mapping */
-				else if (s > t && src2tgt[t].similarity > 0) {
+				else if (src2tgt[t].similarity > 0 && src2tgt[t].idx > t) {
 					/* what used to be at src t is now at src s */
 					tgt2src[src2tgt[t].idx].idx = (uint32_t)s;
 				}