diff options
author | Robin Rosenberg <robin.rosenberg@dewire.com> | 2013-03-17 21:01:24 +0100 |
---|---|---|
committer | Matthias Sohn <matthias.sohn@sap.com> | 2013-09-26 14:06:39 +0200 |
commit | a065a06c2aefd0f5c5fc70d3410c3202f4d03268 (patch) | |
tree | 3839b148b4722a4d8cfd3b5c79be6f40258ddde4 | |
parent | b4f07df357fccdff891df2a4fa5c5bd9e83b4a4a (diff) | |
download | jgit-a065a06c2aefd0f5c5fc70d3410c3202f4d03268.tar.gz jgit-a065a06c2aefd0f5c5fc70d3410c3202f4d03268.zip |
Attempt to fix graph layout when new heads are introduced
Sometime the new commit is no allocated onto a new lane leading to
the commit being drawn on the wrong branch and something that looks
like a merge.
The drawback is that this also changes existing valid graphs.
Bug: 368927
Change-Id: Ic8a8247c8a53be802c1be83850ed766b902ca646
-rw-r--r-- | org.eclipse.jgit.test/tst/org/eclipse/jgit/revplot/PlotCommitListTest.java | 51 | ||||
-rw-r--r-- | org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommitList.java | 6 |
2 files changed, 46 insertions, 11 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revplot/PlotCommitListTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revplot/PlotCommitListTest.java index 5db6b86f81..926424c06d 100644 --- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/revplot/PlotCommitListTest.java +++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/revplot/PlotCommitListTest.java @@ -156,8 +156,8 @@ public class PlotCommitListTest extends RevWalkTestCase { CommitListAssert test = new CommitListAssert(pcl); test.commit(c).lanePos(0).parents(a); - test.commit(b).lanePos(1).parents(a); - test.commit(a).lanePos(0).parents(); + test.commit(b).lanePos(0).parents(a); + test.commit(a).lanePos(1).parents(); test.noMoreCommits(); } @@ -179,9 +179,9 @@ public class PlotCommitListTest extends RevWalkTestCase { CommitListAssert test = new CommitListAssert(pcl); test.commit(d).lanePos(0).parents(a); - test.commit(c).lanePos(1).parents(a); - test.commit(b).lanePos(1).parents(a); - test.commit(a).lanePos(0).parents(); + test.commit(c).lanePos(0).parents(a); + test.commit(b).lanePos(0).parents(a); + test.commit(a).lanePos(1).parents(); test.noMoreCommits(); } @@ -214,14 +214,45 @@ public class PlotCommitListTest extends RevWalkTestCase { CommitListAssert test = new CommitListAssert(pcl); test.commit(g).lanePos(0).parents(f); test.commit(f).lanePos(0).parents(a); - test.commit(e).lanePos(1).parents(a); - test.commit(d).lanePos(1).parents(a); - test.commit(c).lanePos(1).parents(a); - test.commit(b).lanePos(1).parents(a); - test.commit(a).lanePos(0).parents(); + test.commit(e).lanePos(0).parents(a); + test.commit(d).lanePos(0).parents(a); + test.commit(c).lanePos(0).parents(a); + test.commit(b).lanePos(0).parents(a); + test.commit(a).lanePos(1).parents(); test.noMoreCommits(); } + @Test + public void testBug368927() throws Exception { + final RevCommit a = commit(); + final RevCommit b = commit(a); + final RevCommit c = commit(b); + final RevCommit d = commit(b); + final RevCommit e = commit(c); + final RevCommit f = commit(e, d); + final RevCommit g = commit(a); + final RevCommit h = commit(f); + final RevCommit i = commit(h); + + PlotWalk pw = new PlotWalk(db); + pw.markStart(pw.lookupCommit(i.getId())); + pw.markStart(pw.lookupCommit(g.getId())); + + PlotCommitList<PlotLane> pcl = new PlotCommitList<PlotLane>(); + pcl.source(pw); + pcl.fillTo(Integer.MAX_VALUE); + CommitListAssert test = new CommitListAssert(pcl); + test.commit(i).lanePos(1).parents(h); + test.commit(h).lanePos(1).parents(f); + test.commit(g).lanePos(0).parents(a); + test.commit(f).lanePos(1).parents(e, d); + test.commit(e).lanePos(0).parents(c); + test.commit(d).lanePos(1).parents(b); + test.commit(c).lanePos(0).parents(b); + test.commit(b).lanePos(1).parents(a); + test.commit(a).lanePos(2).parents(); + } + // test the history of the egit project between 9fdaf3c1 and e76ad9170f @Test public void testEgitHistory() throws Exception { diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommitList.java b/org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommitList.java index 382d162439..943ec4ec3f 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommitList.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommitList.java @@ -119,8 +119,12 @@ public class PlotCommitList<L extends PlotLane> extends setupChildren(currCommit); final int nChildren = currCommit.getChildCount(); - if (nChildren == 0) + if (nChildren == 0) { + currCommit.lane = nextFreeLane(); + activeLanes.add(currCommit.lane); + closeLane(currCommit.lane); return; + } if (nChildren == 1 && currCommit.children[0].getParentCount() < 2) { // Only one child, child has only us as their parent. |