James Moger
2013-11-13 c44dd099a432094a12131cf60dfc8a19f5aa8101
src/main/java/com/gitblit/PagesServlet.java
@@ -18,6 +18,8 @@
import java.io.IOException;
import java.text.MessageFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
@@ -36,12 +38,14 @@
import com.gitblit.utils.JGitUtils;
import com.gitblit.utils.MarkdownUtils;
import com.gitblit.utils.StringUtils;
import com.gitblit.wicket.MarkupProcessor;
import com.gitblit.wicket.MarkupProcessor.MarkupDocument;
/**
 * Serves the content of a gh-pages branch.
 *
 *
 * @author James Moger
 *
 *
 */
public class PagesServlet extends HttpServlet {
@@ -55,7 +59,7 @@
   /**
    * Returns an url to this servlet for the specified parameters.
    *
    *
    * @param baseURL
    * @param repository
    * @param path
@@ -71,7 +75,7 @@
   /**
    * Retrieves the specified resource from the gh-pages branch of the
    * repository.
    *
    *
    * @param request
    * @param response
    * @throws javax.servlet.ServletException
@@ -139,18 +143,24 @@
            r.close();
            return;
         }
         response.setDateHeader("Last-Modified", JGitUtils.getCommitDate(commit).getTime());
         MarkupProcessor processor = new MarkupProcessor(GitBlit.getSettings());
         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, encodings)
                     .getBytes(Constants.ENCODING);
            List<String> extensions = new ArrayList<String>(processor.getMarkupExtensions());
            extensions.add("html");
            extensions.add("htm");
            for (String ext : extensions) {
               String file = "index." + ext;
               String stringContent = JGitUtils.getStringContent(r, tree, file, encodings);
               if (stringContent == null) {
                  continue;
               }
               content = stringContent.getBytes(Constants.ENCODING);
               if (content != null) {
                  resource = file;
                  // assume text/html unless the servlet container
@@ -204,17 +214,19 @@
            return;
         }
         // check to see if we should transform markdown files
         for (String ext : GitBlit.getStrings(Keys.web.markdownExtensions)) {
            if (resource.endsWith(ext)) {
               String mkd = new String(content, Constants.ENCODING);
               content = MarkdownUtils.transformMarkdown(mkd).getBytes(Constants.ENCODING);
               break;
            }
         // check to see if we should transform markup files
         String ext = StringUtils.getFileExtension(resource);
         if (processor.getMarkupExtensions().contains(ext)) {
            String markup = new String(content, Constants.ENCODING);
            MarkupDocument markupDoc = processor.parse(repository, commit.getName(), resource, markup);
            content = markupDoc.html.getBytes("UTF-8");
            response.setContentType("text/html; charset=" + Constants.ENCODING);
         }
         try {
            // output the content
            response.setHeader("Cache-Control", "public, max-age=3600, must-revalidate");
            response.setDateHeader("Last-Modified", JGitUtils.getCommitDate(commit).getTime());
            response.getOutputStream().write(content);
            response.flushBuffer();
         } catch (Throwable t) {