import java.util.Date;\r
import java.util.List;\r
\r
+import org.eclipse.jgit.lib.Repository;\r
+import org.eclipse.jgit.lib.StoredConfig;\r
+import org.slf4j.Logger;\r
+import org.slf4j.LoggerFactory;\r
+\r
import com.gitblit.Constants.AccessRestrictionType;\r
import com.gitblit.Constants.FederationStrategy;\r
+import com.gitblit.GitBlit;\r
import com.gitblit.utils.ArrayUtils;\r
+import com.gitblit.utils.JGitUtils;\r
import com.gitblit.utils.StringUtils;\r
\r
/**\r
public class RepositoryModel implements Serializable, Comparable<RepositoryModel> {\r
\r
private static final long serialVersionUID = 1L;\r
+ \r
+ public static String CUSTOM_DEFINED_PROP_SECTION = "gitblit";\r
+ public static String CUSTOM_DEFINED_PROP_SUBSECTION = "customDefinedProperties";\r
+ \r
+ private final Logger logger = LoggerFactory.getLogger(RepositoryModel.class);\r
\r
// field names are reflectively mapped in EditRepository page\r
public String name;\r
}\r
return localBranches;\r
}\r
+ \r
+ public String getCustomProperty(String propertyKey) {\r
+ try {\r
+ Repository r = GitBlit.self().getRepository(name);\r
+ StoredConfig config = JGitUtils.readConfig(r);\r
+ \r
+ return config.getString(CUSTOM_DEFINED_PROP_SECTION, CUSTOM_DEFINED_PROP_SUBSECTION, propertyKey);\r
+ } catch (Exception e) {\r
+ logger.error("Error getting Custom Property", e);\r
+ \r
+ return null;\r
+ } \r
+ }\r
+ \r
+ public String setCustomProperty(String propertyKey, String propertyValue) {\r
+ try {\r
+ Repository r = GitBlit.self().getRepository(name);\r
+ StoredConfig config = JGitUtils.readConfig(r);\r
+ \r
+ String oldValue = config.getString(CUSTOM_DEFINED_PROP_SECTION, CUSTOM_DEFINED_PROP_SUBSECTION, propertyKey);\r
+ \r
+ config.setString(CUSTOM_DEFINED_PROP_SECTION, CUSTOM_DEFINED_PROP_SUBSECTION, propertyKey, propertyValue);\r
+ config.save();\r
+ \r
+ return oldValue;\r
+ } catch (Exception e) {\r
+ logger.error("Error getting Custom Property", e);\r
+ \r
+ return null;\r
+ } \r
+ }\r
\r
@Override\r
public String toString() {\r
MarkdownUtilsTest.class, JGitUtilsTest.class, SyndicationUtilsTest.class,\r
DiffUtilsTest.class, MetricUtilsTest.class, TicgitUtilsTest.class,\r
GitBlitTest.class, FederationTests.class, RpcTests.class, GitServletTest.class,\r
- GroovyScriptTest.class, LuceneExecutorTest.class, IssuesTest.class })\r
+ GroovyScriptTest.class, LuceneExecutorTest.class, IssuesTest.class, RepositoryModelTest.class })\r
public class GitBlitSuite {\r
\r
public static final File REPOSITORIES = new File("git");\r
--- /dev/null
+package com.gitblit.tests;
+
+import static org.junit.Assert.*;
+
+import org.eclipse.jgit.lib.Repository;
+import org.eclipse.jgit.lib.StoredConfig;
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import com.gitblit.GitBlit;
+import com.gitblit.models.RepositoryModel;
+import com.gitblit.utils.JGitUtils;
+
+public class RepositoryModelTest {
+
+ private static String oldSection;
+ private static String oldSubSection;
+ private static boolean wasStarted = false;
+
+ @BeforeClass
+ public static void startGitBlit() throws Exception {
+ wasStarted = GitBlitSuite.startGitblit() == false;
+
+ oldSection = RepositoryModel.CUSTOM_DEFINED_PROP_SECTION;
+ oldSubSection = RepositoryModel.CUSTOM_DEFINED_PROP_SUBSECTION;
+
+ RepositoryModel.CUSTOM_DEFINED_PROP_SECTION = "RepositoryModelTest";
+ RepositoryModel.CUSTOM_DEFINED_PROP_SUBSECTION = "RepositoryModelTestSubSection";
+ }
+
+ @AfterClass
+ public static void stopGitBlit() throws Exception {
+ if (wasStarted == false)
+ GitBlitSuite.stopGitblit();
+
+ RepositoryModel.CUSTOM_DEFINED_PROP_SECTION = oldSection;
+ RepositoryModel.CUSTOM_DEFINED_PROP_SUBSECTION = oldSubSection;
+ }
+
+ @Before
+ public void initializeConfiguration() throws Exception{
+ Repository r = GitBlitSuite.getHelloworldRepository();
+ StoredConfig config = JGitUtils.readConfig(r);
+
+ config.unsetSection(RepositoryModel.CUSTOM_DEFINED_PROP_SECTION, RepositoryModel.CUSTOM_DEFINED_PROP_SUBSECTION);
+ config.setString(RepositoryModel.CUSTOM_DEFINED_PROP_SECTION, RepositoryModel.CUSTOM_DEFINED_PROP_SUBSECTION, "commitMessageRegEx", "\\d");
+ config.setString(RepositoryModel.CUSTOM_DEFINED_PROP_SECTION, RepositoryModel.CUSTOM_DEFINED_PROP_SUBSECTION, "anotherProperty", "Hello");
+
+ config.save();
+ }
+
+ @After
+ public void teardownConfiguration() throws Exception {
+ Repository r = GitBlitSuite.getHelloworldRepository();
+ StoredConfig config = JGitUtils.readConfig(r);
+
+ config.unsetSection(RepositoryModel.CUSTOM_DEFINED_PROP_SECTION, RepositoryModel.CUSTOM_DEFINED_PROP_SUBSECTION);
+ config.save();
+ }
+
+ @Test
+ public void testGetCustomProperty() throws Exception {
+ RepositoryModel model = GitBlit.self().getRepositoryModel(
+ GitBlitSuite.getHelloworldRepository().getDirectory().getName());
+
+ assertEquals("\\d", model.getCustomProperty("commitMessageRegEx"));
+ assertEquals("Hello", model.getCustomProperty("anotherProperty"));
+ }
+
+ @Test
+ public void testSetCustomProperty() throws Exception {
+ RepositoryModel model = GitBlit.self().getRepositoryModel(
+ GitBlitSuite.getHelloworldRepository().getDirectory().getName());
+
+ assertEquals("\\d", model.getCustomProperty("commitMessageRegEx"));
+ assertEquals("Hello", model.getCustomProperty("anotherProperty"));
+
+ assertEquals("Hello", model.setCustomProperty("anotherProperty", "GoodBye"));
+
+ assertEquals("\\d", model.getCustomProperty("commitMessageRegEx"));
+ assertEquals("GoodBye", model.getCustomProperty("anotherProperty"));
+ }
+
+}