From cca55e4722fa1ceba8a0933dda974162635f3955 Mon Sep 17 00:00:00 2001 From: John Crygier <john.crygier@aon.com> Date: Thu, 03 May 2012 12:48:16 -0400 Subject: [PATCH] Ability to get / set "custom" properties within a RepositoryModel. This makes getting specialized settings in hooks much easier. --- src/com/gitblit/models/RepositoryModel.java | 74 +++++++++++++++++++++++++++++++++++- 1 files changed, 71 insertions(+), 3 deletions(-) diff --git a/src/com/gitblit/models/RepositoryModel.java b/src/com/gitblit/models/RepositoryModel.java index 9a774fb..fd35f36 100644 --- a/src/com/gitblit/models/RepositoryModel.java +++ b/src/com/gitblit/models/RepositoryModel.java @@ -20,8 +20,16 @@ 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 com.gitblit.Constants.AccessRestrictionType; import com.gitblit.Constants.FederationStrategy; +import com.gitblit.GitBlit; +import com.gitblit.utils.ArrayUtils; +import com.gitblit.utils.JGitUtils; import com.gitblit.utils.StringUtils; /** @@ -34,6 +42,11 @@ 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; @@ -53,9 +66,17 @@ public boolean skipSizeCalculation; public boolean skipSummaryMetrics; public String frequency; + public boolean isBare; public String origin; + public String HEAD; + public List<String> availableRefs; + public List<String> indexedBranches; public String size; - + public List<String> preReceiveScripts; + public List<String> postReceiveScripts; + public List<String> mailingLists; + private String displayName; + public RepositoryModel() { this("", "", "", new Date(0)); } @@ -67,12 +88,59 @@ this.lastChange = lastchange; this.accessRestriction = AccessRestrictionType.NONE; this.federationSets = new ArrayList<String>(); - this.federationStrategy = FederationStrategy.FEDERATE_THIS; + this.federationStrategy = FederationStrategy.FEDERATE_THIS; + } + + public List<String> getLocalBranches() { + if (ArrayUtils.isEmpty(availableRefs)) { + return new ArrayList<String>(); + } + List<String> localBranches = new ArrayList<String>(); + for (String ref : availableRefs) { + if (ref.startsWith("refs/heads")) { + localBranches.add(ref); + } + } + 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 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; + } } @Override public String toString() { - return name; + if (displayName == null) { + displayName = StringUtils.stripDotGit(name); + } + return displayName; } @Override -- Gitblit v1.9.1