From f602a2f552e1389ee465307723b492b1af378fd5 Mon Sep 17 00:00:00 2001 From: James Moger <james.moger@gitblit.com> Date: Sat, 16 Apr 2011 16:28:19 -0400 Subject: [PATCH] Working history feature. Tweak to paging. --- src/com/gitblit/wicket/pages/HistoryPage.html | 28 ++++ .classpath | 4 src/com/gitblit/wicket/pages/TreePage.java | 16 +- src/com/gitblit/wicket/pages/LogPage.java | 13 +- src/com/gitblit/wicket/GitBlitWebApp.properties | 4 src/com/gitblit/wicket/WicketUtils.java | 7 + src/com/gitblit/wicket/pages/CommitPage.java | 2 src/com/gitblit/wicket/panels/HistoryPanel.java | 130 +++++++++++++++++++++ src/com/gitblit/wicket/panels/LogPanel.java | 10 + src/com/gitblit/wicket/pages/CommitDiffPage.java | 2 src/com/gitblit/wicket/pages/HistoryPage.java | 38 ++++++ src/com/gitblit/wicket/panels/HistoryPanel.html | 35 +++++ src/com/gitblit/wicket/GitBlitWebApp.java | 2 src/com/gitblit/utils/JGitUtils.java | 11 + 14 files changed, 283 insertions(+), 19 deletions(-) diff --git a/.classpath b/.classpath index 4f9e926..f4a6cb6 100644 --- a/.classpath +++ b/.classpath @@ -3,8 +3,6 @@ <classpathentry kind="src" path="src"/> <classpathentry kind="src" path="contrib"/> <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/> - <classpathentry kind="lib" path="lib/jgit-0.11.3.jar" sourcepath="/org.eclipse.jgit"/> - <classpathentry kind="lib" path="lib/jgit-http-0.11.3.jar" sourcepath="/org.eclipse.jgit.http.server"/> <classpathentry kind="lib" path="ext/log4j-1.2.16.jar"/> <classpathentry kind="lib" path="ext/servlet-api-2.5.jar"/> <classpathentry kind="lib" path="ext/slf4j-api-1.6.1.jar"/> @@ -15,5 +13,7 @@ <classpathentry kind="lib" path="ext/wicket-1.4.17.jar"/> <classpathentry kind="lib" path="ext/wicket-auth-roles-1.4.17.jar"/> <classpathentry kind="lib" path="ext/wicket-extensions-1.4.17.jar"/> + <classpathentry kind="lib" path="lib/jgit-0.11.3.jar"/> + <classpathentry kind="lib" path="lib/jgit-http-0.11.3.jar"/> <classpathentry kind="output" path="bin"/> </classpath> diff --git a/src/com/gitblit/utils/JGitUtils.java b/src/com/gitblit/utils/JGitUtils.java index fa31391..7128f72 100644 --- a/src/com/gitblit/utils/JGitUtils.java +++ b/src/com/gitblit/utils/JGitUtils.java @@ -35,6 +35,7 @@ import org.eclipse.jgit.revwalk.RevTree; import org.eclipse.jgit.revwalk.RevWalk; import org.eclipse.jgit.treewalk.TreeWalk; +import org.eclipse.jgit.treewalk.filter.AndTreeFilter; import org.eclipse.jgit.treewalk.filter.PathFilter; import org.eclipse.jgit.treewalk.filter.PathFilterGroup; import org.eclipse.jgit.treewalk.filter.TreeFilter; @@ -436,6 +437,10 @@ } public static List<RevCommit> getRevLog(Repository r, String objectId, int offset, int maxCount) { + return getRevLog(r, objectId, null, offset, maxCount); + } + + public static List<RevCommit> getRevLog(Repository r, String objectId, String path, int offset, int maxCount) { List<RevCommit> list = new ArrayList<RevCommit>(); try { if (objectId == null || objectId.trim().length() == 0) { @@ -444,6 +449,12 @@ RevWalk walk = new RevWalk(r); ObjectId object = r.resolve(objectId); walk.markStart(walk.parseCommit(object)); + if (!StringUtils.isEmpty(path)) { + TreeFilter filter = AndTreeFilter.create(PathFilterGroup + .createFromStrings(Collections.singleton(path)), + TreeFilter.ANY_DIFF); + walk.setTreeFilter(filter); + } Iterable<RevCommit> revlog = walk; if (offset > 0) { int count = 0; diff --git a/src/com/gitblit/wicket/GitBlitWebApp.java b/src/com/gitblit/wicket/GitBlitWebApp.java index 29d6b51..28f6262 100644 --- a/src/com/gitblit/wicket/GitBlitWebApp.java +++ b/src/com/gitblit/wicket/GitBlitWebApp.java @@ -17,6 +17,7 @@ import com.gitblit.wicket.pages.BranchesPage; import com.gitblit.wicket.pages.CommitDiffPage; import com.gitblit.wicket.pages.CommitPage; +import com.gitblit.wicket.pages.HistoryPage; import com.gitblit.wicket.pages.LogPage; import com.gitblit.wicket.pages.PatchPage; import com.gitblit.wicket.pages.RawPage; @@ -60,6 +61,7 @@ mount(new MixedParamUrlCodingStrategy("/blobdiff", BlobDiffPage.class, new String[] { "r", "h", "f" })); mount(new MixedParamUrlCodingStrategy("/commitdiff", CommitDiffPage.class, new String[] { "r", "h" })); mount(new MixedParamUrlCodingStrategy("/patch", PatchPage.class, new String[] { "r", "h", "f" })); + mount(new MixedParamUrlCodingStrategy("/history", HistoryPage.class, new String[] { "r", "h", "f" })); // setup ticgit urls mount(new MixedParamUrlCodingStrategy("/ticgit", TicGitPage.class, new String[] { "r" })); diff --git a/src/com/gitblit/wicket/GitBlitWebApp.properties b/src/com/gitblit/wicket/GitBlitWebApp.properties index a5583c7..033742e 100644 --- a/src/com/gitblit/wicket/GitBlitWebApp.properties +++ b/src/com/gitblit/wicket/GitBlitWebApp.properties @@ -45,4 +45,6 @@ gb.logout = Logout gb.username = Username gb.password = Password -gb.tagger = tagger \ No newline at end of file +gb.tagger = tagger +gb.moreHistory = more history... +gb.difftocurrent = diff to current \ No newline at end of file diff --git a/src/com/gitblit/wicket/WicketUtils.java b/src/com/gitblit/wicket/WicketUtils.java index 3288498..3bc55f1 100644 --- a/src/com/gitblit/wicket/WicketUtils.java +++ b/src/com/gitblit/wicket/WicketUtils.java @@ -80,6 +80,13 @@ } return new PageParameters("r=" + repositoryName + ",h=" + objectId + ",page=" + pageNumber); } + + public static PageParameters newHistoryPageParameter(String repositoryName, String objectId, String path, int pageNumber) { + if (pageNumber <= 1) { + return newObjectParameter(repositoryName, objectId); + } + return new PageParameters("r=" + repositoryName + ",h=" + objectId + ",f=" + path + ",page=" + pageNumber); + } public static String getRepositoryName(PageParameters params) { return params.getString("r", ""); diff --git a/src/com/gitblit/wicket/pages/CommitDiffPage.java b/src/com/gitblit/wicket/pages/CommitDiffPage.java index 7218cf8..87e8110 100644 --- a/src/com/gitblit/wicket/pages/CommitDiffPage.java +++ b/src/com/gitblit/wicket/pages/CommitDiffPage.java @@ -63,7 +63,7 @@ item.add(new BookmarkablePageLink<Void>("patch", PatchPage.class, newPathParameter(entry.path))); item.add(new BookmarkablePageLink<Void>("view", BlobPage.class, newPathParameter(entry.path))); item.add(new BookmarkablePageLink<Void>("blame", BlobPage.class).setEnabled(false)); - item.add(new BookmarkablePageLink<Void>("history", BlobPage.class).setEnabled(false)); + item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class, newPathParameter(entry.path))); WicketUtils.setAlternatingBackground(item, counter); counter++; diff --git a/src/com/gitblit/wicket/pages/CommitPage.java b/src/com/gitblit/wicket/pages/CommitPage.java index 9cc6df8..63817ca 100644 --- a/src/com/gitblit/wicket/pages/CommitPage.java +++ b/src/com/gitblit/wicket/pages/CommitPage.java @@ -92,7 +92,7 @@ item.add(new BookmarkablePageLink<Void>("diff", BlobDiffPage.class, newPathParameter(entry.path))); item.add(new BookmarkablePageLink<Void>("view", BlobPage.class, newPathParameter(entry.path))); item.add(new BookmarkablePageLink<Void>("blame", BlobPage.class).setEnabled(false)); - item.add(new BookmarkablePageLink<Void>("history", BlobPage.class).setEnabled(false)); + item.add(new BookmarkablePageLink<Void>("history", HistoryPage.class, newPathParameter(entry.path))); WicketUtils.setAlternatingBackground(item, counter); counter++; diff --git a/src/com/gitblit/wicket/pages/HistoryPage.html b/src/com/gitblit/wicket/pages/HistoryPage.html new file mode 100644 index 0000000..a77933e --- /dev/null +++ b/src/com/gitblit/wicket/pages/HistoryPage.html @@ -0,0 +1,28 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd" + xml:lang="en" + lang="en"> + +<body> +<wicket:extend> + + <!-- page nav links --> + <div wicket:id="pageLinks">[page links]</div> + + <!-- pager links --> + <div style="padding-top:5px;padding-bottom:5px;"> + <a wicket:id="firstPageTop"><wicket:message key="gb.pageFirst"></wicket:message></a> | <a wicket:id="prevPageTop"><wicket:message key="gb.pagePrevious"></wicket:message></a> | <a wicket:id="nextPageTop"><wicket:message key="gb.pageNext"></wicket:message></a> + </div> + + <!-- history --> + <div style="margin-top:5px;" wicket:id="historyPanel">[history panel]</div> + + <!-- pager links --> + <div style="padding-bottom:5px;"> + <a wicket:id="firstPageBottom"><wicket:message key="gb.pageFirst"></wicket:message></a> | <a wicket:id="prevPageBottom"><wicket:message key="gb.pagePrevious"></wicket:message></a> | <a wicket:id="nextPageBottom"><wicket:message key="gb.pageNext"></wicket:message></a> + </div> + +</wicket:extend> +</body> +</html> \ No newline at end of file diff --git a/src/com/gitblit/wicket/pages/HistoryPage.java b/src/com/gitblit/wicket/pages/HistoryPage.java new file mode 100644 index 0000000..8b7075a --- /dev/null +++ b/src/com/gitblit/wicket/pages/HistoryPage.java @@ -0,0 +1,38 @@ +package com.gitblit.wicket.pages; + +import org.apache.wicket.PageParameters; +import org.apache.wicket.markup.html.link.BookmarkablePageLink; + +import com.gitblit.wicket.RepositoryPage; +import com.gitblit.wicket.WicketUtils; +import com.gitblit.wicket.panels.HistoryPanel; + +public class HistoryPage extends RepositoryPage { + + public HistoryPage(PageParameters params) { + super(params); + + String path = WicketUtils.getPath(params); + int pageNumber = WicketUtils.getPage(params); + int prevPage = Math.max(0, pageNumber - 1); + int nextPage = pageNumber + 1; + + HistoryPanel history = new HistoryPanel("historyPanel", repositoryName, objectId, path, getRepository(), -1, pageNumber - 1); + boolean hasMore = history.hasMore(); + add(history); + + add(new BookmarkablePageLink<Void>("firstPageTop", HistoryPage.class, WicketUtils.newPathParameter(repositoryName, objectId, path)).setEnabled(pageNumber > 1)); + add(new BookmarkablePageLink<Void>("prevPageTop", HistoryPage.class, WicketUtils.newHistoryPageParameter(repositoryName, objectId, path, prevPage)).setEnabled(pageNumber > 1)); + add(new BookmarkablePageLink<Void>("nextPageTop", HistoryPage.class, WicketUtils.newHistoryPageParameter(repositoryName, objectId, path, nextPage)).setEnabled(hasMore)); + + add(new BookmarkablePageLink<Void>("firstPageBottom", HistoryPage.class, WicketUtils.newPathParameter(repositoryName, objectId, path)).setEnabled(pageNumber > 1)); + add(new BookmarkablePageLink<Void>("prevPageBottom", HistoryPage.class, WicketUtils.newHistoryPageParameter(repositoryName, objectId, path, prevPage)).setEnabled(pageNumber > 1)); + add(new BookmarkablePageLink<Void>("nextPageBottom", HistoryPage.class, WicketUtils.newHistoryPageParameter(repositoryName, objectId, path, nextPage)).setEnabled(hasMore)); + + } + + @Override + protected String getPageName() { + return getString("gb.history"); + } +} diff --git a/src/com/gitblit/wicket/pages/LogPage.java b/src/com/gitblit/wicket/pages/LogPage.java index cd75df9..38148f5 100644 --- a/src/com/gitblit/wicket/pages/LogPage.java +++ b/src/com/gitblit/wicket/pages/LogPage.java @@ -15,16 +15,17 @@ int pageNumber = WicketUtils.getPage(params); int prevPage = Math.max(0, pageNumber - 1); int nextPage = pageNumber + 1; + LogPanel logPanel = new LogPanel("logPanel", repositoryName, objectId, getRepository(), -1, pageNumber - 1); + boolean hasMore = logPanel.hasMore(); + add(logPanel); - add(new BookmarkablePageLink<Void>("firstPageTop", LogPage.class, WicketUtils.newObjectParameter(repositoryName, objectId))); + add(new BookmarkablePageLink<Void>("firstPageTop", LogPage.class, WicketUtils.newObjectParameter(repositoryName, objectId)).setEnabled(pageNumber > 1)); add(new BookmarkablePageLink<Void>("prevPageTop", LogPage.class, WicketUtils.newLogPageParameter(repositoryName, objectId, prevPage)).setEnabled(pageNumber > 1)); - add(new BookmarkablePageLink<Void>("nextPageTop", LogPage.class, WicketUtils.newLogPageParameter(repositoryName, objectId, nextPage))); + add(new BookmarkablePageLink<Void>("nextPageTop", LogPage.class, WicketUtils.newLogPageParameter(repositoryName, objectId, nextPage)).setEnabled(hasMore)); - add(new LogPanel("logPanel", repositoryName, objectId, getRepository(), -1, pageNumber - 1)); - - add(new BookmarkablePageLink<Void>("firstPageBottom", LogPage.class, WicketUtils.newObjectParameter(repositoryName, objectId))); + add(new BookmarkablePageLink<Void>("firstPageBottom", LogPage.class, WicketUtils.newObjectParameter(repositoryName, objectId)).setEnabled(pageNumber > 1)); add(new BookmarkablePageLink<Void>("prevPageBottom", LogPage.class, WicketUtils.newLogPageParameter(repositoryName, objectId, prevPage)).setEnabled(pageNumber > 1)); - add(new BookmarkablePageLink<Void>("nextPageBottom", LogPage.class, WicketUtils.newLogPageParameter(repositoryName, objectId, nextPage))); + add(new BookmarkablePageLink<Void>("nextPageBottom", LogPage.class, WicketUtils.newLogPageParameter(repositoryName, objectId, nextPage)).setEnabled(hasMore)); } @Override diff --git a/src/com/gitblit/wicket/pages/TreePage.java b/src/com/gitblit/wicket/pages/TreePage.java index 5ebb1b6..2ab164d 100644 --- a/src/com/gitblit/wicket/pages/TreePage.java +++ b/src/com/gitblit/wicket/pages/TreePage.java @@ -26,22 +26,22 @@ public TreePage(PageParameters params) { super(params); - final String basePath = WicketUtils.getPath(params); + final String path = WicketUtils.getPath(params); Repository r = getRepository(); RevCommit commit = JGitUtils.getCommit(r, objectId); - List<PathModel> paths = JGitUtils.getFilesInPath(r, basePath, commit); + List<PathModel> paths = JGitUtils.getFilesInPath(r, path, commit); // tree page links add(new Label("historyLink", getString("gb.history"))); - add(new BookmarkablePageLink<Void>("headLink", TreePage.class, WicketUtils.newPathParameter(repositoryName, Constants.HEAD, basePath))); + add(new BookmarkablePageLink<Void>("headLink", TreePage.class, WicketUtils.newPathParameter(repositoryName, Constants.HEAD, path))); add(new LinkPanel("shortlog", "title", commit.getShortMessage(), CommitPage.class, newCommitParameter())); // breadcrumbs - add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, basePath, objectId)); - if (basePath != null && basePath.trim().length() > 0) { - paths.add(0, PathModel.getParentPath(basePath, objectId)); + add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, path, objectId)); + if (path != null && path.trim().length() > 0) { + paths.add(0, PathModel.getParentPath(path, objectId)); } final ByteFormat byteFormat = new ByteFormat(); @@ -69,7 +69,7 @@ // links Fragment links = new Fragment("pathLinks", "treeLinks", this); links.add(new BookmarkablePageLink<Void>("tree", TreePage.class, WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))); - links.add(new BookmarkablePageLink<Void>("history", TreePage.class).setEnabled(false)); + links.add(new BookmarkablePageLink<Void>("history", HistoryPage.class, WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))); item.add(links); } else { // blob link @@ -81,7 +81,7 @@ links.add(new BookmarkablePageLink<Void>("view", BlobPage.class, WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))); links.add(new BookmarkablePageLink<Void>("raw", RawPage.class, WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))); links.add(new BookmarkablePageLink<Void>("blame", BlobPage.class).setEnabled(false)); - links.add(new BookmarkablePageLink<Void>("history", BlobPage.class).setEnabled(false)); + links.add(new BookmarkablePageLink<Void>("history", HistoryPage.class, WicketUtils.newPathParameter(repositoryName, entry.commitId, entry.path))); item.add(links); } } diff --git a/src/com/gitblit/wicket/panels/HistoryPanel.html b/src/com/gitblit/wicket/panels/HistoryPanel.html new file mode 100644 index 0000000..9ba95de --- /dev/null +++ b/src/com/gitblit/wicket/panels/HistoryPanel.html @@ -0,0 +1,35 @@ +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml" + xmlns:wicket="http://wicket.apache.org/dtds.data/wicket-xhtml1.3-strict.dtd" + xml:lang="en" + lang="en"> + +<body> +<wicket:panel> + + <!-- header --> + <div class="header" wicket:id="header">[history header]</div> + + <!-- breadcrumbs --> + <div wicket:id="breadcrumbs">[breadcrumbs]</div> + + <table style="width:100%" class="pretty"> + <tbody> + <tr wicket:id="commit"> + <td class="date"><span wicket:id="commitDate">[commit date]</span></td> + <td class="author"><span wicket:id="commitAuthor">[commit author]</span></td> + <td><div wicket:id="commitShortMessage">[commit short message]</div></td> + <td class="rightAlign"><div wicket:id="commitRefs">[commit refs]</div></td> + <td class="rightAlign"> + <span class="link"> + <a wicket:id="view"><wicket:message key="gb.view"></wicket:message></a> | <a wicket:id="commitdiff"><wicket:message key="gb.commitdiff"></wicket:message></a> | <a wicket:id="difftocurrent"><wicket:message key="gb.difftocurrent"></wicket:message></a> + </span> + </td> + </tr> + </tbody> + </table> + <div wicket:id="moreHistory">[more...]</div> + +</wicket:panel> +</body> +</html> \ No newline at end of file diff --git a/src/com/gitblit/wicket/panels/HistoryPanel.java b/src/com/gitblit/wicket/panels/HistoryPanel.java new file mode 100644 index 0000000..236e077 --- /dev/null +++ b/src/com/gitblit/wicket/panels/HistoryPanel.java @@ -0,0 +1,130 @@ +package com.gitblit.wicket.panels; + +import java.util.Date; +import java.util.List; +import java.util.Map; + +import org.apache.wicket.markup.html.basic.Label; +import org.apache.wicket.markup.html.link.BookmarkablePageLink; +import org.apache.wicket.markup.repeater.Item; +import org.apache.wicket.markup.repeater.data.DataView; +import org.apache.wicket.markup.repeater.data.ListDataProvider; +import org.apache.wicket.model.StringResourceModel; +import org.eclipse.jgit.lib.ObjectId; +import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.revwalk.RevCommit; + +import com.gitblit.GitBlit; +import com.gitblit.Keys; +import com.gitblit.utils.JGitUtils; +import com.gitblit.utils.StringUtils; +import com.gitblit.wicket.LinkPanel; +import com.gitblit.wicket.WicketUtils; +import com.gitblit.wicket.pages.BlobDiffPage; +import com.gitblit.wicket.pages.CommitDiffPage; +import com.gitblit.wicket.pages.CommitPage; +import com.gitblit.wicket.pages.HistoryPage; +import com.gitblit.wicket.pages.LogPage; + +public class HistoryPanel extends BasePanel { + + private static final long serialVersionUID = 1L; + + private boolean hasMore = false; + + public HistoryPanel(String wicketId, final String repositoryName, String objectId, final String path, Repository r, int limit, int pageOffset) { + super(wicketId); + boolean pageResults = limit <= 0; + int itemsPerPage = GitBlit.self().settings().getInteger(Keys.web.logPageCommitCount, 50); + if (itemsPerPage <= 1) { + itemsPerPage = 50; + } + + RevCommit commit = JGitUtils.getCommit(r, objectId); + final Map<ObjectId, List<String>> allRefs = JGitUtils.getAllRefs(r); + List<RevCommit> commits; + if (pageResults) { + // Paging result set + commits = JGitUtils.getRevLog(r, objectId, path, pageOffset * itemsPerPage, itemsPerPage); + } else { + // Fixed size result set + commits = JGitUtils.getRevLog(r, objectId, path, 0, limit); + } + + // inaccurate way to determine if there are more commits. + // works unless commits.size() represents the exact end. + hasMore = commits.size() >= itemsPerPage; + + // header + if (pageResults) { + // history page + // show commit page link + add(new LinkPanel("header", "title", commit.getShortMessage(), CommitPage.class, WicketUtils.newObjectParameter(repositoryName, commit.getName()))); + } else { + // summary page + // show history page link + add(new LinkPanel("header", "title", new StringResourceModel("gb.history", this, null), LogPage.class, WicketUtils.newRepositoryParameter(repositoryName))); + } + + // breadcrumbs + add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, path, objectId)); + + ListDataProvider<RevCommit> dp = new ListDataProvider<RevCommit>(commits); + DataView<RevCommit> logView = new DataView<RevCommit>("commit", dp) { + private static final long serialVersionUID = 1L; + int counter = 0; + + public void populateItem(final Item<RevCommit> item) { + final RevCommit entry = item.getModelObject(); + final Date date = JGitUtils.getCommitDate(entry); + + item.add(WicketUtils.createDateLabel("commitDate", date, getTimeZone())); + + String author = entry.getAuthorIdent().getName(); + item.add(WicketUtils.createAuthorLabel("commitAuthor", author)); + + String shortMessage = entry.getShortMessage(); + String trimmedMessage = StringUtils.trimShortLog(shortMessage); + LinkPanel shortlog = new LinkPanel("commitShortMessage", "list subject", trimmedMessage, CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName())); + if (!shortMessage.equals(trimmedMessage)) { + WicketUtils.setHtmlTitle(shortlog, shortMessage); + } + item.add(shortlog); + + item.add(new RefsPanel("commitRefs", repositoryName, entry, allRefs)); + + item.add(new BookmarkablePageLink<Void>("view", CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()))); + item.add(new BookmarkablePageLink<Void>("commitdiff", CommitDiffPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()))); + item.add(new BookmarkablePageLink<Void>("difftocurrent", BlobDiffPage.class, WicketUtils.newPathParameter(repositoryName, entry.getName(), path)).setEnabled(counter > 0)); + + WicketUtils.setAlternatingBackground(item, counter); + counter++; + } + }; + add(logView); + + // determine to show pager, more, or neither + if (limit <= 0) { + // no display limit + add(new Label("moreHistory", "").setVisible(false)); + } else { + if (pageResults) { + // paging + add(new Label("moreHistory", "").setVisible(false)); + } else { + // more + if (commits.size() == limit) { + // show more + add(new LinkPanel("moreHistory", "link", new StringResourceModel("gb.moreHistory", this, null), HistoryPage.class, WicketUtils.newPathParameter(repositoryName, objectId, path))); + } else { + // no more + add(new Label("moreHistory", "").setVisible(false)); + } + } + } + } + + public boolean hasMore() { + return hasMore; + } +} diff --git a/src/com/gitblit/wicket/panels/LogPanel.java b/src/com/gitblit/wicket/panels/LogPanel.java index 2075410..954af75 100644 --- a/src/com/gitblit/wicket/panels/LogPanel.java +++ b/src/com/gitblit/wicket/panels/LogPanel.java @@ -29,6 +29,8 @@ public class LogPanel extends BasePanel { private static final long serialVersionUID = 1L; + + private boolean hasMore = false; public LogPanel(String wicketId, final String repositoryName, String objectId, Repository r, int limit, int pageOffset) { super(wicketId); @@ -47,6 +49,10 @@ // Fixed size result set commits = JGitUtils.getRevLog(r, objectId, 0, limit); } + + // inaccurate way to determine if there are more commits. + // works unless commits.size() represents the exact end. + hasMore = commits.size() >= itemsPerPage; // header if (pageResults) { @@ -113,4 +119,8 @@ } } } + + public boolean hasMore() { + return hasMore; + } } -- Gitblit v1.9.1