From e131717b489b5527e2b9853eaae8ad71ca6ea748 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Thu, 14 Nov 2013 18:16:57 -0500 Subject: [PATCH] Display common repository documents as tabs on the docs page --- src/main/java/com/gitblit/wicket/MarkupProcessor.java | 88 +++++++++++++++++++++++++++++++++++--------- 1 files changed, 70 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/gitblit/wicket/MarkupProcessor.java b/src/main/java/com/gitblit/wicket/MarkupProcessor.java index 4324f80..1a5f553 100644 --- a/src/main/java/com/gitblit/wicket/MarkupProcessor.java +++ b/src/main/java/com/gitblit/wicket/MarkupProcessor.java @@ -21,7 +21,10 @@ import java.net.URLEncoder; import java.text.MessageFormat; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; import java.util.List; +import java.util.Map; import org.apache.wicket.Page; import org.apache.wicket.RequestCycle; @@ -82,6 +85,21 @@ return list; } + public List<String> getAllExtensions() { + List<String> list = getMarkupExtensions(); + list.add("txt"); + list.add("TXT"); + return list; + } + + private List<String> getRoots() { + return settings.getStrings(Keys.web.documents); + } + + private String [] getEncodings() { + return settings.getStrings(Keys.web.blobEncodings).toArray(new String[0]); + } + private MarkupSyntax determineSyntax(String documentPath) { String ext = StringUtils.getFileExtension(documentPath).toLowerCase(); if (StringUtils.isEmpty(ext)) { @@ -105,33 +123,67 @@ return MarkupSyntax.PLAIN; } - public MarkupDocument parseReadme(Repository r, String repositoryName, String commitId) { - String readme = null; - RevCommit commit = JGitUtils.getCommit(r, commitId); - List<PathModel> paths = JGitUtils.getFilesInPath(r, null, commit); + public boolean hasRootDocs(Repository r) { + List<String> roots = getRoots(); + List<String> extensions = getAllExtensions(); + List<PathModel> paths = JGitUtils.getFilesInPath(r, null, null); for (PathModel path : paths) { if (!path.isTree()) { - String name = path.name.toLowerCase(); - if (name.equals("readme") || name.equals("readme.txt")) { - readme = path.name; - break; - } else if (name.startsWith("readme.")) { - String ext = StringUtils.getFileExtension(name).toLowerCase(); - if (getMarkupExtensions().contains(ext)) { - readme = path.name; - break; + String ext = StringUtils.getFileExtension(path.name).toLowerCase(); + String name = StringUtils.stripFileExtension(path.name).toLowerCase(); + + if (roots.contains(name)) { + if (StringUtils.isEmpty(ext) || extensions.contains(ext)) { + return true; } } } } + return false; + } - if (!StringUtils.isEmpty(readme)) { - String [] encodings = settings.getStrings(Keys.web.blobEncodings).toArray(new String[0]); - String markup = JGitUtils.getStringContent(r, commit.getTree(), readme, encodings); - return parse(repositoryName, commitId, readme, markup); + public List<MarkupDocument> getRootDocs(Repository r, String repositoryName, String commitId) { + List<String> roots = getRoots(); + List<MarkupDocument> list = getDocs(r, repositoryName, commitId, roots); + return list; + } + + public MarkupDocument getReadme(Repository r, String repositoryName, String commitId) { + List<MarkupDocument> list = getDocs(r, repositoryName, commitId, Arrays.asList("readme")); + if (list.isEmpty()) { + return null; } + return list.get(0); + } - return null; + private List<MarkupDocument> getDocs(Repository r, String repositoryName, String commitId, List<String> names) { + List<String> extensions = getAllExtensions(); + String [] encodings = getEncodings(); + Map<String, MarkupDocument> map = new HashMap<String, MarkupDocument>(); + RevCommit commit = JGitUtils.getCommit(r, commitId); + List<PathModel> paths = JGitUtils.getFilesInPath(r, null, commit); + for (PathModel path : paths) { + if (!path.isTree()) { + String ext = StringUtils.getFileExtension(path.name).toLowerCase(); + String name = StringUtils.stripFileExtension(path.name).toLowerCase(); + + if (names.contains(name)) { + if (StringUtils.isEmpty(ext) || extensions.contains(ext)) { + String markup = JGitUtils.getStringContent(r, commit.getTree(), path.name, encodings); + MarkupDocument doc = parse(repositoryName, commitId, path.name, markup); + map.put(name, doc); + } + } + } + } + // return document list in requested order + List<MarkupDocument> list = new ArrayList<MarkupDocument>(); + for (String name : names) { + if (map.containsKey(name)) { + list.add(map.get(name)); + } + } + return list; } public MarkupDocument parse(String repositoryName, String commitId, String documentPath, String markupText) { -- Gitblit v1.9.1