]> source.dussan.org Git - jgit.git/commitdiff
Fix History rendering 35/4735/1
authorChristian Halstrick <christian.halstrick@sap.com>
Fri, 2 Dec 2011 13:27:51 +0000 (14:27 +0100)
committerMatthias Sohn <matthias.sohn@sap.com>
Sun, 4 Dec 2011 17:16:08 +0000 (18:16 +0100)
There was the possibility that during history rendering we draw a lane
"trough" a passed commit. Vadim Dmitriev found that out in bug 335818.
I added the needed check to that block of code where it was missing.

Bug: 335818
Change-Id: Ic944193b2aca55ff3eb0235d46afa60b7896aa0f
Signed-off-by: Christian Halstrick <christian.halstrick@sap.com>
org.eclipse.jgit/src/org/eclipse/jgit/revplot/PlotCommitList.java

index 6ffa0336aade7ddc8717704c6fe6e8c71ce97bfe..e8263c5a9384c5a62c97d64f251bd0a375db17c4 100644 (file)
@@ -141,6 +141,7 @@ public class PlotCommitList<L extends PlotLane> extends
                        }
 
                        currCommit.lane = c.lane;
+                       handleBlockedLanes(index, currCommit, nChildren);
                } else {
                        // More than one child, or our child is a merge.
                        // Use a different lane.
@@ -189,39 +190,50 @@ public class PlotCommitList<L extends PlotLane> extends
                        currCommit.lane = nextFreeLane();
                        activeLanes.add(currCommit.lane);
 
-                       // take care: when connecting yourself to your child make sure that
-                       // you will not be located on a lane on which a passed commit is
-                       // located on. Otherwise we would have to draw a line through a
-                       // commit.
-                       int remaining = nChildren;
-                       BitSet blockedPositions = new BitSet();
-                       for (int r = index - 1; r >= 0; r--) {
-                               final PlotCommit rObj = get(r);
-                               if (currCommit.isChild(rObj)) {
-                                       if (--remaining == 0)
-                                               break;
-                               }
-                               if (rObj != null) {
-                                       PlotLane lane = rObj.getLane();
-                                       if (lane != null)
-                                               blockedPositions.set(lane.getPosition());
-                                       rObj.addPassingLane(currCommit.lane);
-                               }
+                       handleBlockedLanes(index, currCommit, nChildren);
+               }
+       }
+
+       /**
+        * when connecting a plotcommit to the child make sure that you will not be
+        * located on a lane on which a passed commit is located on. Otherwise we
+        * would have to draw a line through a commit.
+        *
+        * @param index
+        * @param commit
+        * @param nChildren
+        */
+       private void handleBlockedLanes(final int index,
+                       final PlotCommit<L> commit, final int nChildren) {
+               // take care:
+               int remaining = nChildren;
+               BitSet blockedPositions = new BitSet();
+               for (int r = index - 1; r >= 0; r--) {
+                       final PlotCommit rObj = get(r);
+                       if (commit.isChild(rObj)) {
+                               if (--remaining == 0)
+                                       break;
                        }
-                       // Now let's check whether we have to reposition the lane
-                       if (blockedPositions.get(currCommit.lane.getPosition())) {
-                               int newPos = -1;
-                               for (Integer pos : freePositions)
-                                       if (!blockedPositions.get(pos)) {
-                                               newPos = pos;
-                                               break;
-                                       }
-                               if (newPos == -1)
-                                       newPos = positionsAllocated++;
-                               freePositions.add(currCommit.lane.getPosition());
-                               currCommit.lane.position = newPos;
+                       if (rObj != null) {
+                               PlotLane lane = rObj.getLane();
+                               if (lane != null)
+                                       blockedPositions.set(lane.getPosition());
+                               rObj.addPassingLane(commit.lane);
                        }
                }
+               // Now let's check whether we have to reposition the lane
+               if (blockedPositions.get(commit.lane.getPosition())) {
+                       int newPos = -1;
+                       for (Integer pos : freePositions)
+                               if (!blockedPositions.get(pos)) {
+                                       newPos = pos;
+                                       break;
+                               }
+                       if (newPos == -1)
+                               newPos = positionsAllocated++;
+                       freePositions.add(commit.lane.getPosition());
+                       commit.lane.position = newPos;
+               }
        }
 
        private void closeLane(PlotLane lane) {