James Moger
2013-01-05 9e186eedf1a09ca7ac4fbdea32b00e7e5331f7eb
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);