Merge "Fix NullPointerException if project has no refs/meta/config branch"
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
index e6064c2..e6dd9f7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocLoader.java
@@ -91,7 +91,11 @@
     try {
       RevWalk rw = new RevWalk(repo);
       try {
-        RevCommit commit = rw.parseCommit(key.getRevId());
+        ObjectId revId = key.getRevId();
+        if (revId == null) {
+          return Resource.NOT_FOUND;
+        }
+        RevCommit commit = rw.parseCommit(revId);
         RevTree tree = commit.getTree();
         TreeWalk tw = new TreeWalk(repo);
         try {
@@ -110,11 +114,11 @@
           }
           ObjectReader reader = repo.newObjectReader();
           try {
-            String abbrRevId = reader.abbreviate(key.getRevId()).name();
+            String abbrRevId = reader.abbreviate(revId).name();
             String html =
                 formatter.get().format(key.getProject().get(),
                     abbrRevId, formatterCfg,
-                    replaceMacros(repo, key.getProject(), key.getRevId(),
+                    replaceMacros(repo, key.getProject(), revId,
                         abbrRevId, bytes));
             return getAsHtmlResource(html, commit.getCommitTime());
           } finally {
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocResourceKey.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocResourceKey.java
index feb2bdd..1f23af0 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocResourceKey.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/XDocResourceKey.java
@@ -104,6 +104,10 @@
       metaConfigRevision = s[4];
     }
     return new XDocResourceKey(formatter, new Project.NameKey(project), file,
-        ObjectId.fromString(revision), ObjectId.fromString(metaConfigRevision));
+        toObjectId(revision), toObjectId(metaConfigRevision));
+  }
+
+  private static ObjectId toObjectId(String id) {
+    return id != null ? ObjectId.fromString(id) : null;
   }
 }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java
index 349b81a..6447ea9 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/xdocs/formatter/FormatterUtil.java
@@ -124,7 +124,11 @@
       try {
         RevWalk rw = new RevWalk(repo);
         try {
-          RevCommit commit = rw.parseCommit(repo.resolve(RefNames.REFS_CONFIG));
+          ObjectId id = repo.resolve(RefNames.REFS_CONFIG);
+          if (id == null) {
+            return null;
+          }
+          RevCommit commit = rw.parseCommit(id);
           RevTree tree = commit.getTree();
           TreeWalk tw = new TreeWalk(repo);
           try {