Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

HistoryPanel.java 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. package com.gitblit.wicket.panels;
  2. import java.util.Date;
  3. import java.util.List;
  4. import java.util.Map;
  5. import org.apache.wicket.markup.html.basic.Label;
  6. import org.apache.wicket.markup.html.link.BookmarkablePageLink;
  7. import org.apache.wicket.markup.repeater.Item;
  8. import org.apache.wicket.markup.repeater.data.DataView;
  9. import org.apache.wicket.markup.repeater.data.ListDataProvider;
  10. import org.apache.wicket.model.StringResourceModel;
  11. import org.eclipse.jgit.lib.ObjectId;
  12. import org.eclipse.jgit.lib.Repository;
  13. import org.eclipse.jgit.revwalk.RevCommit;
  14. import com.gitblit.GitBlit;
  15. import com.gitblit.Keys;
  16. import com.gitblit.utils.JGitUtils;
  17. import com.gitblit.utils.StringUtils;
  18. import com.gitblit.wicket.LinkPanel;
  19. import com.gitblit.wicket.WicketUtils;
  20. import com.gitblit.wicket.pages.BlobDiffPage;
  21. import com.gitblit.wicket.pages.CommitDiffPage;
  22. import com.gitblit.wicket.pages.CommitPage;
  23. import com.gitblit.wicket.pages.HistoryPage;
  24. import com.gitblit.wicket.pages.LogPage;
  25. public class HistoryPanel extends BasePanel {
  26. private static final long serialVersionUID = 1L;
  27. private boolean hasMore = false;
  28. public HistoryPanel(String wicketId, final String repositoryName, String objectId, final String path, Repository r, int limit, int pageOffset) {
  29. super(wicketId);
  30. boolean pageResults = limit <= 0;
  31. int itemsPerPage = GitBlit.self().settings().getInteger(Keys.web.logPageCommitCount, 50);
  32. if (itemsPerPage <= 1) {
  33. itemsPerPage = 50;
  34. }
  35. RevCommit commit = JGitUtils.getCommit(r, objectId);
  36. final Map<ObjectId, List<String>> allRefs = JGitUtils.getAllRefs(r);
  37. List<RevCommit> commits;
  38. if (pageResults) {
  39. // Paging result set
  40. commits = JGitUtils.getRevLog(r, objectId, path, pageOffset * itemsPerPage, itemsPerPage);
  41. } else {
  42. // Fixed size result set
  43. commits = JGitUtils.getRevLog(r, objectId, path, 0, limit);
  44. }
  45. // inaccurate way to determine if there are more commits.
  46. // works unless commits.size() represents the exact end.
  47. hasMore = commits.size() >= itemsPerPage;
  48. // header
  49. if (pageResults) {
  50. // history page
  51. // show commit page link
  52. add(new LinkPanel("header", "title", commit.getShortMessage(), CommitPage.class, WicketUtils.newObjectParameter(repositoryName, commit.getName())));
  53. } else {
  54. // summary page
  55. // show history page link
  56. add(new LinkPanel("header", "title", new StringResourceModel("gb.history", this, null), LogPage.class, WicketUtils.newRepositoryParameter(repositoryName)));
  57. }
  58. // breadcrumbs
  59. add(new PathBreadcrumbsPanel("breadcrumbs", repositoryName, path, objectId));
  60. ListDataProvider<RevCommit> dp = new ListDataProvider<RevCommit>(commits);
  61. DataView<RevCommit> logView = new DataView<RevCommit>("commit", dp) {
  62. private static final long serialVersionUID = 1L;
  63. int counter = 0;
  64. public void populateItem(final Item<RevCommit> item) {
  65. final RevCommit entry = item.getModelObject();
  66. final Date date = JGitUtils.getCommitDate(entry);
  67. item.add(WicketUtils.createDateLabel("commitDate", date, getTimeZone()));
  68. String author = entry.getAuthorIdent().getName();
  69. item.add(WicketUtils.createAuthorLabel("commitAuthor", author));
  70. String shortMessage = entry.getShortMessage();
  71. String trimmedMessage = StringUtils.trimShortLog(shortMessage);
  72. LinkPanel shortlog = new LinkPanel("commitShortMessage", "list subject", trimmedMessage, CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName()));
  73. if (!shortMessage.equals(trimmedMessage)) {
  74. WicketUtils.setHtmlTitle(shortlog, shortMessage);
  75. }
  76. item.add(shortlog);
  77. item.add(new RefsPanel("commitRefs", repositoryName, entry, allRefs));
  78. item.add(new BookmarkablePageLink<Void>("view", CommitPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName())));
  79. item.add(new BookmarkablePageLink<Void>("commitdiff", CommitDiffPage.class, WicketUtils.newObjectParameter(repositoryName, entry.getName())));
  80. item.add(new BookmarkablePageLink<Void>("difftocurrent", BlobDiffPage.class, WicketUtils.newPathParameter(repositoryName, entry.getName(), path)).setEnabled(counter > 0));
  81. WicketUtils.setAlternatingBackground(item, counter);
  82. counter++;
  83. }
  84. };
  85. add(logView);
  86. // determine to show pager, more, or neither
  87. if (limit <= 0) {
  88. // no display limit
  89. add(new Label("moreHistory", "").setVisible(false));
  90. } else {
  91. if (pageResults) {
  92. // paging
  93. add(new Label("moreHistory", "").setVisible(false));
  94. } else {
  95. // more
  96. if (commits.size() == limit) {
  97. // show more
  98. add(new LinkPanel("moreHistory", "link", new StringResourceModel("gb.moreHistory", this, null), HistoryPage.class, WicketUtils.newPathParameter(repositoryName, objectId, path)));
  99. } else {
  100. // no more
  101. add(new Label("moreHistory", "").setVisible(false));
  102. }
  103. }
  104. }
  105. }
  106. public boolean hasMore() {
  107. return hasMore;
  108. }
  109. }