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