From 9effe1630d97039b3e01cd9b58ed07e75be1d63c Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Mon, 25 Feb 2013 08:40:30 -0500
Subject: [PATCH] Merge pull request #75 from thefake/master

---
 src/com/gitblit/PagesServlet.java |   48 +++++++++++++++++++++++++++++++++++-------------
 1 files changed, 35 insertions(+), 13 deletions(-)

diff --git a/src/com/gitblit/PagesServlet.java b/src/com/gitblit/PagesServlet.java
index 58d67b0..91f25b7 100644
--- a/src/com/gitblit/PagesServlet.java
+++ b/src/com/gitblit/PagesServlet.java
@@ -141,13 +141,15 @@
 			}
 			response.setDateHeader("Last-Modified", JGitUtils.getCommitDate(commit).getTime());
 
+			String [] encodings = GitBlit.getEncodings();
+
 			RevTree tree = commit.getTree();
 			byte[] content = null;
 			if (StringUtils.isEmpty(resource)) {
 				// find resource
 				String[] files = { "index.html", "index.htm", "index.mkd" };
 				for (String file : files) {
-					content = JGitUtils.getStringContent(r, tree, file)
+					content = JGitUtils.getStringContent(r, tree, file, encodings)
 							.getBytes(Constants.ENCODING);
 					if (content != null) {
 						resource = file;
@@ -159,27 +161,47 @@
 				}
 			} else {
 				// specific resource
-				String contentType = context.getMimeType(resource);
-				if (contentType.startsWith("text")) {
-					content = JGitUtils.getStringContent(r, tree, resource).getBytes(
-							Constants.ENCODING);
-				} else {
-					content = JGitUtils.getByteContent(r, tree, resource);
+				try {
+					String contentType = context.getMimeType(resource);
+					if (contentType == null) {
+						contentType = "text/plain";
+					}
+					if (contentType.startsWith("text")) {
+						content = JGitUtils.getStringContent(r, tree, resource, encodings).getBytes(
+								Constants.ENCODING);
+					} else {
+						content = JGitUtils.getByteContent(r, tree, resource, false);
+					}
+					response.setContentType(contentType);
+				} catch (Exception e) {
 				}
-				response.setContentType(contentType);
 			}
 
 			// no content, try custom 404 page
 			if (ArrayUtils.isEmpty(content)) {
-				content = JGitUtils.getStringContent(r, tree, "404.html").getBytes(
-						Constants.ENCODING);
+				String custom404 = JGitUtils.getStringContent(r, tree, "404.html", encodings);
+				if (!StringUtils.isEmpty(custom404)) {
+					content = custom404.getBytes(Constants.ENCODING);
+				}
+
 				// still no content
 				if (ArrayUtils.isEmpty(content)) {
-					content = (MessageFormat.format(
+					String str = MessageFormat.format(
 							"# Error\nSorry, the requested resource **{0}** was not found.",
-							resource)).getBytes(Constants.ENCODING);
-					resource = "404.mkd";
+							resource);
+					content = MarkdownUtils.transformMarkdown(str).getBytes(Constants.ENCODING);
 				}
+
+				try {
+					// output the content
+					logger.warn("Pages 404: " + resource);
+					response.setStatus(HttpServletResponse.SC_NOT_FOUND);
+					response.getOutputStream().write(content);
+					response.flushBuffer();
+				} catch (Throwable t) {
+					logger.error("Failed to write page to client", t);
+				}
+				return;
 			}
 
 			// check to see if we should transform markdown files

--
Gitblit v1.9.1