SubmoduleOp: Fix formatting of submodule update commit message

When multiple submodules are updated, the commit message does not
include newlines between the list of updated submodules.

Add newlines, and update the test to include an assertion on the
commit message.

Bug: Issue 4889
Change-Id: I0756a87034a0b2b432a8339596147d765aa8cd4d
diff --git a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/SubmoduleSubscriptionsWholeTopicMergeIT.java b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/SubmoduleSubscriptionsWholeTopicMergeIT.java
index 6941765..2ec3810 100644
--- a/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/SubmoduleSubscriptionsWholeTopicMergeIT.java
+++ b/gerrit-acceptance-tests/src/test/java/com/google/gerrit/acceptance/git/SubmoduleSubscriptionsWholeTopicMergeIT.java
@@ -308,6 +308,52 @@
     expectToHaveSubmoduleState(superRepo, "master", "sub2", sub2, "master");
     expectToHaveSubmoduleState(superRepo, "master", "sub3", sub3, "master");
 
+    String sub1HEAD =
+        sub1.git()
+            .fetch()
+            .setRemote("origin")
+            .call()
+            .getAdvertisedRef("refs/heads/master")
+            .getObjectId()
+            .name();
+
+    String sub2HEAD =
+        sub2.git()
+            .fetch()
+            .setRemote("origin")
+            .call()
+            .getAdvertisedRef("refs/heads/master")
+            .getObjectId()
+            .name();
+
+    String sub3HEAD =
+        sub3.git()
+            .fetch()
+            .setRemote("origin")
+            .call()
+            .getAdvertisedRef("refs/heads/master")
+            .getObjectId()
+            .name();
+
+    if (getSubmitType() == SubmitType.MERGE_IF_NECESSARY) {
+      expectToHaveCommitMessage(
+          superRepo,
+          "master",
+          "Update git submodules\n\n"
+              + "* Update "
+              + name("sub3")
+              + " from branch 'master'\n  to "
+              + sub3HEAD
+              + "\n\n* Update "
+              + name("sub2")
+              + " from branch 'master'\n  to "
+              + sub2HEAD
+              + "\n\n* Update "
+              + name("sub1")
+              + " from branch 'master'\n  to "
+              + sub1HEAD);
+    }
+
     superRepo
         .git()
         .fetch()
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java
index 8242daf..5fe19fc 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/SubmoduleOp.java
@@ -375,8 +375,13 @@
     PersonIdent author = null;
     DirCache dc = readTree(or.rw, currentCommit);
     DirCacheEditor ed = dc.editor();
+    int count = 0;
     for (SubmoduleSubscription s : targets.get(subscriber)) {
+      if (count > 0) {
+        msgbuf.append("\n\n");
+      }
       RevCommit newCommit = updateSubmodule(dc, ed, msgbuf, s);
+      count++;
       if (newCommit != null) {
         if (author == null) {
           author = newCommit.getAuthorIdent();