Fixed duplicate entries in repository cache (issue 140)
diff --git a/docs/04_releases.mkd b/docs/04_releases.mkd
index 30582d5..ffd56dd 100644
--- a/docs/04_releases.mkd
+++ b/docs/04_releases.mkd
@@ -11,6 +11,7 @@
 

 #### fixes

 

+- Fixed duplicate entries in repository cache (issue 140)

 - Fixed connection leak in LDAPUserService (issue 139)

 - Fixed bug in commit page where changes to a submodule threw a null pointer exception (issue 132)

 - Fixed bug in the diff view for filenames that have non-ASCII characters (issue 128)

diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java
index 6348964..b14adc9 100644
--- a/src/com/gitblit/GitBlit.java
+++ b/src/com/gitblit/GitBlit.java
@@ -746,17 +746,17 @@
 	 * Adds the repository to the list of cached repositories if Gitblit is

 	 * configured to cache the repository list.

 	 * 

-	 * @param name

+	 * @param model

 	 */

-	private void addToCachedRepositoryList(String name, RepositoryModel model) {

+	private void addToCachedRepositoryList(RepositoryModel model) {

 		if (settings.getBoolean(Keys.git.cacheRepositoryList, true)) {

-			repositoryListCache.put(name, model);

+			repositoryListCache.put(model.name, model);

 			

 			// update the fork origin repository with this repository clone

 			if (!StringUtils.isEmpty(model.originRepository)) {

 				if (repositoryListCache.containsKey(model.originRepository)) {

 					RepositoryModel origin = repositoryListCache.get(model.originRepository);

-					origin.addFork(name);

+					origin.addFork(model.name);

 				}

 			}

 		}

@@ -1001,7 +1001,7 @@
 			if (model == null) {

 				return null;

 			}

-			addToCachedRepositoryList(repositoryName, model);

+			addToCachedRepositoryList(model);

 			return model;

 		}

 		

@@ -1023,7 +1023,7 @@
 			logger.info(MessageFormat.format("Config for \"{0}\" has changed. Reloading model and updating cache.", repositoryName));

 			model = loadRepositoryModel(repositoryName);

 			removeFromCachedRepositoryList(repositoryName);

-			addToCachedRepositoryList(repositoryName, model);

+			addToCachedRepositoryList(model);

 		} else {

 			// update a few repository parameters 

 			if (!model.hasCommits) {

@@ -1236,10 +1236,15 @@
 			return null;

 		}

 		RepositoryModel model = new RepositoryModel();

-		model.name = repositoryName;

+		model.isBare = r.isBare();

+		File basePath = getFileOrFolder(Keys.git.repositoriesFolder, "git");

+		if (model.isBare) {

+			model.name = com.gitblit.utils.FileUtils.getRelativePath(basePath, r.getDirectory());

+		} else {

+			model.name = com.gitblit.utils.FileUtils.getRelativePath(basePath, r.getDirectory().getParentFile());

+		}

 		model.hasCommits = JGitUtils.hasCommits(r);

 		model.lastChange = JGitUtils.getLastChange(r);

-		model.isBare = r.isBare();

 		if (repositoryName.indexOf('/') == -1) {

 			model.projectPath = "";

 		} else {

@@ -1670,7 +1675,7 @@
 		// update repository cache

 		removeFromCachedRepositoryList(repositoryName);

 		// model will actually be replaced on next load because config is stale

-		addToCachedRepositoryList(repository.name, repository);

+		addToCachedRepositoryList(repository);

 	}

 	

 	/**

@@ -2678,7 +2683,7 @@
 		}

 

 		// add this clone to the cached model

-		addToCachedRepositoryList(cloneModel.name, cloneModel);

+		addToCachedRepositoryList(cloneModel);

 		return cloneModel;

 	}

 }