Properly handle empty and missing paths when building TreeWalks

TreeWalk.forPath may behave in two ways we weren't handling correctly:
 -throws IllegalArgumentException when the path passed in was empty.
 -returns null when the path is not found.

Validate inputs and outputs where this method is used.

Change-Id: I63d33a9fc6e5d56265dc3a96b7d6d6585a8ae2de
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java
index dc761b0..d9ef0bf 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/ArchiveServlet.java
@@ -18,6 +18,7 @@
 import static javax.servlet.http.HttpServletResponse.SC_OK;
 
 import com.google.common.base.Optional;
+import com.google.common.base.Strings;
 
 import org.eclipse.jgit.api.ArchiveCommand;
 import org.eclipse.jgit.api.errors.GitAPIException;
@@ -81,11 +82,11 @@
     RevWalk rw = new RevWalk(repo);
     try {
       RevTree tree = rw.parseTree(rev.getId());
-      if (view.getPathPart() == null) {
+      if (Strings.isNullOrEmpty(view.getPathPart())) {
         return tree;
       }
       TreeWalk tw = TreeWalk.forPath(rw.getObjectReader(), view.getPathPart(), tree);
-      if (tw.getFileMode(0) != FileMode.TREE) {
+      if (tw == null || tw.getFileMode(0) != FileMode.TREE) {
         return ObjectId.zeroId();
       }
       return tw.getObjectId(0);
diff --git a/gitiles-servlet/src/main/java/com/google/gitiles/BlameServlet.java b/gitiles-servlet/src/main/java/com/google/gitiles/BlameServlet.java
index a18ca16..21ce0d5 100644
--- a/gitiles-servlet/src/main/java/com/google/gitiles/BlameServlet.java
+++ b/gitiles-servlet/src/main/java/com/google/gitiles/BlameServlet.java
@@ -17,6 +17,7 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND;
 
+import com.google.common.base.Strings;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
@@ -95,8 +96,11 @@
   private static ObjectId resolveBlob(GitilesView view, RevWalk rw, RevCommit commit)
       throws IOException {
     try {
+      if (Strings.isNullOrEmpty(view.getPathPart())) {
+        return null;
+      }
       TreeWalk tw = TreeWalk.forPath(rw.getObjectReader(), view.getPathPart(), commit.getTree());
-      if ((tw.getRawMode(0) & FileMode.TYPE_FILE) == 0) {
+      if (tw == null || (tw.getRawMode(0) & FileMode.TYPE_FILE) == 0) {
         return null;
       }
       return tw.getObjectId(0);