From 9af47c10c6a268877c1d232c8d71ee6df4f8a7ab Mon Sep 17 00:00:00 2001
From: Jeroen Baten <jeroen@jeroenbaten.nl>
Date: Fri, 04 Jan 2013 05:18:37 -0500
Subject: [PATCH] Dutch translation before spellcheck

---
 src/com/gitblit/GitBlit.java |  128 +++++++++++++++++++++++++++++++++++++-----
 1 files changed, 113 insertions(+), 15 deletions(-)

diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java
index c2d4a85..30071bb 100644
--- a/src/com/gitblit/GitBlit.java
+++ b/src/com/gitblit/GitBlit.java
@@ -154,6 +154,10 @@
 	private final Map<String, ProjectModel> projectCache = new ConcurrentHashMap<String, ProjectModel>();
 	
 	private final AtomicReference<String> repositoryListSettingsChecksum = new AtomicReference<String>("");
+	
+	private final ObjectCache<String> projectMarkdownCache = new ObjectCache<String>();
+	
+	private final ObjectCache<String> projectRepositoriesMarkdownCache = new ObjectCache<String>();
 
 	private ServletContext servletContext;
 
@@ -1339,7 +1343,7 @@
 		}
 
 		// check for updates
-		Repository r = getRepository(repositoryName);
+		Repository r = getRepository(model.name);
 		if (r == null) {
 			// repository is missing
 			removeFromCachedRepositoryList(repositoryName);
@@ -1402,7 +1406,30 @@
 				}
 				project.title = projectConfigs.getString("project", name, "title");
 				project.description = projectConfigs.getString("project", name, "description");
-				configs.put(name.toLowerCase(), project);				
+				
+				// project markdown
+				File pmkd = new File(getRepositoriesFolder(), (project.isRoot ? "" : name) + "/project.mkd");
+				if (pmkd.exists()) {
+					Date lm = new Date(pmkd.lastModified());
+					if (!projectMarkdownCache.hasCurrent(name, lm)) {
+						String mkd = com.gitblit.utils.FileUtils.readContent(pmkd,  "\n");
+						projectMarkdownCache.updateObject(name, lm, mkd);
+					}
+					project.projectMarkdown = projectMarkdownCache.getObject(name);
+				}
+				
+				// project repositories markdown
+				File rmkd = new File(getRepositoriesFolder(), (project.isRoot ? "" : name) + "/repositories.mkd");
+				if (rmkd.exists()) {
+					Date lm = new Date(rmkd.lastModified());
+					if (!projectRepositoriesMarkdownCache.hasCurrent(name, lm)) {
+						String mkd = com.gitblit.utils.FileUtils.readContent(rmkd,  "\n");
+						projectRepositoriesMarkdownCache.updateObject(name, lm, mkd);
+					}
+					project.repositoriesMarkdown = projectRepositoriesMarkdownCache.getObject(name);
+				}
+				
+				configs.put(name.toLowerCase(), project);
 			}
 			projectCache.clear();
 			projectCache.putAll(configs);
@@ -1523,6 +1550,49 @@
 			return null;
 		}
 		return project;
+	}
+	
+	/**
+	 * Returns the list of project models that are referenced by the supplied
+	 * repository model	list.  This is an alternative method exists to ensure
+	 * Gitblit does not call getRepositoryModels(UserModel) twice in a request.
+	 * 
+	 * @param repositoryModels
+	 * @param includeUsers
+	 * @return a list of project models
+	 */
+	public List<ProjectModel> getProjectModels(List<RepositoryModel> repositoryModels, boolean includeUsers) {
+		Map<String, ProjectModel> projects = new LinkedHashMap<String, ProjectModel>();
+		for (RepositoryModel repository : repositoryModels) {
+			if (!includeUsers && repository.isPersonalRepository()) {
+				// exclude personal repositories
+				continue;
+			}
+			if (!projects.containsKey(repository.projectPath)) {
+				ProjectModel project = getProjectModel(repository.projectPath);
+				if (project == null) {
+					logger.warn(MessageFormat.format("excluding project \"{0}\" from project list because it is empty!",
+							repository.projectPath));
+					continue;
+				}
+				projects.put(repository.projectPath, project);
+				// clear the repo list in the project because that is the system
+				// list, not the user-accessible list and start building the
+				// user-accessible list
+				project.repositories.clear();
+				project.repositories.add(repository.name);
+				project.lastChange = repository.lastChange;
+			} else {
+				// update the user-accessible list
+				// this is used for repository count
+				ProjectModel project = projects.get(repository.projectPath);
+				project.repositories.add(repository.name);
+				if (project.lastChange.before(repository.lastChange)) {
+					project.lastChange = repository.lastChange;
+				}
+			}
+		}
+		return new ArrayList<ProjectModel>(projects.values());
 	}
 	
 	/**
@@ -1652,7 +1722,18 @@
 	 * @return true if the repository exists
 	 */
 	public boolean hasRepository(String repositoryName) {
-		if (settings.getBoolean(Keys.git.cacheRepositoryList, true)) {
+		return hasRepository(repositoryName, false);
+	}
+	
+	/**
+	 * Determines if this server has the requested repository.
+	 * 
+	 * @param name
+	 * @param caseInsensitive
+	 * @return true if the repository exists
+	 */
+	public boolean hasRepository(String repositoryName, boolean caseSensitiveCheck) {
+		if (!caseSensitiveCheck && settings.getBoolean(Keys.git.cacheRepositoryList, true)) {
 			// if we are caching use the cache to determine availability
 			// otherwise we end up adding a phantom repository to the cache
 			return repositoryListCache.containsKey(repositoryName.toLowerCase());
@@ -1728,7 +1809,7 @@
 			ProjectModel project = getProjectModel(userProject);
 			for (String repository : project.repositories) {
 				if (repository.startsWith(userProject)) {
-					RepositoryModel model = repositoryListCache.get(repository);
+					RepositoryModel model = getRepositoryModel(repository);
 					if (model.originRepository.equalsIgnoreCase(origin)) {
 						// user has a fork
 						return model.name;
@@ -1749,19 +1830,38 @@
 	 */
 	public ForkModel getForkNetwork(String repository) {
 		if (settings.getBoolean(Keys.git.cacheRepositoryList, true)) {
-			// find the root
+			// find the root, cached
 			RepositoryModel model = repositoryListCache.get(repository.toLowerCase());
 			while (model.originRepository != null) {
 				model = repositoryListCache.get(model.originRepository);
 			}
+			ForkModel root = getForkModelFromCache(model.name);
+			return root;
+		} else {
+			// find the root, non-cached
+			RepositoryModel model = getRepositoryModel(repository.toLowerCase());
+			while (model.originRepository != null) {
+				model = getRepositoryModel(model.originRepository);
+			}
 			ForkModel root = getForkModel(model.name);
 			return root;
 		}
-		return null;
+	}
+	
+	private ForkModel getForkModelFromCache(String repository) {
+		RepositoryModel model = repositoryListCache.get(repository.toLowerCase());
+		ForkModel fork = new ForkModel(model);
+		if (!ArrayUtils.isEmpty(model.forks)) {
+			for (String aFork : model.forks) {
+				ForkModel fm = getForkModelFromCache(aFork);
+				fork.forks.add(fm);
+			}
+		}
+		return fork;
 	}
 	
 	private ForkModel getForkModel(String repository) {
-		RepositoryModel model = repositoryListCache.get(repository.toLowerCase());
+		RepositoryModel model = getRepositoryModel(repository.toLowerCase());
 		ForkModel fork = new ForkModel(model);
 		if (!ArrayUtils.isEmpty(model.forks)) {
 			for (String aFork : model.forks) {
@@ -1937,7 +2037,7 @@
 			if (!repository.name.toLowerCase().endsWith(org.eclipse.jgit.lib.Constants.DOT_GIT_EXT)) {
 				repository.name += org.eclipse.jgit.lib.Constants.DOT_GIT_EXT;
 			}
-			if (new File(repositoriesFolder, repository.name).exists()) {
+			if (hasRepository(repository.name)) {
 				throw new GitBlitException(MessageFormat.format(
 						"Can not create repository ''{0}'' because it already exists.",
 						repository.name));
@@ -3044,22 +3144,20 @@
 			ServletContext context = contextEvent.getServletContext();
 			WebXmlSettings webxmlSettings = new WebXmlSettings(context);
 
-			// 0.7.0 web.properties in the deployed war folder
-			String webProps = context.getRealPath("/WEB-INF/web.properties");
+			// gitblit.properties file located within the webapp
+			String webProps = context.getRealPath("/WEB-INF/gitblit.properties");
 			if (!StringUtils.isEmpty(webProps)) {
 				File overrideFile = new File(webProps);
-				if (overrideFile.exists()) {
-					webxmlSettings.applyOverrides(overrideFile);
-				}
+				webxmlSettings.applyOverrides(overrideFile);
 			}
 			
-
-			// 0.8.0 gitblit.properties file located outside the deployed war
+			// gitblit.properties file located outside the deployed war
 			// folder lie, for example, on RedHat OpenShift.
 			File overrideFile = getFileOrFolder("gitblit.properties");
 			if (!overrideFile.getPath().equals("gitblit.properties")) {
 				webxmlSettings.applyOverrides(overrideFile);
 			}
+			
 			configureContext(webxmlSettings, true);
 
 			// Copy the included scripts to the configured groovy folder

--
Gitblit v1.9.1