Fix clearing of topic during replace

When uploading a replacement patch set to a change that already has
a topic tag, we don't want to clear the topic if the user hasn't
specified it on the command line.

Bug: issue 676
Change-Id: I89c6b7290dab7bbf37c15cad11004fa886e80a7e
Signed-off-by: Shawn O. Pearce <sop@google.com>
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
index fbcdc09..a3140ec 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/ReceiveCommits.java
@@ -620,12 +620,11 @@
 
     if (split < destBranchName.length()) {
       destTopicName = destBranchName.substring(split + 1);
+      if (destTopicName.isEmpty()) {
+        destTopicName = null;
+      }
     } else {
-      // We use empty string here to denote the topic wasn't
-      // supplied, but the caller used the syntax that allows
-      // for a topic to be given.
-      //
-      destTopicName = "";
+      destTopicName = null;
     }
     destBranch = new Branch.NameKey(project.getNameKey(), //
         destBranchName.substring(0, split));
@@ -876,7 +875,7 @@
 
     final Change change =
         new Change(changeKey, new Change.Id(db.nextChangeId()), me, destBranch);
-    change.setTopic(destTopicName.isEmpty() ? null : destTopicName);
+    change.setTopic(destTopicName);
     change.nextPatchSetId();
 
     final PatchSet ps = new PatchSet(change.currPatchSetId());
@@ -1177,9 +1176,7 @@
             public Change update(Change change) {
               if (change.getStatus().isOpen()) {
                 if (destTopicName != null) {
-                  change.setTopic(destTopicName.isEmpty() //
-                      ? null //
-                      : destTopicName);
+                  change.setTopic(destTopicName);
                 }
                 change.setStatus(Change.Status.NEW);
                 change.setCurrentPatchSet(result.info);