Add cherry-pick information to change message

Currently, cherry-pick information is not included in change message
when cherry-pick results in a new patchset on an already existing
change. Add this information to make the change message consistent with
the case when cherry-pick results in a new change.

Release-Notes: Add cherry-pick information to change message when cherry-pick results in a new patchset
Change-Id: Ie220882ced039c5bcf0040a6b9c39bc406c8a4d9
(cherry picked from commit 0f99fe66addf82cdafc5b5f249e621eb31dfb150)
diff --git a/java/com/google/gerrit/server/restapi/change/CherryPickChange.java b/java/com/google/gerrit/server/restapi/change/CherryPickChange.java
index 4da8410..338a1f5 100644
--- a/java/com/google/gerrit/server/restapi/change/CherryPickChange.java
+++ b/java/com/google/gerrit/server/restapi/change/CherryPickChange.java
@@ -402,6 +402,7 @@
                     destChange.notes(),
                     cherryPickCommit,
                     sourceChange,
+                    sourceCommit,
                     newTopic,
                     input,
                     workInProgress);
@@ -435,6 +436,7 @@
       ChangeNotes destNotes,
       CodeReviewCommit cherryPickCommit,
       @Nullable Change sourceChange,
+      @Nullable ObjectId sourceCommit,
       String topic,
       CherryPickInput input,
       @Nullable Boolean workInProgress)
@@ -442,7 +444,10 @@
     Change destChange = destNotes.getChange();
     PatchSet.Id psId = ChangeUtil.nextPatchSetId(git, destChange.currentPatchSetId());
     PatchSetInserter inserter = patchSetInserterFactory.create(destNotes, psId, cherryPickCommit);
-    inserter.setMessage("Uploaded patch set " + inserter.getPatchSetId().get() + ".");
+    BranchNameKey sourceBranch = sourceChange == null ? null : sourceChange.getDest();
+    inserter.setMessage(
+        messageForDestinationChange(
+            inserter.getPatchSetId(), sourceBranch, sourceCommit, cherryPickCommit));
     inserter.setTopic(topic);
     if (workInProgress != null) {
       inserter.setWorkInProgress(workInProgress);
diff --git a/javatests/com/google/gerrit/acceptance/api/project/CommitIT.java b/javatests/com/google/gerrit/acceptance/api/project/CommitIT.java
index 84a4a40..41d50a6 100644
--- a/javatests/com/google/gerrit/acceptance/api/project/CommitIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/project/CommitIT.java
@@ -372,7 +372,9 @@
     Iterator<ChangeMessageInfo> messageIterator = cherryPickResult.messages.iterator();
 
     assertThat(messageIterator.next().message).isEqualTo("Uploaded patch set 1.");
-    assertThat(messageIterator.next().message).isEqualTo("Uploaded patch set 2.");
+    String expectedMessage =
+        String.format("Patch Set 2: Cherry Picked from commit %s.", commitToCherryPick);
+    assertThat(messageIterator.next().message).isEqualTo(expectedMessage);
     // Cherry-pick of is not set, because the source change was not provided.
     assertThat(cherryPickResult.cherryPickOfChange).isNull();
     assertThat(cherryPickResult.cherryPickOfPatchSet).isNull();
@@ -422,8 +424,11 @@
     Iterator<ChangeMessageInfo> messageIterator = cherryPickResult.messages.iterator();
 
     assertThat(messageIterator.next().message).isEqualTo("Uploaded patch set 1.");
-    assertThat(messageIterator.next().message).isEqualTo("Uploaded patch set 2.");
-    assertThat(messageIterator.next().message).isEqualTo("Uploaded patch set 3.");
+    assertThat(messageIterator.next().message)
+        .isEqualTo("Patch Set 2: Cherry Picked from branch master.");
+    String expectedMessage =
+        String.format("Patch Set 3: Cherry Picked from commit %s.", commitToCherryPick.getName());
+    assertThat(messageIterator.next().message).isEqualTo(expectedMessage);
     // Cherry-pick was reset to empty value.
     assertThat(cherryPickResult._number).isEqualTo(existingDestChange._number);
     assertThat(cherryPickResult.cherryPickOfChange).isNull();
diff --git a/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java b/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java
index 4a5c3dd..d07f24d 100644
--- a/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java
+++ b/javatests/com/google/gerrit/acceptance/api/revision/RevisionIT.java
@@ -589,7 +589,7 @@
     assertThat(cherryInfo._number).isEqualTo(change.get()._number);
     assertThat(cherryInfo.cherryPickOfPatchSet).isEqualTo(1);
     assertThat(cherryIt.next().message).isEqualTo("Uploaded patch set 1.");
-    assertThat(cherryIt.next().message).isEqualTo("Uploaded patch set 2.");
+    assertThat(cherryIt.next().message).isEqualTo("Patch Set 2: Cherry Picked from branch master.");
   }
 
   @Test
@@ -625,7 +625,7 @@
     assertThat(cherryInfo.messages).hasSize(2);
     Iterator<ChangeMessageInfo> cherryIt = cherryInfo.messages.iterator();
     assertThat(cherryIt.next().message).isEqualTo("Uploaded patch set 1.");
-    assertThat(cherryIt.next().message).isEqualTo("Uploaded patch set 2.");
+    assertThat(cherryIt.next().message).isEqualTo("Patch Set 2: Cherry Picked from branch master.");
 
     // Parent of change 2 should now be the change that was merged, i.e.
     // change 2 is rebased onto the head of the master branch.