Merge "ChangeUpdate: Fix incorrect write of review notes metadata"
diff --git a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/RebuildNotedb.java b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/RebuildNotedb.java
index ea7475c..6996e49 100644
--- a/gerrit-pgm/src/main/java/com/google/gerrit/pgm/RebuildNotedb.java
+++ b/gerrit-pgm/src/main/java/com/google/gerrit/pgm/RebuildNotedb.java
@@ -104,11 +104,12 @@
sysInjector.getInstance(GitRepositoryManager.class);
final Project.NameKey allUsersName =
sysInjector.getInstance(AllUsersName.class);
- final Repository allUsersRepo = repoManager.openRepository(allUsersName);
+ final Repository allUsersRepo =
+ repoManager.openMetadataRepository(allUsersName);
try {
deleteDraftRefs(allUsersRepo);
for (final Project.NameKey project : changesByProject.keySet()) {
- final Repository repo = repoManager.openRepository(project);
+ final Repository repo = repoManager.openMetadataRepository(project);
try {
final BatchRefUpdate bru = repo.getRefDatabase().newBatchUpdate();
final BatchRefUpdate bruForDrafts =
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/git/MetaDataUpdate.java b/gerrit-server/src/main/java/com/google/gerrit/server/git/MetaDataUpdate.java
index b65cc85..5e4ffab 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/git/MetaDataUpdate.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/git/MetaDataUpdate.java
@@ -79,7 +79,26 @@
*/
public MetaDataUpdate create(Project.NameKey name, IdentifiedUser user,
BatchRefUpdate batch) throws RepositoryNotFoundException, IOException {
- MetaDataUpdate md = factory.create(name, mgr.openRepository(name), batch);
+ return create(name, mgr.openRepository(name), user, batch);
+ }
+
+ /**
+ * Create an update using an existing batch ref update.
+ * <p>
+ * This allows batching together updates to multiple metadata refs. For making
+ * multiple commits to a single metadata ref, see
+ * {@link VersionedMetaData#openUpdate(MetaDataUpdate)}.
+ *
+ * @param name project name.
+ * @param repository GIT respository
+ * @param user user for the update.
+ * @param batch batch update to use; the caller is responsible for committing
+ * the update.
+ */
+ public MetaDataUpdate create(Project.NameKey name, Repository repository,
+ IdentifiedUser user, BatchRefUpdate batch)
+ throws RepositoryNotFoundException, IOException {
+ MetaDataUpdate md = factory.create(name, repository, batch);
md.getCommitBuilder().setAuthor(createPersonIdent(user));
md.getCommitBuilder().setCommitter(serverIdent);
return md;
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/AbstractChangeUpdate.java b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/AbstractChangeUpdate.java
index 24a8d16..01fa6b1 100644
--- a/gerrit-server/src/main/java/com/google/gerrit/server/notedb/AbstractChangeUpdate.java
+++ b/gerrit-server/src/main/java/com/google/gerrit/server/notedb/AbstractChangeUpdate.java
@@ -122,7 +122,9 @@
if (migration.writeChanges()) {
load();
MetaDataUpdate md =
- updateFactory.create(getProjectName(), getUser(), bru);
+ updateFactory.create(getProjectName(),
+ repoManager.openMetadataRepository(getProjectName()), getUser(),
+ bru);
md.setAllowEmpty(true);
return super.openUpdate(md);
}