summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test/tst/org
diff options
context:
space:
mode:
authorAdithya Chakilam <achakila@codeaurora.org>2021-01-29 19:35:04 -0600
committerMatthias Sohn <matthias.sohn@sap.com>2021-02-07 06:09:48 -0500
commitc7685003d8fb11e39234866fd43b82b7ba883a2f (patch)
treec70c61b3eb86661cddc4220099a86ddde834315f /org.eclipse.jgit.test/tst/org
parent3259a960217f1dd44c46007a545f473bd575f951 (diff)
downloadjgit-c7685003d8fb11e39234866fd43b82b7ba883a2f.tar.gz
jgit-c7685003d8fb11e39234866fd43b82b7ba883a2f.zip
Fix DateRevQueue tie breaks with more than 2 elements
DateRevQueue is expected to give out the commits that have higher commit time. But in case of tie(same commit time), it should give the commit that is inserted first. This is inferred from the testInsertTie test case written for DateRevQueue. Also that test case, right now uses just two commits which caused it not to fail with the current implementation, so added another commit to make the test more robust. By fixing the DateRevQueue, we would also match the behaviour of LogCommand.addRange(c1,c2) with git log c1..c2. A test case for the same is added to show that current behaviour is not the expected one. By fixing addRange(), the order in which commits are applied during a rebase is altered. Rebase logic should have never depended upon LogCommand.addRange() since the intended order of addRange() is not the order a rebase should use. So, modify the RebaseCommand to use RevWalk directly with TopoNonIntermixSortGenerator. Add a new LogCommandTest.addRangeWithMerge() test case which creates commits in the following order: A - B - C - M \ / -D- Using git 2.30.0, git log B..M outputs: M C D LogCommand.addRange(B, M) without this fix outputs: M D C LogCommand.addRange(B, M) with this fix outputs: M C D Change-Id: I30cc3ba6c97f0960f64e9e021df96ff276f63db7 Signed-off-by: Adithya Chakilam <achakila@codeaurora.org>
Diffstat (limited to 'org.eclipse.jgit.test/tst/org')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/api/LogCommandTest.java47
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/DateRevQueueTest.java6
2 files changed, 53 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/LogCommandTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/LogCommandTest.java
index 6460c7988a..c563d5a47f 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/LogCommandTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/api/LogCommandTest.java
@@ -232,6 +232,53 @@ public class LogCommandTest extends RepositoryTestCase {
assertFalse(i.hasNext());
}
+ /**
+ * <pre>
+ * A - B - C - M
+ * \ /
+ * -D(side)
+ * </pre>
+ */
+ @Test
+ public void addRangeWithMerge() throws Exception{
+ String fileA = "fileA";
+ String fileB = "fileB";
+ Git git = Git.wrap(db);
+
+ writeTrashFile(fileA, fileA);
+ git.add().addFilepattern(fileA).call();
+ git.commit().setMessage("commit a").call();
+
+ writeTrashFile(fileA, fileA);
+ git.add().addFilepattern(fileA).call();
+ RevCommit b = git.commit().setMessage("commit b").call();
+
+ writeTrashFile(fileA, fileA);
+ git.add().addFilepattern(fileA).call();
+ RevCommit c = git.commit().setMessage("commit c").call();
+
+ createBranch(b, "refs/heads/side");
+ checkoutBranch("refs/heads/side");
+
+ writeTrashFile(fileB, fileB);
+ git.add().addFilepattern(fileB).call();
+ RevCommit d = git.commit().setMessage("commit d").call();
+
+ checkoutBranch("refs/heads/master");
+ MergeResult m = git.merge().include(d.getId()).call();
+ assertEquals(MergeResult.MergeStatus.MERGED, m.getMergeStatus());
+
+ Iterator<RevCommit> rangeLog = git.log().addRange(b.getId(), m.getNewHead()).call().iterator();
+
+ RevCommit commit = rangeLog.next();
+ assertEquals(m.getNewHead(), commit.getId());
+ commit = rangeLog.next();
+ assertEquals(c.getId(), commit.getId());
+ commit = rangeLog.next();
+ assertEquals(d.getId(), commit.getId());
+ assertFalse(rangeLog.hasNext());
+ }
+
private void setCommitsAndMerge() throws Exception {
Git git = Git.wrap(db);
writeTrashFile("file1", "1\n2\n3\n4\n");
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/DateRevQueueTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/DateRevQueueTest.java
index a9dfe15c97..852d18c351 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/DateRevQueueTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revwalk/DateRevQueueTest.java
@@ -59,20 +59,26 @@ public class DateRevQueueTest extends RevQueueTestCase<DateRevQueue> {
public void testInsertTie() throws Exception {
final RevCommit a = parseBody(commit());
final RevCommit b = parseBody(commit(0, a));
+ final RevCommit c = parseBody(commit(0, b));
+
{
q = create();
q.add(a);
q.add(b);
+ q.add(c);
assertCommit(a, q.next());
assertCommit(b, q.next());
+ assertCommit(c, q.next());
assertNull(q.next());
}
{
q = create();
+ q.add(c);
q.add(b);
q.add(a);
+ assertCommit(c, q.next());
assertCommit(b, q.next());
assertCommit(a, q.next());
assertNull(q.next());