James Moger
2012-10-13 c658df9e87d65b08d5482cf04489cb0532ff83dd
src/com/gitblit/models/RepositoryModel.java
@@ -19,17 +19,14 @@
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.lib.StoredConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import com.gitblit.Constants.AccessRestrictionType;
import com.gitblit.Constants.AuthorizationControl;
import com.gitblit.Constants.FederationStrategy;
import com.gitblit.GitBlit;
import com.gitblit.utils.ArrayUtils;
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.StringUtils;
/**
@@ -42,11 +39,6 @@
public class RepositoryModel implements Serializable, Comparable<RepositoryModel> {
   private static final long serialVersionUID = 1L;
   public static String CUSTOM_DEFINED_PROP_SECTION = "gitblit";
   public static String CUSTOM_DEFINED_PROP_SUBSECTION = "customDefinedProperties";
   private final Logger logger = LoggerFactory.getLogger(RepositoryModel.class);
   // field names are reflectively mapped in EditRepository page
   public String name;
@@ -58,6 +50,8 @@
   public boolean useTickets;
   public boolean useDocs;
   public AccessRestrictionType accessRestriction;
   public AuthorizationControl authorizationControl;
   public boolean allowAuthenticated;
   public boolean isFrozen;
   public boolean showReadme;
   public FederationStrategy federationStrategy;
@@ -75,7 +69,13 @@
   public List<String> preReceiveScripts;
   public List<String> postReceiveScripts;
   public List<String> mailingLists;
   public Map<String, String> customFields;
   public String projectPath;
   private String displayName;
   public boolean allowForks;
   public Set<String> forks;
   public String originRepository;
   public boolean verifyCommitter;
   
   public RepositoryModel() {
      this("", "", "", new Date(0));
@@ -87,8 +87,10 @@
      this.owner = owner;
      this.lastChange = lastchange;
      this.accessRestriction = AccessRestrictionType.NONE;
      this.authorizationControl = AuthorizationControl.NAMED;
      this.federationSets = new ArrayList<String>();
      this.federationStrategy = FederationStrategy.FEDERATE_THIS;
      this.federationStrategy = FederationStrategy.FEDERATE_THIS;
      this.projectPath = StringUtils.getFirstPathElement(name);
   }
   
   public List<String> getLocalBranches() {
@@ -104,35 +106,35 @@
      return localBranches;
   }
   
   public String getCustomProperty(String propertyKey) {
      try {
         Repository r = GitBlit.self().getRepository(name);
         StoredConfig config = JGitUtils.readConfig(r);
         return config.getString(CUSTOM_DEFINED_PROP_SECTION, CUSTOM_DEFINED_PROP_SUBSECTION, propertyKey);
      } catch (Exception e) {
         logger.error("Error getting Custom Property", e);
         return null;
      }
   public void addFork(String repository) {
      if (forks == null) {
         forks = new TreeSet<String>();
      }
      forks.add(repository);
   }
   
   public String setCustomProperty(String propertyKey, String propertyValue) {
      try {
         Repository r = GitBlit.self().getRepository(name);
         StoredConfig config = JGitUtils.readConfig(r);
         String oldValue = config.getString(CUSTOM_DEFINED_PROP_SECTION, CUSTOM_DEFINED_PROP_SUBSECTION, propertyKey);
         config.setString(CUSTOM_DEFINED_PROP_SECTION, CUSTOM_DEFINED_PROP_SUBSECTION, propertyKey, propertyValue);
         config.save();
         return oldValue;
      } catch (Exception e) {
         logger.error("Error getting Custom Property", e);
         return null;
      }
   public void removeFork(String repository) {
      if (forks == null) {
         return;
      }
      forks.remove(repository);
   }
   public void resetDisplayName() {
      displayName = null;
   }
   @Override
   public int hashCode() {
      return name.hashCode();
   }
   @Override
   public boolean equals(Object o) {
      if (o instanceof RepositoryModel) {
         return name.equals(((RepositoryModel) o).name);
      }
      return false;
   }
   @Override
@@ -147,4 +149,44 @@
   public int compareTo(RepositoryModel o) {
      return StringUtils.compareRepositoryNames(name, o.name);
   }
   public boolean isFork() {
      return !StringUtils.isEmpty(originRepository);
   }
   public boolean isOwner(String username) {
      return owner != null && username != null && owner.equalsIgnoreCase(username);
   }
   public boolean isPersonalRepository() {
      return !StringUtils.isEmpty(projectPath) && projectPath.charAt(0) == '~';
   }
   public boolean isUsersPersonalRepository(String username) {
      return !StringUtils.isEmpty(projectPath) && projectPath.equalsIgnoreCase("~" + username);
   }
   public boolean allowAnonymousView() {
      return !accessRestriction.atLeast(AccessRestrictionType.VIEW);
   }
   public RepositoryModel cloneAs(String cloneName) {
      RepositoryModel clone = new RepositoryModel();
      clone.originRepository = name;
      clone.name = cloneName;
      clone.projectPath = StringUtils.getFirstPathElement(cloneName);
      clone.isBare = true;
      clone.description = description;
      clone.accessRestriction = AccessRestrictionType.PUSH;
      clone.authorizationControl = AuthorizationControl.NAMED;
      clone.federationStrategy = federationStrategy;
      clone.showReadme = showReadme;
      clone.showRemoteBranches = false;
      clone.allowForks = false;
      clone.useDocs = useDocs;
      clone.useTickets = useTickets;
      clone.skipSizeCalculation = skipSizeCalculation;
      clone.skipSummaryMetrics = skipSummaryMetrics;
      return clone;
   }
}