summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRobin Rosenberg <robin.rosenberg@dewire.com>2013-03-17 21:01:24 +0100
committerMatthias Sohn <matthias.sohn@sap.com>2013-09-26 14:06:39 +0200
commita065a06c2aefd0f5c5fc70d3410c3202f4d03268 (patch)
tree3839b148b4722a4d8cfd3b5c79be6f40258ddde4
parentb4f07df357fccdff891df2a4fa5c5bd9e83b4a4a (diff)
downloadjgit-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.java51
-rw-r--r--org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommitList.java6
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.