ReviewDbBatchUpdate: Avoid NPE when updating All-Users

If one change-update in a batch affects All-Users it is assumed that
all ChangeTasks updates NoteDb. This is not true when a stack of
changes is pushed and the changes(s) at the bottom of the stack are not
updated, existing last patchset is pushed.

Bug: Issue 11442
Change-Id: I0c828635920cc437da3da20785d3882a2e68d086
diff --git a/java/com/google/gerrit/server/update/ReviewDbBatchUpdate.java b/java/com/google/gerrit/server/update/ReviewDbBatchUpdate.java
index c67ee8a..cab96e5 100644
--- a/java/com/google/gerrit/server/update/ReviewDbBatchUpdate.java
+++ b/java/com/google/gerrit/server/update/ReviewDbBatchUpdate.java
@@ -548,6 +548,9 @@
           int objs = 0;
           BatchRefUpdate allUsersRefUpdate = allUsersRepo.getRefDatabase().newBatchUpdate();
           for (ChangeTask task : tasks) {
+            if (task.noteDbResult == null) {
+              continue;
+            }
             for (ReceiveCommand cmd : task.noteDbResult.allUsersCommands()) {
               allUsersRefUpdate.addCommand(cmd);
             }
diff --git a/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java b/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java
index 8e14330..398ed84 100644
--- a/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java
+++ b/javatests/com/google/gerrit/acceptance/git/AbstractPushForReview.java
@@ -2203,6 +2203,18 @@
   }
 
   @Test
+  public void noEditAndUpdateAllUsersInSameChangeStack() throws Exception {
+    assume().that(notesMigration.readChanges()).isTrue();
+    List<RevCommit> commits = createChanges(2, "refs/for/master");
+    String id2 = byCommit(commits.get(1)).change().getKey().get();
+    addDraft(id2, commits.get(1).name(), newDraft(FILE_NAME, 1, "comment2"));
+    // First change in stack unchanged.
+    RevCommit unChanged = commits.remove(0);
+    // Publishing draft comments on change 2 updates All-Users.
+    amendChanges(unChanged.toObjectId(), commits, "refs/for/master%publish-comments");
+  }
+
+  @Test
   public void pushWithDraftOptionIsDisabledPerDefault() throws Exception {
     for (String ref : ImmutableSet.of("refs/drafts/master", "refs/for/master%draft")) {
       PushOneCommit.Result r = pushTo(ref);