From c6f3d01c29bb67156b8154bfe5780537b0ef43ac Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Tue, 03 Dec 2013 10:36:19 -0500 Subject: [PATCH] Add support for per-repository bugtraq configuration --- src/main/java/com/gitblit/utils/MessageProcessor.java | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 52 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/gitblit/utils/MessageProcessor.java b/src/main/java/com/gitblit/utils/MessageProcessor.java index 58493de..087187f 100644 --- a/src/main/java/com/gitblit/utils/MessageProcessor.java +++ b/src/main/java/com/gitblit/utils/MessageProcessor.java @@ -15,17 +15,24 @@ */ package com.gitblit.utils; +import java.io.IOException; +import java.text.MessageFormat; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import org.eclipse.jgit.errors.ConfigInvalidException; +import org.eclipse.jgit.lib.Repository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.gitblit.IStoredSettings; import com.gitblit.Keys; import com.gitblit.models.RepositoryModel; +import com.syntevo.bugtraq.BugtraqConfig; +import com.syntevo.bugtraq.BugtraqFormatter; +import com.syntevo.bugtraq.BugtraqFormatter.OutputHandler; public class MessageProcessor { @@ -44,14 +51,15 @@ * This method uses the preferred renderer to transform the commit message. * * @param repository + * @param model * @param text * @return html version of the commit message */ - public String processCommitMessage(RepositoryModel repository, String text) { - switch (repository.commitMessageRenderer) { + public String processCommitMessage(Repository repository, RepositoryModel model, String text) { + switch (model.commitMessageRenderer) { case MARKDOWN: try { - String prepared = processCommitMessageRegex(repository.name, text); + String prepared = processCommitMessageRegex(repository, model.name, text); return MarkdownUtils.transformMarkdown(prepared); } catch (Exception e) { logger.error("Failed to render commit message as markdown", e); @@ -62,7 +70,7 @@ break; } - return processPlainCommitMessage(repository.name, text); + return processPlainCommitMessage(repository, model.name, text); } /** @@ -71,13 +79,14 @@ * * This method assumes the commit message is plain text. * + * @param repository * @param repositoryName * @param text * @return html version of the commit message */ - public String processPlainCommitMessage(String repositoryName, String text) { + public String processPlainCommitMessage(Repository repository, String repositoryName, String text) { String html = StringUtils.escapeForHtml(text, false); - html = processCommitMessageRegex(repositoryName, html); + html = processCommitMessageRegex(repository, repositoryName, html); return StringUtils.breakLinesForHtml(html); } @@ -86,11 +95,12 @@ * Apply globally or per-repository specified regex substitutions to the * commit message. * + * @param repository * @param repositoryName * @param text * @return the processed commit message */ - protected String processCommitMessageRegex(String repositoryName, String text) { + protected String processCommitMessageRegex(Repository repository, String repositoryName, String text) { Map<String, String> map = new HashMap<String, String>(); // global regex keys if (settings.getBoolean(Keys.regex.global, false)) { @@ -121,6 +131,41 @@ + definition); } } + + try { + // parse bugtraq repo config + BugtraqConfig config = BugtraqConfig.read(repository); + if (config != null) { + BugtraqFormatter formatter = new BugtraqFormatter(config); + StringBuilder sb = new StringBuilder(); + formatter.formatLogMessage(text, new BugtraqOutputHandler(sb)); + text = sb.toString(); + } + } catch (IOException e) { + logger.error(MessageFormat.format("Bugtraq config for {0} is invalid!", repositoryName), e); + } catch (ConfigInvalidException e) { + logger.error(MessageFormat.format("Bugtraq config for {0} is invalid!", repositoryName), e); + } + return text; } + + private class BugtraqOutputHandler implements OutputHandler { + + final StringBuilder sb; + + BugtraqOutputHandler(StringBuilder sb) { + this.sb = sb; + } + + @Override + public void appendText(String text) { + sb.append(text); + } + + @Override + public void appendLink(String name, String target) { + sb.append(MessageFormat.format("<a class=\"bugtraq\" href=\"{1}\">{0}</a>", name, target)); + } + } } -- Gitblit v1.9.1