Merge branch 'stable-3.0'

* stable-3.0:
  CreateReviewNotes: Use UTF_8 constant from StandardCharsets

Change-Id: I2e483631ef609aefba3532cf4e798f6e8abf8953
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/CreateReviewNotes.java b/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/CreateReviewNotes.java
index ff255ae..2cee7cb 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/CreateReviewNotes.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/CreateReviewNotes.java
@@ -19,12 +19,13 @@
 import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.common.data.LabelType;
 import com.google.gerrit.common.data.LabelTypes;
+import com.google.gerrit.entities.Change;
+import com.google.gerrit.entities.PatchSet;
+import com.google.gerrit.entities.PatchSetApproval;
+import com.google.gerrit.entities.Project;
 import com.google.gerrit.extensions.registration.DynamicItem;
 import com.google.gerrit.git.LockFailureException;
-import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.reviewdb.client.PatchSet;
-import com.google.gerrit.reviewdb.client.PatchSetApproval;
-import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.git.ObjectIds;
 import com.google.gerrit.server.ApprovalsUtil;
 import com.google.gerrit.server.GerritPersonIdent;
 import com.google.gerrit.server.PatchSetUtil;
@@ -150,7 +151,7 @@
       for (RevCommit c : rw) {
         PatchSet ps = loadPatchSet(c, branch);
         if (ps != null) {
-          ChangeNotes notes = notesFactory.create(project, ps.getId().changeId());
+          ChangeNotes notes = notesFactory.create(project, ps.id().changeId());
           ObjectId content = createNoteContent(notes, ps);
           if (content != null) {
             monitor.update(1);
@@ -174,9 +175,8 @@
       for (ChangeNotes cn : notes) {
         monitor.update(1);
         PatchSet ps = psUtil.current(cn);
-        ObjectId commitId = ObjectId.fromString(ps.getRevision().get());
-        RevCommit commit = rw.parseCommit(commitId);
-        getNotes().set(commitId, createNoteContent(cn, ps));
+        RevCommit commit = rw.parseCommit(ps.commitId());
+        getNotes().set(commit, createNoteContent(cn, ps));
         getMessage().append("* ").append(commit.getShortMessage()).append("\n");
       }
     }
@@ -240,7 +240,7 @@
     String hash = c.name();
     for (ChangeData cd : queryProvider.get().byBranchCommit(project.get(), destBranch, hash)) {
       for (PatchSet ps : cd.patchSets()) {
-        if (ps.getRevision().matches(hash)) {
+        if (ObjectIds.matchesAbbreviation(ps.commitId(), hash)) {
           return ps;
         }
       }
@@ -257,32 +257,31 @@
     // commit time so we will be able to skip this normalization step.
     Change change = notes.getChange();
     PatchSetApproval submit = null;
-    for (PatchSetApproval a : approvalsUtil.byPatchSet(notes, ps.getId(), null, null)) {
-      if (a.getValue() == 0) {
+    for (PatchSetApproval a : approvalsUtil.byPatchSet(notes, ps.id(), null, null)) {
+      if (a.value() == 0) {
         // Ignore 0 values.
       } else if (a.isLegacySubmit()) {
         submit = a;
       } else {
-        LabelType type = labelTypes.byLabel(a.getLabelId());
+        LabelType type = labelTypes.byLabel(a.labelId());
         if (type != null) {
           fmt.appendApproval(
               type,
-              a.getValue(),
-              a.getAccountId(),
-              accountCache.get(a.getAccountId()).map(AccountState::getAccount));
+              a.value(),
+              a.accountId(),
+              accountCache.get(a.accountId()).map(AccountState::account));
         }
       }
     }
     if (submit != null) {
       fmt.appendSubmittedBy(
-          submit.getAccountId(),
-          accountCache.get(submit.getAccountId()).map(AccountState::getAccount));
-      fmt.appendSubmittedAt(submit.getGranted());
+          submit.accountId(), accountCache.get(submit.accountId()).map(AccountState::account));
+      fmt.appendSubmittedAt(submit.granted());
     }
 
     UrlFormatter uf = urlFormatter.get();
     if (uf != null && uf.getWebUrl().isPresent()) {
-      fmt.appendReviewedOn(uf, notes.getChange().getProject(), ps.getId().changeId());
+      fmt.appendReviewedOn(uf, notes.getChange().getProject(), ps.id().changeId());
     }
     fmt.appendProject(project.get());
     fmt.appendBranch(change.getDest().branch());
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/ExportReviewNotes.java b/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/ExportReviewNotes.java
index 1d512c6..e8ece83 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/ExportReviewNotes.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/ExportReviewNotes.java
@@ -20,8 +20,8 @@
 import com.google.common.collect.ListMultimap;
 import com.google.common.collect.Maps;
 import com.google.common.collect.MultimapBuilder;
+import com.google.gerrit.entities.Project;
 import com.google.gerrit.extensions.restapi.RestApiException;
-import com.google.gerrit.reviewdb.client.Project;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.notedb.ChangeNotes;
 import com.google.gerrit.server.update.RetryHelper;
@@ -54,6 +54,8 @@
 
   @Inject private RetryHelper retryHelper;
 
+  private static final Object lock = new Object();
+
   private ListMultimap<Project.NameKey, ChangeNotes> changes;
   private ThreadSafeProgressMonitor monitor;
 
@@ -88,30 +90,31 @@
 
   private void export(Project.NameKey project, List<ChangeNotes> notes)
       throws RestApiException, UpdateException {
-    retryHelper.execute(
-        updateFactory -> {
-          try (Repository git = gitManager.openRepository(project)) {
-            CreateReviewNotes crn = reviewNotesFactory.create(project, git);
-            crn.createNotes(notes, monitor);
-            crn.commitNotes();
-          } catch (RepositoryNotFoundException e) {
-            stderr.println("Unable to open project: " + project.get());
-          }
-          return null;
-        },
-        RetryHelper.options()
-            .listener(
-                new RetryListener() {
-                  @Override
-                  public <V> void onRetry(Attempt<V> attempt) {
-                    monitor.update(-notes.size());
-                  }
-                })
-            .build());
+    retryHelper
+        .changeUpdate(
+            "exportReviewNotes",
+            updateFactory -> {
+              try (Repository git = gitManager.openRepository(project)) {
+                CreateReviewNotes crn = reviewNotesFactory.create(project, git);
+                crn.createNotes(notes, monitor);
+                crn.commitNotes();
+              } catch (RepositoryNotFoundException e) {
+                stderr.println("Unable to open project: " + project.get());
+              }
+              return null;
+            })
+        .listener(
+            new RetryListener() {
+              @Override
+              public <V> void onRetry(Attempt<V> attempt) {
+                monitor.update(-notes.size());
+              }
+            })
+        .call();
   }
 
   private Map.Entry<Project.NameKey, List<ChangeNotes>> next() {
-    synchronized (changes) {
+    synchronized (lock) {
       if (changes.isEmpty()) {
         return null;
       }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/HeaderFormatter.java b/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/HeaderFormatter.java
index 5559eeb..480a268 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/HeaderFormatter.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/HeaderFormatter.java
@@ -19,9 +19,9 @@
 import com.google.common.base.Strings;
 import com.google.gerrit.common.data.LabelType;
 import com.google.gerrit.common.data.LabelValue;
-import com.google.gerrit.reviewdb.client.Account;
-import com.google.gerrit.reviewdb.client.Change;
-import com.google.gerrit.reviewdb.client.Project;
+import com.google.gerrit.entities.Account;
+import com.google.gerrit.entities.Change;
+import com.google.gerrit.entities.Project;
 import com.google.gerrit.server.config.UrlFormatter;
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
@@ -76,20 +76,20 @@
    */
   private void appendUserData(Account.Id accountId, Optional<Account> account) {
     checkState(
-        !account.isPresent() || accountId.equals(account.get().getId()), "mismatching account IDs");
+        !account.isPresent() || accountId.equals(account.get().id()), "mismatching account IDs");
 
     boolean needSpace = false;
     boolean wroteData = false;
 
     if (account.isPresent()) {
-      String fullName = account.get().getFullName();
+      String fullName = account.get().fullName();
       if (!Strings.isNullOrEmpty(fullName)) {
         sb.append(fullName);
         needSpace = true;
         wroteData = true;
       }
 
-      String preferredEmail = account.get().getPreferredEmail();
+      String preferredEmail = account.get().preferredEmail();
       if (!Strings.isNullOrEmpty(preferredEmail)) {
         if (needSpace) {
           sb.append(" ");
diff --git a/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/RefUpdateListener.java b/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/RefUpdateListener.java
index 3365abe..311a808 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/RefUpdateListener.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/reviewnotes/RefUpdateListener.java
@@ -15,10 +15,10 @@
 package com.googlesource.gerrit.plugins.reviewnotes;
 
 import com.google.common.flogger.FluentLogger;
+import com.google.gerrit.entities.Project;
+import com.google.gerrit.entities.RefNames;
 import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
 import com.google.gerrit.extensions.restapi.RestApiException;
-import com.google.gerrit.reviewdb.client.Project;
-import com.google.gerrit.reviewdb.client.RefNames;
 import com.google.gerrit.server.config.GerritServerConfig;
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.git.ProjectRunnable;
@@ -96,20 +96,23 @@
       return;
     }
     try {
-      retryHelper.execute(
-          updateFactory -> {
-            Project.NameKey projectName = Project.nameKey(e.getProjectName());
-            try (Repository git = repoManager.openRepository(projectName)) {
-              CreateReviewNotes crn = reviewNotesFactory.create(projectName, git);
-              crn.createNotes(
-                  e.getRefName(),
-                  ObjectId.fromString(e.getOldObjectId()),
-                  ObjectId.fromString(e.getNewObjectId()),
-                  null);
-              crn.commitNotes();
-            }
-            return null;
-          });
+      retryHelper
+          .changeUpdate(
+              "createReviewNotes",
+              updateFactory -> {
+                Project.NameKey projectName = Project.nameKey(e.getProjectName());
+                try (Repository git = repoManager.openRepository(projectName)) {
+                  CreateReviewNotes crn = reviewNotesFactory.create(projectName, git);
+                  crn.createNotes(
+                      e.getRefName(),
+                      ObjectId.fromString(e.getOldObjectId()),
+                      ObjectId.fromString(e.getNewObjectId()),
+                      null);
+                  crn.commitNotes();
+                }
+                return null;
+              })
+          .call();
     } catch (RestApiException | UpdateException x) {
       logger.atSevere().withCause(x).log(x.getMessage());
     }