Browse Source

Merge "blame: Fix merges, where merge result differs only by whitespace"

tags/v3.4.0.201405051725-m7
Shawn Pearce 10 years ago
parent
commit
561121e111

+ 31
- 0
org.eclipse.jgit.test/tst/org/eclipse/jgit/api/BlameCommandTest.java View File

@@ -47,8 +47,10 @@ import static org.junit.Assert.assertNotNull;

import java.io.File;

import org.eclipse.jgit.api.MergeCommand.FastForwardMode;
import org.eclipse.jgit.api.ResetCommand.ResetType;
import org.eclipse.jgit.blame.BlameResult;
import org.eclipse.jgit.diff.RawTextComparator;
import org.eclipse.jgit.junit.RepositoryTestCase;
import org.eclipse.jgit.lib.ConfigConstants;
import org.eclipse.jgit.lib.CoreConfig.AutoCRLF;
@@ -456,4 +458,33 @@ public class BlameCommandTest extends RepositoryTestCase {
assertEquals(merge, lines.getSourceCommit(3));
assertEquals(base, lines.getSourceCommit(4));
}

@Test
public void testWhitespaceMerge() throws Exception {
Git git = new Git(db);
RevCommit base = commitFile("file.txt", join("0", "1", "2"), "master");
RevCommit side = commitFile("file.txt", join("0", "1", " 2 side "),
"side");

checkoutBranch("refs/heads/master");
git.merge().setFastForward(FastForwardMode.NO_FF).include(side).call();

// change whitespace, so the merge content is not identical to side, but
// is the same when ignoring whitespace
writeTrashFile("file.txt", join("0", "1", "2 side"));
RevCommit merge = git.commit().setAll(true).setMessage("merge")
.setAmend(true)
.call();

BlameCommand command = new BlameCommand(db);
command.setFilePath("file.txt")
.setTextComparator(RawTextComparator.WS_IGNORE_ALL)
.setStartCommit(merge.getId());
BlameResult lines = command.call();

assertEquals(3, lines.getResultContents().size());
assertEquals(base, lines.getSourceCommit(0));
assertEquals(base, lines.getSourceCommit(1));
assertEquals(side, lines.getSourceCommit(2));
}
}

+ 3
- 2
org.eclipse.jgit/src/org/eclipse/jgit/blame/BlameGenerator.java View File

@@ -768,8 +768,9 @@ public class BlameGenerator {
}

p.regionList = n.regionList;
push(p);
return false;
n.regionList = null;
parents[pIdx] = p;
break;
}

p.takeBlame(editList, n);

Loading…
Cancel
Save