Change-Id: I11eb50ba1ef0bef8ac47bf6f7b17e0f79ecd3f2dtags/v1.4.0
<classpathentry kind="lib" path="ext/lucene-memory-3.6.1.jar" sourcepath="ext/src/lucene-memory-3.6.1.jar" /> | <classpathentry kind="lib" path="ext/lucene-memory-3.6.1.jar" sourcepath="ext/src/lucene-memory-3.6.1.jar" /> | ||||
<classpathentry kind="lib" path="ext/lucene-queries-3.6.1.jar" sourcepath="ext/src/lucene-queries-3.6.1.jar" /> | <classpathentry kind="lib" path="ext/lucene-queries-3.6.1.jar" sourcepath="ext/src/lucene-queries-3.6.1.jar" /> | ||||
<classpathentry kind="lib" path="ext/jakarta-regexp-1.4.jar" /> | <classpathentry kind="lib" path="ext/jakarta-regexp-1.4.jar" /> | ||||
<classpathentry kind="lib" path="ext/markdownpapers-core-1.3.2.jar" sourcepath="ext/src/markdownpapers-core-1.3.2.jar" /> | |||||
<classpathentry kind="lib" path="ext/pegdown-1.4.1.jar" sourcepath="ext/src/pegdown-1.4.1.jar" /> | |||||
<classpathentry kind="lib" path="ext/parboiled-java-1.1.5.jar" sourcepath="ext/src/parboiled-java-1.1.5.jar" /> | |||||
<classpathentry kind="lib" path="ext/parboiled-core-1.1.5.jar" sourcepath="ext/src/parboiled-core-1.1.5.jar" /> | |||||
<classpathentry kind="lib" path="ext/asm-4.1.jar" sourcepath="ext/src/asm-4.1.jar" /> | |||||
<classpathentry kind="lib" path="ext/asm-tree-4.1.jar" sourcepath="ext/src/asm-tree-4.1.jar" /> | |||||
<classpathentry kind="lib" path="ext/asm-analysis-4.1.jar" sourcepath="ext/src/asm-analysis-4.1.jar" /> | |||||
<classpathentry kind="lib" path="ext/asm-util-4.1.jar" sourcepath="ext/src/asm-util-4.1.jar" /> | |||||
<classpathentry kind="lib" path="ext/org.eclipse.jgit-3.1.0.201310021548-r.jar" sourcepath="ext/src/org.eclipse.jgit-3.1.0.201310021548-r.jar" /> | <classpathentry kind="lib" path="ext/org.eclipse.jgit-3.1.0.201310021548-r.jar" sourcepath="ext/src/org.eclipse.jgit-3.1.0.201310021548-r.jar" /> | ||||
<classpathentry kind="lib" path="ext/jsch-0.1.46.jar" sourcepath="ext/src/jsch-0.1.46.jar" /> | <classpathentry kind="lib" path="ext/jsch-0.1.46.jar" sourcepath="ext/src/jsch-0.1.46.jar" /> | ||||
<classpathentry kind="lib" path="ext/JavaEWAH-0.5.6.jar" sourcepath="ext/src/JavaEWAH-0.5.6.jar" /> | <classpathentry kind="lib" path="ext/JavaEWAH-0.5.6.jar" sourcepath="ext/src/JavaEWAH-0.5.6.jar" /> |
https://github.com/wicketstuff/core/wiki/GoogleCharts | https://github.com/wicketstuff/core/wiki/GoogleCharts | ||||
--------------------------------------------------------------------------- | |||||
MarkdownPapers | |||||
--------------------------------------------------------------------------- | |||||
MarkdownPapers, released under the | |||||
Apache Software License, Version 2.0. | |||||
http://markdown.tautua.org | |||||
--------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ||||
Jetty | Jetty | ||||
--------------------------------------------------------------------------- | --------------------------------------------------------------------------- | ||||
Apache License 2.0. | Apache License 2.0. | ||||
http://commons.apache.org/proper/commons-codec | http://commons.apache.org/proper/commons-codec | ||||
--------------------------------------------------------------------------- | |||||
pegdown | |||||
--------------------------------------------------------------------------- | |||||
pegdown, release under the | |||||
Apache License 2.0. | |||||
https://github.com/sirthias/pegdown | |||||
- compile 'org.apache.lucene:lucene-core:${lucene.version}' :war :fedclient | - compile 'org.apache.lucene:lucene-core:${lucene.version}' :war :fedclient | ||||
- compile 'org.apache.lucene:lucene-highlighter:${lucene.version}' :war :fedclient | - compile 'org.apache.lucene:lucene-highlighter:${lucene.version}' :war :fedclient | ||||
- compile 'org.apache.lucene:lucene-memory:${lucene.version}' :war :fedclient | - compile 'org.apache.lucene:lucene-memory:${lucene.version}' :war :fedclient | ||||
- compile 'org.tautua.markdownpapers:markdownpapers-core:1.3.2' :war | |||||
- compile 'org.pegdown:pegdown:1.4.1' :war | |||||
- compile 'org.eclipse.jgit:org.eclipse.jgit:${jgit.version}' :war :fedclient :manager :authority | - compile 'org.eclipse.jgit:org.eclipse.jgit:${jgit.version}' :war :fedclient :manager :authority | ||||
- compile 'org.eclipse.jgit:org.eclipse.jgit.http.server:${jgit.version}' :war :fedclient :manager :authority | - compile 'org.eclipse.jgit:org.eclipse.jgit.http.server:${jgit.version}' :war :fedclient :manager :authority | ||||
- compile 'org.bouncycastle:bcprov-jdk15on:${bouncycastle.version}' :war :authority | - compile 'org.bouncycastle:bcprov-jdk15on:${bouncycastle.version}' :war :authority |
</library> | </library> | ||||
</orderEntry> | </orderEntry> | ||||
<orderEntry type="module-library"> | <orderEntry type="module-library"> | ||||
<library name="markdownpapers-core-1.3.2.jar"> | |||||
<library name="pegdown-1.4.1.jar"> | |||||
<CLASSES> | <CLASSES> | ||||
<root url="jar://$MODULE_DIR$/ext/markdownpapers-core-1.3.2.jar!/" /> | |||||
<root url="jar://$MODULE_DIR$/ext/pegdown-1.4.1.jar!/" /> | |||||
</CLASSES> | </CLASSES> | ||||
<JAVADOC /> | <JAVADOC /> | ||||
<SOURCES> | <SOURCES> | ||||
<root url="jar://$MODULE_DIR$/ext/src/markdownpapers-core-1.3.2.jar!/" /> | |||||
<root url="jar://$MODULE_DIR$/ext/src/pegdown-1.4.1.jar!/" /> | |||||
</SOURCES> | |||||
</library> | |||||
</orderEntry> | |||||
<orderEntry type="module-library"> | |||||
<library name="parboiled-java-1.1.5.jar"> | |||||
<CLASSES> | |||||
<root url="jar://$MODULE_DIR$/ext/parboiled-java-1.1.5.jar!/" /> | |||||
</CLASSES> | |||||
<JAVADOC /> | |||||
<SOURCES> | |||||
<root url="jar://$MODULE_DIR$/ext/src/parboiled-java-1.1.5.jar!/" /> | |||||
</SOURCES> | |||||
</library> | |||||
</orderEntry> | |||||
<orderEntry type="module-library"> | |||||
<library name="parboiled-core-1.1.5.jar"> | |||||
<CLASSES> | |||||
<root url="jar://$MODULE_DIR$/ext/parboiled-core-1.1.5.jar!/" /> | |||||
</CLASSES> | |||||
<JAVADOC /> | |||||
<SOURCES> | |||||
<root url="jar://$MODULE_DIR$/ext/src/parboiled-core-1.1.5.jar!/" /> | |||||
</SOURCES> | |||||
</library> | |||||
</orderEntry> | |||||
<orderEntry type="module-library"> | |||||
<library name="asm-4.1.jar"> | |||||
<CLASSES> | |||||
<root url="jar://$MODULE_DIR$/ext/asm-4.1.jar!/" /> | |||||
</CLASSES> | |||||
<JAVADOC /> | |||||
<SOURCES> | |||||
<root url="jar://$MODULE_DIR$/ext/src/asm-4.1.jar!/" /> | |||||
</SOURCES> | |||||
</library> | |||||
</orderEntry> | |||||
<orderEntry type="module-library"> | |||||
<library name="asm-tree-4.1.jar"> | |||||
<CLASSES> | |||||
<root url="jar://$MODULE_DIR$/ext/asm-tree-4.1.jar!/" /> | |||||
</CLASSES> | |||||
<JAVADOC /> | |||||
<SOURCES> | |||||
<root url="jar://$MODULE_DIR$/ext/src/asm-tree-4.1.jar!/" /> | |||||
</SOURCES> | |||||
</library> | |||||
</orderEntry> | |||||
<orderEntry type="module-library"> | |||||
<library name="asm-analysis-4.1.jar"> | |||||
<CLASSES> | |||||
<root url="jar://$MODULE_DIR$/ext/asm-analysis-4.1.jar!/" /> | |||||
</CLASSES> | |||||
<JAVADOC /> | |||||
<SOURCES> | |||||
<root url="jar://$MODULE_DIR$/ext/src/asm-analysis-4.1.jar!/" /> | |||||
</SOURCES> | |||||
</library> | |||||
</orderEntry> | |||||
<orderEntry type="module-library"> | |||||
<library name="asm-util-4.1.jar"> | |||||
<CLASSES> | |||||
<root url="jar://$MODULE_DIR$/ext/asm-util-4.1.jar!/" /> | |||||
</CLASSES> | |||||
<JAVADOC /> | |||||
<SOURCES> | |||||
<root url="jar://$MODULE_DIR$/ext/src/asm-util-4.1.jar!/" /> | |||||
</SOURCES> | </SOURCES> | ||||
</library> | </library> | ||||
</orderEntry> | </orderEntry> |
dependencyChanges: | dependencyChanges: | ||||
- updated to Jetty 7.6.13 | - updated to Jetty 7.6.13 | ||||
- updated to JGit 3.1.0 | - updated to JGit 3.1.0 | ||||
- replaced MarkdownPapers with pegdown 1.4.1 | |||||
settings: | settings: | ||||
- { name: 'git.createRepositoriesShared', defaultValue: 'false' } | - { name: 'git.createRepositoriesShared', defaultValue: 'false' } | ||||
- { name: 'git.allowAnonymousPushes', defaultValue: 'false' } | - { name: 'git.allowAnonymousPushes', defaultValue: 'false' } |
import java.nio.charset.Charset; | import java.nio.charset.Charset; | ||||
import java.security.Principal; | import java.security.Principal; | ||||
import java.text.MessageFormat; | import java.text.MessageFormat; | ||||
import java.text.ParseException; | |||||
import java.text.SimpleDateFormat; | import java.text.SimpleDateFormat; | ||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.Arrays; | import java.util.Arrays; | ||||
try { | try { | ||||
String prepared = processCommitMessageRegex(repository.name, text); | String prepared = processCommitMessageRegex(repository.name, text); | ||||
return MarkdownUtils.transformMarkdown(prepared); | return MarkdownUtils.transformMarkdown(prepared); | ||||
} catch (ParseException e) { | |||||
} catch (Exception e) { | |||||
logger.error("Failed to render commit message as markdown", e); | logger.error("Failed to render commit message as markdown", e); | ||||
} | } | ||||
break; | break; |
*/ | */ | ||||
package com.gitblit.utils; | package com.gitblit.utils; | ||||
import static org.pegdown.Extensions.ALL; | |||||
import java.io.IOException; | import java.io.IOException; | ||||
import java.io.Reader; | import java.io.Reader; | ||||
import java.io.StringReader; | |||||
import java.io.StringWriter; | import java.io.StringWriter; | ||||
import org.slf4j.LoggerFactory; | |||||
import org.tautua.markdownpapers.Markdown; | |||||
import org.tautua.markdownpapers.parser.ParseException; | |||||
import org.apache.commons.io.IOUtils; | |||||
import org.pegdown.PegDownProcessor; | |||||
/** | /** | ||||
* Utility methods for transforming raw markdown text to html. | * Utility methods for transforming raw markdown text to html. | ||||
* @return html version of markdown text | * @return html version of markdown text | ||||
* @throws java.text.ParseException | * @throws java.text.ParseException | ||||
*/ | */ | ||||
public static String transformMarkdown(String markdown) throws java.text.ParseException { | |||||
try { | |||||
StringReader reader = new StringReader(markdown); | |||||
String html = transformMarkdown(reader); | |||||
reader.close(); | |||||
return html; | |||||
} catch (IllegalArgumentException e) { | |||||
throw new java.text.ParseException(e.getMessage(), 0); | |||||
} catch (NullPointerException p) { | |||||
throw new java.text.ParseException("Markdown string is null!", 0); | |||||
} | |||||
public static String transformMarkdown(String markdown) { | |||||
PegDownProcessor pd = new PegDownProcessor(ALL); | |||||
String html = pd.markdownToHtml(markdown); | |||||
return html; | |||||
} | } | ||||
/** | /** | ||||
* @return html version of the markdown text | * @return html version of the markdown text | ||||
* @throws java.text.ParseException | * @throws java.text.ParseException | ||||
*/ | */ | ||||
public static String transformMarkdown(Reader markdownReader) throws java.text.ParseException { | |||||
public static String transformMarkdown(Reader markdownReader) throws IOException { | |||||
// Read raw markdown content and transform it to html | // Read raw markdown content and transform it to html | ||||
StringWriter writer = new StringWriter(); | StringWriter writer = new StringWriter(); | ||||
try { | try { | ||||
Markdown md = new Markdown(); | |||||
md.transform(markdownReader, writer); | |||||
return writer.toString().trim(); | |||||
} catch (StringIndexOutOfBoundsException e) { | |||||
LoggerFactory.getLogger(MarkdownUtils.class).error("MarkdownPapers failed to parse Markdown!", e); | |||||
throw new java.text.ParseException(e.getMessage(), 0); | |||||
} catch (ParseException p) { | |||||
LoggerFactory.getLogger(MarkdownUtils.class).error("MarkdownPapers failed to parse Markdown!", p); | |||||
throw new java.text.ParseException(p.getMessage(), 0); | |||||
} catch (Exception e) { | |||||
LoggerFactory.getLogger(MarkdownUtils.class).error("MarkdownPapers failed to parse Markdown!", e); | |||||
throw new java.text.ParseException(e.getMessage(), 0); | |||||
IOUtils.copy(markdownReader, writer); | |||||
String markdown = writer.toString(); | |||||
return transformMarkdown(markdown); | |||||
} finally { | } finally { | ||||
try { | try { | ||||
writer.close(); | writer.close(); |
package com.gitblit.wicket.pages; | package com.gitblit.wicket.pages; | ||||
import java.text.MessageFormat; | import java.text.MessageFormat; | ||||
import java.text.ParseException; | |||||
import org.apache.wicket.PageParameters; | import org.apache.wicket.PageParameters; | ||||
import org.apache.wicket.markup.html.basic.Label; | import org.apache.wicket.markup.html.basic.Label; | ||||
String htmlText; | String htmlText; | ||||
try { | try { | ||||
htmlText = MarkdownUtils.transformMarkdown(markdownText); | htmlText = MarkdownUtils.transformMarkdown(markdownText); | ||||
} catch (ParseException p) { | |||||
} catch (Exception e) { | |||||
logger.error("failed to transform markdown", e); | |||||
markdownText = MessageFormat.format("<div class=\"alert alert-error\"><strong>{0}:</strong> {1}</div>{2}", getString("gb.error"), getString("gb.markdownFailure"), markdownText); | markdownText = MessageFormat.format("<div class=\"alert alert-error\"><strong>{0}:</strong> {1}</div>{2}", getString("gb.error"), getString("gb.markdownFailure"), markdownText); | ||||
htmlText = StringUtils.breakLinesForHtml(markdownText); | htmlText = StringUtils.breakLinesForHtml(markdownText); | ||||
} | } |
public abstract class RepositoryPage extends RootPage { | public abstract class RepositoryPage extends RootPage { | ||||
private final Logger logger = LoggerFactory.getLogger(getClass()); | |||||
protected final Logger logger = LoggerFactory.getLogger(getClass()); | |||||
private final String PARAM_STAR = "star"; | private final String PARAM_STAR = "star"; | ||||
import java.awt.Color; | import java.awt.Color; | ||||
import java.awt.Dimension; | import java.awt.Dimension; | ||||
import java.text.MessageFormat; | import java.text.MessageFormat; | ||||
import java.text.ParseException; | |||||
import java.util.ArrayList; | import java.util.ArrayList; | ||||
import java.util.List; | import java.util.List; | ||||
markdownText = JGitUtils.getStringContent(r, head.getTree(), readme, encodings); | markdownText = JGitUtils.getStringContent(r, head.getTree(), readme, encodings); | ||||
htmlText = MarkdownUtils.transformMarkdown(markdownText); | htmlText = MarkdownUtils.transformMarkdown(markdownText); | ||||
} | } | ||||
} catch (ParseException p) { | |||||
} catch (Exception e) { | |||||
logger.error("failed to transform markdown", e); | |||||
markdownText = MessageFormat.format("<div class=\"alert alert-error\"><strong>{0}:</strong> {1}</div>{2}", getString("gb.error"), getString("gb.markdownFailure"), markdownText); | markdownText = MessageFormat.format("<div class=\"alert alert-error\"><strong>{0}:</strong> {1}</div>{2}", getString("gb.error"), getString("gb.markdownFailure"), markdownText); | ||||
htmlText = StringUtils.breakLinesForHtml(markdownText); | htmlText = StringUtils.breakLinesForHtml(markdownText); | ||||
} | } |
- [JGit][jgit] (EDL 1.0) | - [JGit][jgit] (EDL 1.0) | ||||
- [Wicket](http://wicket.apache.org) (Apache 2.0) | - [Wicket](http://wicket.apache.org) (Apache 2.0) | ||||
- [WicketStuff GoogleCharts](https://github.com/wicketstuff/core/wiki/GoogleCharts) (Apache 2.0) | - [WicketStuff GoogleCharts](https://github.com/wicketstuff/core/wiki/GoogleCharts) (Apache 2.0) | ||||
- [MarkdownPapers](http://markdown.tautua.org) (Apache 2.0) | |||||
- [Jetty](http://eclipse.org/jetty) (Apache 2.0, EPL 1.0) | - [Jetty](http://eclipse.org/jetty) (Apache 2.0, EPL 1.0) | ||||
- [SLF4J](http://www.slf4j.org) (MIT/X11) | - [SLF4J](http://www.slf4j.org) (MIT/X11) | ||||
- [Log4j](http://logging.apache.org/log4j) (Apache 2.0) | - [Log4j](http://logging.apache.org/log4j) (Apache 2.0) | ||||
- [Guava](https://code.google.com/p/guava-libraries) (Apache 2.0) | - [Guava](https://code.google.com/p/guava-libraries) (Apache 2.0) | ||||
- [libpam4j](https://github.com/kohsuke/libpam4j) (MIT) | - [libpam4j](https://github.com/kohsuke/libpam4j) (MIT) | ||||
- [commons-codec](http://commons.apache.org/proper/commons-codec) (Apache 2.0) | - [commons-codec](http://commons.apache.org/proper/commons-codec) (Apache 2.0) | ||||
- [pegdown](https://github.com/sirthias/pegdown) (Apache 2.0) | |||||
### Other Build Dependencies | ### Other Build Dependencies | ||||
- [Fancybox image viewer](http://fancybox.net) (MIT and GPL dual-licensed) | - [Fancybox image viewer](http://fancybox.net) (MIT and GPL dual-licensed) |
package com.gitblit.tests; | package com.gitblit.tests; | ||||
import static org.junit.Assert.assertEquals; | import static org.junit.Assert.assertEquals; | ||||
import static org.junit.Assert.assertTrue; | |||||
import java.text.ParseException; | |||||
import org.junit.Test; | import org.junit.Test; | ||||
@Test | @Test | ||||
public void testMarkdown() throws Exception { | public void testMarkdown() throws Exception { | ||||
assertEquals("<h1> H1</h1>", MarkdownUtils.transformMarkdown("# H1")); | |||||
assertEquals("<h2> H2</h2>", MarkdownUtils.transformMarkdown("## H2")); | |||||
assertEquals("<h1>H1</h1>", MarkdownUtils.transformMarkdown("# H1")); | |||||
assertEquals("<h2>H2</h2>", MarkdownUtils.transformMarkdown("## H2")); | |||||
assertEquals("<p><strong>THIS</strong> is a test</p>", | assertEquals("<p><strong>THIS</strong> is a test</p>", | ||||
MarkdownUtils.transformMarkdown("**THIS** is a test")); | MarkdownUtils.transformMarkdown("**THIS** is a test")); | ||||
assertEquals("<p>** THIS ** is a test</p>", | assertEquals("<p>** THIS ** is a test</p>", | ||||
MarkdownUtils.transformMarkdown("<table><tr><td>test</td></tr></table>")); | MarkdownUtils.transformMarkdown("<table><tr><td>test</td></tr></table>")); | ||||
assertEquals("<table><tr><td><test></td></tr></table>", | assertEquals("<table><tr><td><test></td></tr></table>", | ||||
MarkdownUtils.transformMarkdown("<table><tr><td><test></td></tr></table>")); | MarkdownUtils.transformMarkdown("<table><tr><td><test></td></tr></table>")); | ||||
try { | |||||
MarkdownUtils.transformMarkdown((String) null); | |||||
assertTrue(false); | |||||
} catch (ParseException p) { | |||||
assertTrue(p != null); | |||||
} | |||||
} | } | ||||
} | } |