From 6de953137ce26e380f88b77876394d3c6fbdd766 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 18 Sep 2013 13:00:39 -0400
Subject: [PATCH] Improve non-visible parent lane rendering for BranchGraphServlet

---
 src/main/java/com/gitblit/BranchGraphServlet.java |   32 +++++++++++++++++++++++++++-----
 1 files changed, 27 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/gitblit/BranchGraphServlet.java b/src/main/java/com/gitblit/BranchGraphServlet.java
index 95be613..f46b8e6 100644
--- a/src/main/java/com/gitblit/BranchGraphServlet.java
+++ b/src/main/java/com/gitblit/BranchGraphServlet.java
@@ -32,6 +32,8 @@
 import java.util.ArrayList;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
 
 import javax.imageio.ImageIO;
 import javax.servlet.ServletException;
@@ -153,11 +155,31 @@
 
 			// determine the appropriate width for the image
 			int numLanes = 0;
-			int numCommits = Math.min(requestedCommits, commitList.size());			
-			for (int i = 0; i < numCommits; i++) {
+			int numCommits = Math.min(requestedCommits, commitList.size());
+			Set<String> parents = new TreeSet<String>();
+			for (int i = 0; i < commitList.size(); i++) {
 				PlotCommit<Lane> commit = commitList.get(i);
-				int pos = commit.getLane().getPosition();
-				numLanes = Math.max(numLanes, pos + 1);
+				boolean checkLane = false;
+				
+				if (i < numCommits) {
+					// commit in visible list
+					checkLane = true;
+					
+					// remember parents
+					for (RevCommit p : commit.getParents()) {
+						parents.add(p.getName());
+					}
+				} else if (parents.contains(commit.getName())) {
+					// commit outside visible list, but it is a parent of a
+					// commit in the visible list so we need to know it's lane
+					// assignment
+					checkLane = true;
+				}
+				
+				if (checkLane) {
+					int pos = commit.getLane().getPosition();
+					numLanes = Math.max(numLanes, pos + 1);
+				}
 			}
 
 			int graphWidth = numLanes * LANE_WIDTH + RIGHT_PAD;
@@ -170,7 +192,7 @@
 				g = image.createGraphics();
 				g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
 				LanesRenderer renderer = new LanesRenderer();
-				for (int i = 0; i < numCommits; i++) {
+				for (int i = 0; i < commitList.size(); i++) {
 					PlotCommit<Lane> commit = commitList.get(i);
 					Graphics row = g.create(0, i*rowHeight, graphWidth, rowHeight);
 					try {

--
Gitblit v1.9.1