Use old path instead of /dev/null for deletes in CommitSoyData Change-Id: I97e3fe8ab4f6b1585c1f3a4479ead507a5fa4e6b
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java b/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java index 9f8a97d..dee229b 100644 --- a/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java +++ b/gitiles-servlet/src/main/java/com/google/gitiles/CommitSoyData.java
@@ -17,6 +17,10 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; +import static org.eclipse.jgit.diff.DiffEntry.ChangeType.COPY; +import static org.eclipse.jgit.diff.DiffEntry.ChangeType.DELETE; +import static org.eclipse.jgit.diff.DiffEntry.ChangeType.RENAME; + import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -215,19 +219,21 @@ AbstractTreeIterator oldTree; GitilesView.Builder diffUrl = GitilesView.diff().copyFrom(view) .setTreePath(""); + Revision oldRevision; switch (commit.getParentCount()) { case 0: oldTree = new EmptyTreeIterator(); - diffUrl.setOldRevision(Revision.NULL); + oldRevision = Revision.NULL; break; case 1: oldTree = getTreeIterator(walk, commit.getParent(0)); - diffUrl.setOldRevision(view.getRevision().getName() + "^", commit.getParent(0)); + oldRevision = Revision.peeled(view.getRevision().getName() + "^", commit.getParent(0)); break; default: // TODO(dborowitz): handle merges return NullData.INSTANCE; } + diffUrl.setOldRevision(oldRevision); AbstractTreeIterator newTree = getTreeIterator(walk, commit); DiffFormatter diff = new DiffFormatter(NullOutputStream.INSTANCE); @@ -238,14 +244,24 @@ List<Object> result = Lists.newArrayList(); for (DiffEntry e : diff.scan(oldTree, newTree)) { Map<String, Object> entry = Maps.newHashMapWithExpectedSize(5); - entry.put("path", e.getNewPath()); - entry.put("url", GitilesView.path() - .copyFrom(view) - .setTreePath(e.getNewPath()) - .toUrl()); + ChangeType type = e.getChangeType(); + if (type != DELETE) { + entry.put("path", e.getNewPath()); + entry.put("url", GitilesView.path() + .copyFrom(view) + .setTreePath(e.getNewPath()) + .toUrl()); + } else { + entry.put("path", e.getOldPath()); + entry.put("url", GitilesView.path() + .copyFrom(view) + .setRevision(oldRevision) + .setTreePath(e.getOldPath()) + .toUrl()); + } entry.put("diffUrl", diffUrl.setAnchor("F" + result.size()).toUrl()); entry.put("changeType", e.getChangeType().toString()); - if (e.getChangeType() == ChangeType.COPY || e.getChangeType() == ChangeType.RENAME) { + if (type == COPY || type == RENAME) { entry.put("oldPath", e.getOldPath()); } result.add(entry);