Populate the owner field of a change from notedb

The change owner is set to the author of the first commit on the notes
branch.

Change-Id: I9728cb13051bc1e6011f36cc4b81ba14c7894df3
Signed-off-by: Edwin Kempin <ekempin@google.com>
diff --git a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Change.java b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Change.java
index 55b2574..9b6581a 100644
--- a/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Change.java
+++ b/gerrit-reviewdb/src/main/java/com/google/gerrit/reviewdb/client/Change.java
@@ -543,6 +543,10 @@
     return owner;
   }
 
+  public void setOwner(Account.Id owner) {
+    this.owner = owner;
+  }
+
   public Branch.NameKey getDest() {
     return dest;
   }
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java
index 925da3e..bb5a127 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotes.java
@@ -268,6 +268,7 @@
       change.setTopic(Strings.emptyToNull(parser.topic));
       change.setCreatedOn(parser.createdOn);
       change.setLastUpdatedOn(parser.lastUpdatedOn);
+      change.setOwner(parser.ownerId);
 
       if (parser.hashtags != null) {
         hashtags = ImmutableSet.copyOf(parser.hashtags);
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesParser.java b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesParser.java
index bb61103..6ef4d0f 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesParser.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/ChangeNotesParser.java
@@ -83,6 +83,7 @@
   Set<String> hashtags;
   Timestamp createdOn;
   Timestamp lastUpdatedOn;
+  Account.Id ownerId;
 
   private final Change.Id changeId;
   private final ObjectId tip;
@@ -164,6 +165,7 @@
     }
     PatchSet.Id psId = parsePatchSetId(commit);
     Account.Id accountId = parseIdent(commit);
+    ownerId = accountId;
     parseChangeMessage(psId, accountId, commit);
     if (topic == null) {
       topic = parseTopic(commit);
diff --git a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java
index 278f72a..c1fa916 100644
--- a/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java
+++ b/gerrit-server/src/test/java/com/google/gerrit/server/notedb/ChangeNotesTest.java
@@ -484,6 +484,21 @@
   }
 
   @Test
+  public void ownerChangeNotes() throws Exception {
+    Change c = newChange();
+
+    assertThat(newNotes(c).getChange().getOwner()).isEqualTo(
+        changeOwner.getAccountId());
+
+    // An update doesn't affect the owner
+    ChangeUpdate update = newUpdate(c, otherUser);
+    update.setTopic("topic"); // Change something to get a new commit.
+    update.commit();
+    assertThat(newNotes(c).getChange().getOwner()).isEqualTo(
+        changeOwner.getAccountId());
+  }
+
+  @Test
   public void createdOnChangeNotes() throws Exception {
     Change c = newChange();