From 22b181154c11cb250a2f7ad9eb7820a462cf3079 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 01 Oct 2012 22:29:42 -0400
Subject: [PATCH] Method to generate fork network graph

---
 src/com/gitblit/wicket/pages/ForksPage.java |   31 +++++++++++++++++++++----------
 1 files changed, 21 insertions(+), 10 deletions(-)

diff --git a/src/com/gitblit/wicket/pages/ForksPage.java b/src/com/gitblit/wicket/pages/ForksPage.java
index 7b8235b..54c2c82 100644
--- a/src/com/gitblit/wicket/pages/ForksPage.java
+++ b/src/com/gitblit/wicket/pages/ForksPage.java
@@ -42,26 +42,32 @@
 	public ForksPage(PageParameters params) {
 		super(params);
 		
+		UserModel user = GitBlitWebSession.get().getUser();
 		RepositoryModel model = getRepositoryModel();
-		RepositoryModel origin;
+		RepositoryModel origin = model;
 		List<String> list;
 		if (ArrayUtils.isEmpty(model.forks)) {
-			// origin repository has forks
-			origin = GitBlit.self().getRepositoryModel(model.originRepository);
-			list = new ArrayList<String>(origin.forks);
+			if (!StringUtils.isEmpty(model.originRepository)) {
+				// try origin repository
+				origin = GitBlit.self().getRepositoryModel(model.originRepository);
+			}
+			if (origin == null || origin.forks == null) {
+				list = new ArrayList<String>();
+			} else {
+				list = new ArrayList<String>(origin.forks);
+			}
 		} else {
 			// this repository has forks
-			origin = model;
 			list = new ArrayList<String>(model.forks);
 		}
 		
 		if (origin.isPersonalRepository()) {
 			// personal repository
-			UserModel user = GitBlit.self().getUserModel(origin.projectPath.substring(1));
-			PersonIdent ident = new PersonIdent(user.getDisplayName(), user.emailAddress);
+			UserModel originUser = GitBlit.self().getUserModel(origin.projectPath.substring(1));
+			PersonIdent ident = new PersonIdent(originUser.getDisplayName(), originUser.emailAddress);
 			add(new GravatarImage("forkSourceAvatar", ident, 20));
 			add(new Label("forkSourceSwatch").setVisible(false));
-			add(new LinkPanel("forkSourceProject", null, user.getDisplayName(), UserPage.class, WicketUtils.newUsernameParameter(user.username)));
+			add(new LinkPanel("forkSourceProject", null, originUser.getDisplayName(), UserPage.class, WicketUtils.newUsernameParameter(originUser.username)));
 		} else {
 			// standard repository
 			add(new GravatarImage("forkSourceAvatar", new PersonIdent("", ""), 20).setVisible(false));
@@ -85,10 +91,15 @@
 		}
 		
 		String source = StringUtils.getLastPathElement(origin.name);
-		add(new LinkPanel("forkSource", null, StringUtils.stripDotGit(source), SummaryPage.class, WicketUtils.newRepositoryParameter(origin.name)));
+		if (user != null && user.canViewRepository(origin)) {
+			// user can view the origin
+			add(new LinkPanel("forkSource", null, StringUtils.stripDotGit(source), SummaryPage.class, WicketUtils.newRepositoryParameter(origin.name)));
+		} else {
+			// user can not view the origin
+			add(new Label("forkSource", StringUtils.stripDotGit(source)));
+		}
 
 		// only display user-accessible forks
-		UserModel user = GitBlitWebSession.get().getUser();
 		List<RepositoryModel> forks = new ArrayList<RepositoryModel>();
 		for (String aFork : list) {
 			RepositoryModel fork = GitBlit.self().getRepositoryModel(user, aFork);

--
Gitblit v1.9.1