Paul Martin
2016-04-27 c2188a840bc4153ae92112b04b2e06a90d3944aa
src/main/java/com/gitblit/wicket/pages/BlamePage.java
@@ -32,10 +32,10 @@
import org.apache.wicket.behavior.SimpleAttributeModifier;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.BookmarkablePageLink;
import org.apache.wicket.markup.html.link.ExternalLink;
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.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.revwalk.RevCommit;
@@ -94,17 +94,40 @@
      final BlameType activeBlameType = BlameType.get(blameTypeParam);
      RevCommit commit = getCommit();
      add(new BookmarkablePageLink<Void>("blobLink", BlobPage.class,
            WicketUtils.newPathParameter(repositoryName, objectId, blobPath)));
      PathModel pathModel = null;
      List<PathModel> paths = JGitUtils.getFilesInPath(getRepository(), StringUtils.getRootPath(blobPath), commit);
      for (PathModel path : paths) {
         if (path.path.equals(blobPath)) {
            pathModel = path;
            break;
         }
      }
      if (pathModel == null) {
         final String notFound = MessageFormat.format("Blame page failed to find {0} in {1} @ {2}",
               blobPath, repositoryName, objectId);
         logger.error(notFound);
         add(new Label("annotation").setVisible(false));
         add(new Label("missingBlob", missingBlob(blobPath, commit)).setEscapeModelStrings(false));
         return;
      }
      if (pathModel.isFilestoreItem()) {
         String rawUrl = JGitUtils.getLfsRepositoryUrl(getContextUrl(), repositoryName, pathModel.getFilestoreOid());
         add(new ExternalLink("blobLink", rawUrl));
      } else {
         add(new BookmarkablePageLink<Void>("blobLink", BlobPage.class,
               WicketUtils.newPathParameter(repositoryName, objectId, blobPath)));
      }
      add(new BookmarkablePageLink<Void>("commitLink", CommitPage.class,
            WicketUtils.newObjectParameter(repositoryName, objectId)));
      add(new BookmarkablePageLink<Void>("commitDiffLink", CommitDiffPage.class,
            WicketUtils.newObjectParameter(repositoryName, objectId)));
      // blame page links
      add(new BookmarkablePageLink<Void>("headLink", BlamePage.class,
            WicketUtils.newPathParameter(repositoryName, Constants.HEAD, blobPath)));
      add(new BookmarkablePageLink<Void>("historyLink", HistoryPage.class,
            WicketUtils.newPathParameter(repositoryName, objectId, blobPath)));
@@ -137,26 +160,13 @@
      final DateFormat df = new SimpleDateFormat(format);
      df.setTimeZone(getTimeZone());
      PathModel pathModel = null;
      List<PathModel> paths = JGitUtils.getFilesInPath(getRepository(), StringUtils.getRootPath(blobPath), commit);
      for (PathModel path : paths) {
         if (path.path.equals(blobPath)) {
            pathModel = path;
            break;
         }
      }
      if (pathModel == null) {
         final String notFound = MessageFormat.format("Blame page failed to find {0} in {1} @ {2}",
               blobPath, repositoryName, objectId);
         logger.error(notFound);
         add(new Label("annotation").setVisible(false));
         add(new Label("missingBlob", missingBlob(blobPath, commit)).setEscapeModelStrings(false));
         return;
      }
      add(new Label("missingBlob").setVisible(false));
      final int tabLength = app().settings().getInteger(Keys.web.tabLength, 4);
      List<AnnotatedLine> lines = DiffUtils.blame(getRepository(), blobPath, objectId);
      final Map<?, String> colorMap = initializeColors(activeBlameType, lines);
      ListDataProvider<AnnotatedLine> blameDp = new ListDataProvider<AnnotatedLine>(lines);
@@ -215,7 +225,7 @@
               color = colorMap.get(entry.commitId);
               break;
            }
            Component data = new Label("data", StringUtils.escapeForHtml(entry.data, true)).setEscapeModelStrings(false);
            Component data = new Label("data", StringUtils.escapeForHtml(entry.data, true, tabLength)).setEscapeModelStrings(false);
            data.add(new SimpleAttributeModifier("style", "background-color: " + color + ";"));
            item.add(data);
         }
@@ -238,6 +248,11 @@
   }
   @Override
   protected boolean isCommitPage() {
      return true;
   }
   @Override
   protected Class<? extends BasePage> getRepoNavPageClass() {
      return TreePage.class;
   }