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