From 9effe1630d97039b3e01cd9b58ed07e75be1d63c Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 25 Feb 2013 08:40:30 -0500
Subject: [PATCH] Merge pull request #75 from thefake/master

---
 src/com/gitblit/wicket/pages/RootPage.java |   42 ++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 40 insertions(+), 2 deletions(-)

diff --git a/src/com/gitblit/wicket/pages/RootPage.java b/src/com/gitblit/wicket/pages/RootPage.java
index 40f7aec..adcd7b1 100644
--- a/src/com/gitblit/wicket/pages/RootPage.java
+++ b/src/com/gitblit/wicket/pages/RootPage.java
@@ -178,8 +178,14 @@
 			PageParameters pp = getPageParameters();
 			if (pp != null) {
 				PageParameters params = new PageParameters(pp);
+				// remove named project parameter
+				params.remove("p");
+
 				// remove named repository parameter
 				params.remove("r");
+
+				// remove named user parameter
+				params.remove("user");
 
 				// remove days back parameter if it is the default value
 				if (params.containsKey("db")
@@ -230,6 +236,7 @@
 			final UserModel user = GitBlitWebSession.get().getUser();
 			List<RepositoryModel> repositories = GitBlit.self().getRepositoryModels(user);
 			repositoryModels.addAll(repositories);
+			Collections.sort(repositoryModels);
 		}
 		return repositoryModels;
 	}
@@ -322,6 +329,13 @@
 		}
 
 		boolean hasParameter = false;
+		String projectName = WicketUtils.getProjectName(params);
+		String userName = WicketUtils.getUsername(params);
+		if (StringUtils.isEmpty(projectName)) {
+			if (!StringUtils.isEmpty(userName)) {
+				projectName = "~" + userName;
+			}
+		}
 		String repositoryName = WicketUtils.getRepositoryName(params);
 		String set = WicketUtils.getSet(params);
 		String regex = WicketUtils.getRegEx(params);
@@ -338,6 +352,27 @@
 				if (model.name.equalsIgnoreCase(repositoryName)) {
 					models.add(model);
 					break;
+				}
+			}
+		}
+
+		if (!StringUtils.isEmpty(projectName)) {
+			// try named project
+			hasParameter = true;			
+			if (projectName.equalsIgnoreCase(GitBlit.getString(Keys.web.repositoryRootGroupName, "main"))) {
+				// root project/group
+				for (RepositoryModel model : availableModels) {
+					if (model.name.indexOf('/') == -1) {
+						models.add(model);
+					}
+				}
+			} else {
+				// named project/group
+				String group = projectName.toLowerCase() + "/";
+				for (RepositoryModel model : availableModels) {
+					if (model.name.toLowerCase().startsWith(group)) {
+						models.add(model);
+					}
 				}
 			}
 		}
@@ -383,7 +418,7 @@
 			// brute-force our way through finding the matching models
 			for (RepositoryModel repositoryModel : availableModels) {
 				for (TeamModel teamModel : teamModels) {
-					if (teamModel.hasRepository(repositoryModel.name)) {
+					if (teamModel.hasRepositoryPermission(repositoryModel.name)) {
 						models.add(repositoryModel);
 					}
 				}
@@ -411,6 +446,9 @@
 			}
 			models = timeFiltered;
 		}
-		return new ArrayList<RepositoryModel>(models);
+		
+		List<RepositoryModel> list = new ArrayList<RepositoryModel>(models);
+		Collections.sort(list);
+		return list;
 	}
 }

--
Gitblit v1.9.1