Browse Source

Merge branch 'rename-bug'

* rename-bug:
  Fix ArrayIndexOutOfBounds on non-square exact rename matrix

Conflicts:
	org.eclipse.jgit/src/org/eclipse/jgit/diff/RenameDetector.java

Change-Id: Ie0b8dd3e1ec174f79ba39dc4706bb0694cc8be29
tags/v0.9.1
Shawn O. Pearce 14 years ago
parent
commit
09130b8731

+ 4
- 1
org.eclipse.jgit.test/tst/org/eclipse/jgit/diff/RenameDetectorTest.java View File

@@ -173,17 +173,20 @@ public class RenameDetectorTest extends RepositoryTestCase {

DiffEntry c = DiffEntry.add("c.txt", foo);
DiffEntry d = DiffEntry.delete("d.txt", foo);
DiffEntry e = DiffEntry.add("the_e_file.txt", foo);

// Add out of order to avoid first-match succeeding
rd.add(a);
rd.add(d);
rd.add(e);
rd.add(b);
rd.add(c);

List<DiffEntry> entries = rd.compute();
assertEquals(2, entries.size());
assertEquals(3, entries.size());
assertRename(d, c, 100, entries.get(0));
assertRename(b, a, 100, entries.get(1));
assertCopy(d, e, 100, entries.get(2));
}

public void testExactRename_OneDeleteManyAdds() throws Exception {

+ 5
- 5
org.eclipse.jgit/src/org/eclipse/jgit/diff/RenameDetector.java View File

@@ -508,14 +508,14 @@ public class RenameDetector {
List<DiffEntry> dels = (List<DiffEntry>) o;
long[] matrix = new long[dels.size() * adds.size()];
int mNext = 0;
for (int addIdx = 0; addIdx < adds.size(); addIdx++) {
String addedName = adds.get(addIdx).newPath;
for (int delIdx = 0; delIdx < dels.size(); delIdx++) {
String deletedName = dels.get(delIdx).oldPath;

for (int delIdx = 0; delIdx < dels.size(); delIdx++) {
String deletedName = dels.get(delIdx).oldPath;
for (int addIdx = 0; addIdx < adds.size(); addIdx++) {
String addedName = adds.get(addIdx).newPath;

int score = SimilarityRenameDetector.nameScore(addedName, deletedName);
matrix[mNext] = SimilarityRenameDetector.encode(score, addIdx, delIdx);
matrix[mNext] = SimilarityRenameDetector.encode(score, delIdx, addIdx);
mNext++;
}
}

Loading…
Cancel
Save