From 0c5cee25a1d9019de2d92427fda886a28076aa01 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Wed, 18 Sep 2013 11:31:02 -0400
Subject: [PATCH] Disable but improve the example commit message regexes
---
src/main/java/com/gitblit/GitBlit.java | 86 ++++++++++++++++++++++++++++++++++++++----
1 files changed, 77 insertions(+), 9 deletions(-)
diff --git a/src/main/java/com/gitblit/GitBlit.java b/src/main/java/com/gitblit/GitBlit.java
index 72a0e22..95da669 100644
--- a/src/main/java/com/gitblit/GitBlit.java
+++ b/src/main/java/com/gitblit/GitBlit.java
@@ -32,6 +32,7 @@
import java.nio.charset.Charset;
import java.security.Principal;
import java.text.MessageFormat;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
@@ -87,6 +88,7 @@
import com.gitblit.Constants.AccountType;
import com.gitblit.Constants.AuthenticationType;
import com.gitblit.Constants.AuthorizationControl;
+import com.gitblit.Constants.CommitMessageRenderer;
import com.gitblit.Constants.FederationRequest;
import com.gitblit.Constants.FederationStrategy;
import com.gitblit.Constants.FederationToken;
@@ -124,6 +126,7 @@
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.JGitUtils.LastChange;
import com.gitblit.utils.JsonUtils;
+import com.gitblit.utils.MarkdownUtils;
import com.gitblit.utils.MetricUtils;
import com.gitblit.utils.ModelUtils;
import com.gitblit.utils.ObjectCache;
@@ -1990,8 +1993,10 @@
if (getConfig(config,"description", null) == null) {
File descFile = new File(r.getDirectory(), "description");
if (descFile.exists()) {
- config.setString(Constants.CONFIG_GITBLIT, null, "description",
- com.gitblit.utils.FileUtils.readContent(descFile, System.getProperty("line.separator")));
+ String desc = com.gitblit.utils.FileUtils.readContent(descFile, System.getProperty("line.separator"));
+ if (!desc.toLowerCase().startsWith("unnamed repository")) {
+ config.setString(Constants.CONFIG_GITBLIT, null, "description", desc);
+ }
}
}
model.description = getConfig(config, "description", "");
@@ -2012,6 +2017,8 @@
model.showReadme = getConfig(config, "showReadme", false);
model.skipSizeCalculation = getConfig(config, "skipSizeCalculation", false);
model.skipSummaryMetrics = getConfig(config, "skipSummaryMetrics", false);
+ model.commitMessageRenderer = CommitMessageRenderer.fromName(getConfig(config, "commitMessageRenderer",
+ settings.getString(Keys.web.commitMessageRenderer, null)));
model.federationStrategy = FederationStrategy.fromName(getConfig(config,
"federationStrategy", null));
model.federationSets = new ArrayList<String>(Arrays.asList(config.getStringList(
@@ -2039,7 +2046,7 @@
Constants.CONFIG_GITBLIT, null, "indexBranch")));
model.metricAuthorExclusions = new ArrayList<String>(Arrays.asList(config.getStringList(
Constants.CONFIG_GITBLIT, null, "metricAuthorExclusions")));
-
+
// Custom defined properties
model.customFields = new LinkedHashMap<String, String>();
for (String aProperty : config.getNames(Constants.CONFIG_GITBLIT, Constants.CONFIG_CUSTOM_FIELDS)) {
@@ -2427,7 +2434,8 @@
}
// create repository
logger.info("create repository " + repository.name);
- r = JGitUtils.createRepository(repositoriesFolder, repository.name);
+ String shared = getString(Keys.git.createRepositoriesShared, "FALSE");
+ r = JGitUtils.createRepository(repositoriesFolder, repository.name, shared);
} else {
// rename repository
if (!repositoryName.equalsIgnoreCase(repository.name)) {
@@ -2529,7 +2537,13 @@
// close the repository object
r.close();
}
-
+
+ // Adjust permissions in case we updated the config files
+ JGitUtils.adjustSharedPerm(new File(r.getDirectory().getAbsolutePath(), "config"),
+ getString(Keys.git.createRepositoriesShared, "FALSE"));
+ JGitUtils.adjustSharedPerm(new File(r.getDirectory().getAbsolutePath(), "HEAD"),
+ getString(Keys.git.createRepositoriesShared, "FALSE"));
+
// update repository cache
removeFromCachedRepositoryList(repositoryName);
// model will actually be replaced on next load because config is stale
@@ -2587,6 +2601,16 @@
config.setInt(Constants.CONFIG_GITBLIT, null, "maxActivityCommits", repository.maxActivityCommits);
}
+ CommitMessageRenderer defaultRenderer = CommitMessageRenderer.fromName(settings.getString(Keys.web.commitMessageRenderer, null));
+ if (repository.commitMessageRenderer == null || repository.commitMessageRenderer == defaultRenderer) {
+ // use default from config
+ config.unset(Constants.CONFIG_GITBLIT, null, "commitMessageRenderer");
+ } else {
+ // repository overrides default
+ config.setString(Constants.CONFIG_GITBLIT, null, "commitMessageRenderer",
+ repository.commitMessageRenderer.name());
+ }
+
updateList(config, "federationSets", repository.federationSets);
updateList(config, "preReceiveScript", repository.preReceiveScripts);
updateList(config, "postReceiveScript", repository.postReceiveScripts);
@@ -2676,12 +2700,56 @@
* Returns an html version of the commit message with any global or
* repository-specific regular expression substitution applied.
*
+ * This method uses the preferred renderer to transform the commit message.
+ *
+ * @param repository
+ * @param text
+ * @return html version of the commit message
+ */
+ public String processCommitMessage(RepositoryModel repository, String text) {
+ switch (repository.commitMessageRenderer) {
+ case MARKDOWN:
+ try {
+ String prepared = processCommitMessageRegex(repository.name, text);
+ return MarkdownUtils.transformMarkdown(prepared);
+ } catch (ParseException e) {
+ logger.error("Failed to render commit message as markdown", e);
+ }
+ break;
+ default:
+ // noop
+ break;
+ }
+
+ return processPlainCommitMessage(repository.name, text);
+ }
+
+ /**
+ * Returns an html version of the commit message with any global or
+ * repository-specific regular expression substitution applied.
+ *
+ * This method assumes the commit message is plain text.
+ *
* @param repositoryName
* @param text
* @return html version of the commit message
*/
- public String processCommitMessage(String repositoryName, String text) {
- String html = StringUtils.breakLinesForHtml(text);
+ public String processPlainCommitMessage(String repositoryName, String text) {
+ String html = StringUtils.escapeForHtml(text, false);
+ html = processCommitMessageRegex(repositoryName, html);
+ return StringUtils.breakLinesForHtml(html);
+
+ }
+
+ /**
+ * Apply globally or per-repository specified regex substitutions to the
+ * commit message.
+ *
+ * @param repositoryName
+ * @param text
+ * @return the processed commit message
+ */
+ protected String processCommitMessageRegex(String repositoryName, String text) {
Map<String, String> map = new HashMap<String, String>();
// global regex keys
if (settings.getBoolean(Keys.regex.global, false)) {
@@ -2705,14 +2773,14 @@
String definition = entry.getValue().trim();
String[] chunks = definition.split("!!!");
if (chunks.length == 2) {
- html = html.replaceAll(chunks[0], chunks[1]);
+ text = text.replaceAll(chunks[0], chunks[1]);
} else {
logger.warn(entry.getKey()
+ " improperly formatted. Use !!! to separate match from replacement: "
+ definition);
}
}
- return html;
+ return text;
}
/**
--
Gitblit v1.9.1