From aae137d5da475ec72f271811a848d426f05c1b8e Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 25 Oct 2013 18:32:25 -0400
Subject: [PATCH] Strip leading / for absolute wiki link paths

---
 src/main/java/com/gitblit/wicket/pages/MarkdownPage.java |   36 ++++++++++++++++++++++++++++++------
 1 files changed, 30 insertions(+), 6 deletions(-)

diff --git a/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java b/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java
index 5aa8029..0034984 100644
--- a/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java
+++ b/src/main/java/com/gitblit/wicket/pages/MarkdownPage.java
@@ -16,7 +16,7 @@
 package com.gitblit.wicket.pages;
 
 import java.text.MessageFormat;
-import java.text.ParseException;
+import java.util.List;
 
 import org.apache.wicket.PageParameters;
 import org.apache.wicket.markup.html.basic.Label;
@@ -26,6 +26,7 @@
 import org.eclipse.jgit.revwalk.RevCommit;
 
 import com.gitblit.GitBlit;
+import com.gitblit.Keys;
 import com.gitblit.utils.JGitUtils;
 import com.gitblit.utils.MarkdownUtils;
 import com.gitblit.utils.StringUtils;
@@ -39,11 +40,32 @@
 	public MarkdownPage(PageParameters params) {
 		super(params);
 
-		final String markdownPath = WicketUtils.getPath(params);
+		final String path = WicketUtils.getPath(params).replace("%2f", "/").replace("%2F", "/");
 
 		Repository r = getRepository();
 		RevCommit commit = JGitUtils.getCommit(r, objectId);
 		String [] encodings = GitBlit.getEncodings();
+		List<String> extensions = GitBlit.getStrings(Keys.web.markdownExtensions);
+
+		// Read raw markdown content and transform it to html
+		String markdownPath = path;
+		String markdownText = JGitUtils.getStringContent(r, commit.getTree(), path, encodings);
+		if (StringUtils.isEmpty(markdownText)) {
+			String name = path;
+			if (path.indexOf('.') > -1) {
+				name = path.substring(0, path.lastIndexOf('.'));
+			}
+
+			for (String ext : extensions) {
+				String checkName = name + "." + ext;
+				markdownText = JGitUtils.getStringContent(r, commit.getTree(), checkName, encodings);
+				if (!StringUtils.isEmpty(markdownText)) {
+					// found it
+					markdownPath = path;
+					break;
+				}
+			}
+		}
 
 		// markdown page links
 		add(new BookmarkablePageLink<Void>("blameLink", BlamePage.class,
@@ -55,12 +77,14 @@
 		add(new BookmarkablePageLink<Void>("headLink", MarkdownPage.class,
 				WicketUtils.newPathParameter(repositoryName, Constants.HEAD, markdownPath)));
 
-		// Read raw markdown content and transform it to html
-		String markdownText = JGitUtils.getStringContent(r, commit.getTree(), markdownPath, encodings);
 		String htmlText;
 		try {
-			htmlText = MarkdownUtils.transformMarkdown(markdownText);
-		} catch (ParseException p) {
+			htmlText = MarkdownUtils.transformMarkdown(markdownText, getMarkdownLinkRenderer());
+		} catch (Exception e) {
+			logger.error("failed to transform markdown", e);
+			if (markdownText == null) {
+				markdownText = String.format("Markdown document <b>%1$s</b> not found in <em>%2$s</em>", markdownPath, repositoryName);
+			}
 			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);
 		}

--
Gitblit v1.9.1