Merge branch 'stable-3.0'

* stable-3.0:
  Allow to configure the number of hook execution workers
  Submit: Handle potentially missing username

Change-Id: Ib92b3db88ad33e56b3f7bfcf1ba8069a318125e4
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookArgs.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookArgs.java
index 87d4291..190826e 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookArgs.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookArgs.java
@@ -105,7 +105,7 @@
           uf.flatMap(
                   f ->
                       f.getChangeViewUrl(
-                          new Project.NameKey(change.project), new Change.Id(change._number)))
+                          Project.nameKey(change.project), Change.id(change._number)))
               .orElse(""));
     } else {
       args.add("");
@@ -131,7 +131,7 @@
 
   private String format(AccountInfo account) {
     return String.format(
-        "\"%s\"", identifiedUserFactory.create(new Account.Id(account._accountId)).getNameEmail());
+        "\"%s\"", identifiedUserFactory.create(Account.id(account._accountId)).getNameEmail());
   }
 
   @Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookMetrics.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookMetrics.java
index 9b0bc82..e5dd877 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookMetrics.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookMetrics.java
@@ -31,7 +31,7 @@
 
   @Inject
   HookMetrics(MetricMaker metricMaker) {
-    Field<String> field = Field.ofString("hook");
+    Field<String> field = Field.ofString("hook").build();
     latency =
         metricMaker.newTimer(
             "latency",
@@ -47,7 +47,7 @@
             "timeout", new Description("Hook execution timeouts").setRate(), field);
   }
 
-  public Timer1.Context start(String name) {
+  public Timer1.Context<String> start(String name) {
     return latency.start(name);
   }
 
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookQueue.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookQueue.java
index 50ba975..c8f154a 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookQueue.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookQueue.java
@@ -21,6 +21,7 @@
 import com.google.inject.Inject;
 import java.nio.file.Files;
 import java.nio.file.Path;
+import java.util.concurrent.Future;
 import java.util.concurrent.ScheduledExecutorService;
 import org.eclipse.jgit.lib.Config;
 
@@ -47,7 +48,8 @@
       logger.atFine().log("Hook file not found: %s", hook.toAbsolutePath());
       return;
     }
-    queue.submit(new HookTask.Async(projectName, hook, args));
+    @SuppressWarnings("unused")
+    Future<?> ignored = queue.submit(new HookTask.Async(projectName, hook, args));
   }
 
   @Override
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java
index 8b06a24..ee59fb4 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/HookTask.java
@@ -85,7 +85,7 @@
   public HookResult runHook() {
     HookResult result = null;
     String name = getName();
-    try (Timer1.Context timer = args.metrics.start(name)) {
+    try (Timer1.Context<String> timer = args.metrics.start(name)) {
       args.metrics.count(name);
       List<String> argv = new ArrayList<>(1 + args.get().size());
       argv.add(hook.toAbsolutePath().toString());
@@ -98,7 +98,7 @@
       env.put("GERRIT_SITE", sitePath.toAbsolutePath().toString());
 
       if (projectName != null) {
-        try (Repository git = args.gitManager.openRepository(new Project.NameKey(projectName))) {
+        try (Repository git = args.gitManager.openRepository(Project.nameKey(projectName))) {
           pb.directory(git.getDirectory());
           env.put("GIT_DIR", git.getDirectory().getAbsolutePath());
         }
diff --git a/src/main/java/com/googlesource/gerrit/plugins/hooks/Submit.java b/src/main/java/com/googlesource/gerrit/plugins/hooks/Submit.java
index e383200..f23cfa7 100644
--- a/src/main/java/com/googlesource/gerrit/plugins/hooks/Submit.java
+++ b/src/main/java/com/googlesource/gerrit/plugins/hooks/Submit.java
@@ -14,7 +14,7 @@
 
 package com.googlesource.gerrit.plugins.hooks;
 
-import com.google.gerrit.reviewdb.client.Branch;
+import com.google.gerrit.reviewdb.client.BranchNameKey;
 import com.google.gerrit.reviewdb.client.PatchSet;
 import com.google.gerrit.server.IdentifiedUser;
 import com.google.gerrit.server.git.CodeReviewCommit;
@@ -41,7 +41,7 @@
       Repository repo,
       CodeReviewCommit commit,
       ProjectState destProject,
-      Branch.NameKey destBranch,
+      BranchNameKey destBranch,
       PatchSet.Id patchSetId,
       IdentifiedUser caller)
       throws MergeValidationException {
@@ -49,7 +49,7 @@
 
     HookArgs args = hookFactory.createArgs();
     args.add("--project", projectName);
-    args.add("--branch", destBranch.get());
+    args.add("--branch", destBranch.branch());
     args.add("--submitter", caller.getNameEmail());
     args.add("--submitter-username", caller.getUserName().orElse(null));
     args.add("--patchset", patchSetId.get());