From 2a81783f291805594d4b97da6830aee94292f8c8 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 17 Aug 2012 15:35:38 -0400
Subject: [PATCH] Eliminated unnecessary repository enumeration (issue 103)

---
 docs/04_releases.mkd                       |    1 +
 src/com/gitblit/wicket/pages/RootPage.java |   17 +++++++++++++----
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/docs/04_releases.mkd b/docs/04_releases.mkd
index 5c89d9a..af70dff 100644
--- a/docs/04_releases.mkd
+++ b/docs/04_releases.mkd
@@ -11,6 +11,7 @@
 
 #### fixes
 
+- Eliminated an unnecessary reopsitory enumeration call on the root page which should result in faster page loads (issue 103) 
 - Gitblit could not delete a Lucene index in a working copy on index upgrade 
 - Do not index submodule links (issue 119)
 - Restore original user or team object on failure to update (issue 118)
diff --git a/src/com/gitblit/wicket/pages/RootPage.java b/src/com/gitblit/wicket/pages/RootPage.java
index 636ed00..eaa2542 100644
--- a/src/com/gitblit/wicket/pages/RootPage.java
+++ b/src/com/gitblit/wicket/pages/RootPage.java
@@ -64,6 +64,7 @@
 
 	IModel<String> username = new Model<String>("");
 	IModel<String> password = new Model<String>("");
+	List<RepositoryModel> repositoryModels = new ArrayList<RepositoryModel>();
 
 	public RootPage() {
 		super();
@@ -223,6 +224,15 @@
 			}
 		}
 	}
+	
+	protected List<RepositoryModel> getRepositoryModels() {
+		if (repositoryModels.isEmpty()) {
+			final UserModel user = GitBlitWebSession.get().getUser();
+			List<RepositoryModel> repositories = GitBlit.self().getRepositoryModels(user);
+			repositoryModels.addAll(repositories);
+		}
+		return repositoryModels;
+	}
 
 	protected void addDropDownMenus(List<PageRegistration> pages) {
 
@@ -231,7 +241,7 @@
 	protected List<DropDownMenuItem> getRepositoryFilterItems(PageParameters params) {
 		final UserModel user = GitBlitWebSession.get().getUser();
 		Set<DropDownMenuItem> filters = new LinkedHashSet<DropDownMenuItem>();
-		List<RepositoryModel> repositories = GitBlit.self().getRepositoryModels(user);
+		List<RepositoryModel> repositories = getRepositoryModels();
 
 		// accessible repositories by federation set
 		Map<String, AtomicInteger> setMap = new HashMap<String, AtomicInteger>();
@@ -307,9 +317,8 @@
 	}
 
 	protected List<RepositoryModel> getRepositories(PageParameters params) {
-		final UserModel user = GitBlitWebSession.get().getUser();
 		if (params == null) {
-			return GitBlit.self().getRepositoryModels(user);
+			return getRepositoryModels();
 		}
 
 		boolean hasParameter = false;
@@ -319,7 +328,7 @@
 		String team = WicketUtils.getTeam(params);
 		int daysBack = params.getInt("db", 0);
 
-		List<RepositoryModel> availableModels = GitBlit.self().getRepositoryModels(user);
+		List<RepositoryModel> availableModels = getRepositoryModels();
 		Set<RepositoryModel> models = new HashSet<RepositoryModel>();
 
 		if (!StringUtils.isEmpty(repositoryName)) {

--
Gitblit v1.9.1