From 7dc890057cc7f02df8f27ab988aa7055cbb3af65 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Tue, 08 Jan 2013 15:19:28 -0500
Subject: [PATCH] Wrap pushlog update code with an exception handler, just-in-case

---
 src/com/gitblit/GitBlit.java |   65 +++++++++++++++++++++++++++-----
 1 files changed, 54 insertions(+), 11 deletions(-)

diff --git a/src/com/gitblit/GitBlit.java b/src/com/gitblit/GitBlit.java
index 96333a0..3eb246b 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;
 
@@ -467,36 +471,48 @@
 		this.userService.setup(settings);
 	}
 	
+	public boolean supportsAddUser() {
+		return supportsCredentialChanges(new UserModel(""));
+	}
+	
 	/**
+	 * Returns true if the user's credentials can be changed.
 	 * 
+	 * @param user
 	 * @return true if the user service supports credential changes
 	 */
-	public boolean supportsCredentialChanges() {
-		return userService.supportsCredentialChanges();
+	public boolean supportsCredentialChanges(UserModel user) {
+		return (user != null && user.isLocalAccount()) || userService.supportsCredentialChanges();
 	}
 
 	/**
+	 * Returns true if the user's display name can be changed.
 	 * 
+	 * @param user
 	 * @return true if the user service supports display name changes
 	 */
-	public boolean supportsDisplayNameChanges() {
-		return userService.supportsDisplayNameChanges();
+	public boolean supportsDisplayNameChanges(UserModel user) {
+		return (user != null && user.isLocalAccount()) || userService.supportsDisplayNameChanges();
 	}
 
 	/**
+	 * Returns true if the user's email address can be changed.
 	 * 
+	 * @param user
 	 * @return true if the user service supports email address changes
 	 */
-	public boolean supportsEmailAddressChanges() {
-		return userService.supportsEmailAddressChanges();
+	public boolean supportsEmailAddressChanges(UserModel user) {
+		return (user != null && user.isLocalAccount()) || userService.supportsEmailAddressChanges();
 	}
 
 	/**
+	 * Returns true if the user's team memberships can be changed.
 	 * 
+	 * @param user
 	 * @return true if the user service supports team membership changes
 	 */
-	public boolean supportsTeamMembershipChanges() {
-		return userService.supportsTeamMembershipChanges();
+	public boolean supportsTeamMembershipChanges(UserModel user) {
+		return (user != null && user.isLocalAccount()) || userService.supportsTeamMembershipChanges();
 	}
 
 	/**
@@ -785,6 +801,10 @@
 	 * @return the effective list of permissions for the user
 	 */
 	public List<RegistrantAccessPermission> getUserAccessPermissions(UserModel user) {
+		if (StringUtils.isEmpty(user.username)) {
+			// new user
+			return new ArrayList<RegistrantAccessPermission>();
+		}
 		Set<RegistrantAccessPermission> set = new LinkedHashSet<RegistrantAccessPermission>();
 		set.addAll(user.getRepositoryPermissions());
 		// Flag missing repositories
@@ -1351,8 +1371,8 @@
 		if (config.isOutdated()) {
 			// reload model
 			logger.info(MessageFormat.format("Config for \"{0}\" has changed. Reloading model and updating cache.", repositoryName));
-			model = loadRepositoryModel(repositoryName);
-			removeFromCachedRepositoryList(repositoryName);
+			model = loadRepositoryModel(model.name);
+			removeFromCachedRepositoryList(model.name);
 			addToCachedRepositoryList(model);
 		} else {
 			// update a few repository parameters 
@@ -1402,7 +1422,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);

--
Gitblit v1.9.1