If we have two adds of the same object but no deletes the detector threw an NPE because the entry that came back from the deleted map was null (no matching objects). In this case we need to put the adds all back onto the list of left over additions since they did not match a delete. Change-Id: Ie68fbe7426b4dc0cb571a08911c7adbffff755d5 Signed-off-by: Shawn O. Pearce <spearce@spearce.org> CC: Jeffrey Schumacher" <jeffschu@google.com>tags/v0.9.1
assertRename(b, a, 100, entries.get(0)); | assertRename(b, a, 100, entries.get(0)); | ||||
} | } | ||||
public void testExactRename_DifferentObjects() throws Exception { | |||||
ObjectId foo = blob("foo"); | |||||
ObjectId bar = blob("bar"); | |||||
DiffEntry a = DiffEntry.add(PATH_A, foo); | |||||
DiffEntry h = DiffEntry.add(PATH_H, foo); | |||||
DiffEntry q = DiffEntry.delete(PATH_Q, bar); | |||||
rd.add(a); | |||||
rd.add(h); | |||||
rd.add(q); | |||||
List<DiffEntry> entries = rd.compute(); | |||||
assertEquals(3, entries.size()); | |||||
assertSame(a, entries.get(0)); | |||||
assertSame(h, entries.get(1)); | |||||
assertSame(q, entries.get(2)); | |||||
} | |||||
public void testExactRename_OneRenameOneModify() throws Exception { | public void testExactRename_OneRenameOneModify() throws Exception { | ||||
ObjectId foo = blob("foo"); | ObjectId foo = blob("foo"); | ||||
ObjectId bar = blob("bar"); | ObjectId bar = blob("bar"); |
} else { | } else { | ||||
left.addAll(adds); | left.addAll(adds); | ||||
} | } | ||||
} else { | |||||
} else if (o != null) { | |||||
// We have many adds to many deletes: score all the adds against | // We have many adds to many deletes: score all the adds against | ||||
// all the deletes by path name, take the best matches, pair | // all the deletes by path name, take the best matches, pair | ||||
// them as renames, then call the rest copies | // them as renames, then call the rest copies | ||||
adds.set(addIdx, null); // Claim the destination was matched. | adds.set(addIdx, null); // Claim the destination was matched. | ||||
pm.update(1); | pm.update(1); | ||||
} | } | ||||
} else { | |||||
left.addAll(adds); | |||||
} | } | ||||
} | } | ||||
added = left; | added = left; |