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);