From a502d96a860456ec5e8c96761db70f7cabb74751 Mon Sep 17 00:00:00 2001 From: Paul Martin <paul@paulsputer.com> Date: Sat, 30 Apr 2016 04:19:14 -0400 Subject: [PATCH] Merge pull request #1073 from gitblit/1062-DocEditorUpdates --- src/main/java/com/gitblit/servlet/SyndicationServlet.java | 162 +++++++++++++++++++++++++++++++++++------------------- 1 files changed, 105 insertions(+), 57 deletions(-) diff --git a/src/main/java/com/gitblit/servlet/SyndicationServlet.java b/src/main/java/com/gitblit/servlet/SyndicationServlet.java index 739ee2d..39dbf2e 100644 --- a/src/main/java/com/gitblit/servlet/SyndicationServlet.java +++ b/src/main/java/com/gitblit/servlet/SyndicationServlet.java @@ -22,8 +22,6 @@ import java.util.List; import java.util.Map; -import javax.inject.Inject; -import javax.inject.Singleton; import javax.servlet.http.HttpServlet; import org.eclipse.jgit.lib.ObjectId; @@ -37,18 +35,19 @@ import com.gitblit.Keys; import com.gitblit.manager.IProjectManager; import com.gitblit.manager.IRepositoryManager; -import com.gitblit.manager.IRuntimeManager; import com.gitblit.models.FeedEntryModel; import com.gitblit.models.ProjectModel; import com.gitblit.models.RefModel; import com.gitblit.models.RepositoryModel; import com.gitblit.models.UserModel; import com.gitblit.servlet.AuthenticationFilter.AuthenticatedRequest; +import com.gitblit.utils.BugtraqProcessor; import com.gitblit.utils.HttpUtils; import com.gitblit.utils.JGitUtils; -import com.gitblit.utils.MessageProcessor; import com.gitblit.utils.StringUtils; import com.gitblit.utils.SyndicationUtils; +import com.google.inject.Inject; +import com.google.inject.Singleton; /** * SyndicationServlet generates RSS 2.0 feeds and feed links. @@ -65,20 +64,19 @@ private transient Logger logger = LoggerFactory.getLogger(SyndicationServlet.class); - private final IStoredSettings settings; + private IStoredSettings settings; - private final IRepositoryManager repositoryManager; + private IRepositoryManager repositoryManager; - private final IProjectManager projectManager; + private IProjectManager projectManager; @Inject public SyndicationServlet( - IRuntimeManager runtimeManager, + IStoredSettings settings, IRepositoryManager repositoryManager, IProjectManager projectManager) { - super(); - this.settings = runtimeManager.getSettings(); + this.settings = settings; this.repositoryManager = repositoryManager; this.projectManager = projectManager; } @@ -156,7 +154,7 @@ String servletUrl = request.getContextPath() + request.getServletPath(); String url = request.getRequestURI().substring(servletUrl.length()); - if (url.charAt(0) == '/' && url.length() > 1) { + if (url.length() > 1 && url.charAt(0) == '/') { url = url.substring(1); } String repositoryName = url; @@ -171,6 +169,15 @@ searchType = type; } } + + Constants.FeedObjectType objectType = Constants.FeedObjectType.COMMIT; + if (!StringUtils.isEmpty(request.getParameter("ot"))) { + Constants.FeedObjectType type = Constants.FeedObjectType.forName(request.getParameter("ot")); + if (type != null) { + objectType = type; + } + } + int length = settings.getInteger(Keys.web.syndicationEntries, 25); if (StringUtils.isEmpty(objectId)) { objectId = org.eclipse.jgit.lib.Constants.HEAD; @@ -192,7 +199,7 @@ response.setContentType("application/rss+xml; charset=UTF-8"); boolean isProjectFeed = false; - String feedName = null; + String feedName = "Gitblit"; String feedTitle = null; String feedDescription = null; @@ -222,15 +229,11 @@ boolean mountParameters = settings.getBoolean(Keys.web.mountParameters, true); - String urlPattern; - if (mountParameters) { - // mounted parameters - urlPattern = "{0}/commit/{1}/{2}"; - } else { - // parameterized parameters - urlPattern = "{0}/commit/?r={1}&h={2}"; + + String gitblitUrl = settings.getString(Keys.web.canonicalUrl, null); + if (StringUtils.isEmpty(gitblitUrl)) { + gitblitUrl = HttpUtils.getGitblitURL(request); } - String gitblitUrl = HttpUtils.getGitblitURL(request); char fsc = settings.getChar(Keys.web.forwardSlashCharacter, '/'); List<FeedEntryModel> entries = new ArrayList<FeedEntryModel>(); @@ -240,7 +243,7 @@ RepositoryModel model = repositoryManager.getRepositoryModel(name); if (repository == null) { - if (model.isCollectingGarbage) { + if (model != null && model.isCollectingGarbage) { logger.warn(MessageFormat.format("Temporarily excluding {0} from feed, busy collecting garbage", name)); } continue; @@ -252,47 +255,92 @@ feedDescription = model.description; } - List<RevCommit> commits; - if (StringUtils.isEmpty(searchString)) { - // standard log/history lookup - commits = JGitUtils.getRevLog(repository, objectId, offset, length); + if (objectType == Constants.FeedObjectType.TAG) { + + String urlPattern; + if (mountParameters) { + // mounted parameters + urlPattern = "{0}/tag/{1}/{2}"; + } else { + // parameterized parameters + urlPattern = "{0}/tag/?r={1}&h={2}"; + } + + List<RefModel> tags = JGitUtils.getTags(repository, false, length, offset); + + for (RefModel tag : tags) { + FeedEntryModel entry = new FeedEntryModel(); + entry.title = tag.getName(); + entry.author = tag.getAuthorIdent().getName(); + entry.link = MessageFormat.format(urlPattern, gitblitUrl, + StringUtils.encodeURL(model.name.replace('/', fsc)), tag.getObjectId().getName()); + entry.published = tag.getDate(); + entry.contentType = "text/html"; + entry.content = tag.getFullMessage(); + entry.repository = model.name; + entry.branch = objectId; + + entry.tags = new ArrayList<String>(); + + // add tag id and referenced commit id + entry.tags.add("tag:" + tag.getObjectId().getName()); + entry.tags.add("commit:" + tag.getReferencedObjectId().getName()); + + entries.add(entry); + } } else { - // repository search - commits = JGitUtils.searchRevlogs(repository, objectId, searchString, searchType, - offset, length); - } - Map<ObjectId, List<RefModel>> allRefs = JGitUtils.getAllRefs(repository, model.showRemoteBranches); - MessageProcessor processor = new MessageProcessor(settings); - // convert RevCommit to SyndicatedEntryModel - for (RevCommit commit : commits) { - FeedEntryModel entry = new FeedEntryModel(); - entry.title = commit.getShortMessage(); - entry.author = commit.getAuthorIdent().getName(); - entry.link = MessageFormat.format(urlPattern, gitblitUrl, - StringUtils.encodeURL(model.name.replace('/', fsc)), commit.getName()); - entry.published = commit.getCommitterIdent().getWhen(); - entry.contentType = "text/html"; - String message = processor.processCommitMessage(model, commit.getFullMessage()); - entry.content = message; - entry.repository = model.name; - entry.branch = objectId; - entry.tags = new ArrayList<String>(); - - // add commit id and parent commit ids - entry.tags.add("commit:" + commit.getName()); - for (RevCommit parent : commit.getParents()) { - entry.tags.add("parent:" + parent.getName()); + String urlPattern; + if (mountParameters) { + // mounted parameters + urlPattern = "{0}/commit/{1}/{2}"; + } else { + // parameterized parameters + urlPattern = "{0}/commit/?r={1}&h={2}"; } - // add refs to tabs list - List<RefModel> refs = allRefs.get(commit.getId()); - if (refs != null && refs.size() > 0) { - for (RefModel ref : refs) { - entry.tags.add("ref:" + ref.getName()); + List<RevCommit> commits; + if (StringUtils.isEmpty(searchString)) { + // standard log/history lookup + commits = JGitUtils.getRevLog(repository, objectId, offset, length); + } else { + // repository search + commits = JGitUtils.searchRevlogs(repository, objectId, searchString, searchType, + offset, length); + } + Map<ObjectId, List<RefModel>> allRefs = JGitUtils.getAllRefs(repository, model.showRemoteBranches); + BugtraqProcessor processor = new BugtraqProcessor(settings); + + // convert RevCommit to SyndicatedEntryModel + for (RevCommit commit : commits) { + FeedEntryModel entry = new FeedEntryModel(); + entry.title = commit.getShortMessage(); + entry.author = commit.getAuthorIdent().getName(); + entry.link = MessageFormat.format(urlPattern, gitblitUrl, + StringUtils.encodeURL(model.name.replace('/', fsc)), commit.getName()); + entry.published = commit.getCommitterIdent().getWhen(); + entry.contentType = "text/html"; + String message = processor.processCommitMessage(repository, model, commit.getFullMessage()); + entry.content = message; + entry.repository = model.name; + entry.branch = objectId; + entry.tags = new ArrayList<String>(); + + // add commit id and parent commit ids + entry.tags.add("commit:" + commit.getName()); + for (RevCommit parent : commit.getParents()) { + entry.tags.add("parent:" + parent.getName()); } + + // add refs to tabs list + List<RefModel> refs = allRefs.get(commit.getId()); + if (refs != null && refs.size() > 0) { + for (RefModel ref : refs) { + entry.tags.add("ref:" + ref.getName()); + } + } + entries.add(entry); } - entries.add(entry); } } @@ -320,7 +368,7 @@ if (mountParameters) { // mounted url feedLink = MessageFormat.format("{0}/summary/{1}", gitblitUrl, - StringUtils.encodeURL(feedName)); + StringUtils.encodeURL(feedName.replace('/', fsc))); } else { // parameterized url feedLink = MessageFormat.format("{0}/summary/?r={1}", gitblitUrl, -- Gitblit v1.9.1