Merge "Fix typo in owners docs"
diff --git a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/AutoassignConfigModule.java b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/AutoassignConfigModule.java
index dfa812d..865d971 100644
--- a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/AutoassignConfigModule.java
+++ b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/AutoassignConfigModule.java
@@ -33,7 +33,7 @@
         .annotatedWith(Exports.named(PROJECT_CONFIG_AUTOASSIGN_WIP_CHANGES))
         .toInstance(
             new ProjectConfigEntry(
-                "Auto-assign WIP changes", InheritableBoolean.TRUE, InheritableBoolean.class));
+                "Auto-assign WIP changes", InheritableBoolean.INHERIT, InheritableBoolean.class));
     bind(ProjectConfigEntry.class)
         .annotatedWith(Exports.named(PROJECT_CONFIG_AUTOASSIGN_FIELD))
         .toInstance(
diff --git a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/SyncReviewerManager.java b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/SyncReviewerManager.java
index 83ba531..efd5a37 100644
--- a/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/SyncReviewerManager.java
+++ b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/SyncReviewerManager.java
@@ -137,13 +137,15 @@
         }
 
         in.ignoreAutomaticAttentionSetRules = true;
-        in.addToAttentionSet =
-            ownersForAttentionSet.get().addToAttentionSet(changeInfo, reviewersAccounts).stream()
-                .map(
-                    (reviewer) ->
-                        new AttentionSetInput(
-                            reviewer.toString(), "Selected as member of the OWNERS file"))
-                .collect(Collectors.toList());
+        if (ownersForAttentionSet != null) {
+          in.addToAttentionSet =
+              ownersForAttentionSet.get().addToAttentionSet(changeInfo, reviewersAccounts).stream()
+                  .map(
+                      (reviewer) ->
+                          new AttentionSetInput(
+                              reviewer.toString(), "Selected as member of the OWNERS file"))
+                  .collect(Collectors.toList());
+        }
 
         gApi.changes().id(changeInfo.id).current().review(in);
       }
diff --git a/owners/src/main/java/com/googlesource/gerrit/owners/OwnerPredicateProvider.java b/owners/src/main/java/com/googlesource/gerrit/owners/OwnerPredicateProvider.java
index d15da8e..b83d7a8 100644
--- a/owners/src/main/java/com/googlesource/gerrit/owners/OwnerPredicateProvider.java
+++ b/owners/src/main/java/com/googlesource/gerrit/owners/OwnerPredicateProvider.java
@@ -18,7 +18,7 @@
 
 import com.google.common.collect.ImmutableSet;
 import com.google.gerrit.extensions.annotations.Listen;
-import com.google.gerrit.server.rules.PredicateProvider;
+import com.google.gerrit.server.rules.prolog.PredicateProvider;
 import com.google.inject.Inject;
 import com.googlesource.gerrit.owners.common.Accounts;
 import com.googlesource.gerrit.owners.common.PathOwnersEntriesCache;
diff --git a/owners/src/main/java/com/googlesource/gerrit/owners/OwnersModule.java b/owners/src/main/java/com/googlesource/gerrit/owners/OwnersModule.java
index be8a6ca..2d5a2b0 100644
--- a/owners/src/main/java/com/googlesource/gerrit/owners/OwnersModule.java
+++ b/owners/src/main/java/com/googlesource/gerrit/owners/OwnersModule.java
@@ -17,7 +17,7 @@
 
 import com.google.common.flogger.FluentLogger;
 import com.google.gerrit.extensions.registration.DynamicSet;
-import com.google.gerrit.server.rules.PredicateProvider;
+import com.google.gerrit.server.rules.prolog.PredicateProvider;
 import com.google.inject.AbstractModule;
 import com.google.inject.Inject;
 import com.googlesource.gerrit.owners.common.PathOwnersEntriesCache;
diff --git a/owners/src/main/java/com/googlesource/gerrit/owners/OwnersStoredValues.java b/owners/src/main/java/com/googlesource/gerrit/owners/OwnersStoredValues.java
index ff8bc18..84cc6a2 100644
--- a/owners/src/main/java/com/googlesource/gerrit/owners/OwnersStoredValues.java
+++ b/owners/src/main/java/com/googlesource/gerrit/owners/OwnersStoredValues.java
@@ -21,8 +21,8 @@
 import com.google.gerrit.server.git.GitRepositoryManager;
 import com.google.gerrit.server.patch.filediff.FileDiffOutput;
 import com.google.gerrit.server.project.ProjectState;
-import com.google.gerrit.server.rules.StoredValue;
-import com.google.gerrit.server.rules.StoredValues;
+import com.google.gerrit.server.rules.prolog.StoredValue;
+import com.google.gerrit.server.rules.prolog.StoredValues;
 import com.googlecode.prolog_cafe.lang.Prolog;
 import com.googlesource.gerrit.owners.common.Accounts;
 import com.googlesource.gerrit.owners.common.InvalidOwnersFileException;
diff --git a/owners/src/main/java/gerrit_owners/PRED_code_review_user_1.java b/owners/src/main/java/gerrit_owners/PRED_code_review_user_1.java
index a2dd06b..92df174 100644
--- a/owners/src/main/java/gerrit_owners/PRED_code_review_user_1.java
+++ b/owners/src/main/java/gerrit_owners/PRED_code_review_user_1.java
@@ -20,7 +20,7 @@
 import com.google.gerrit.entities.LabelType;
 import com.google.gerrit.entities.LabelValue;
 import com.google.gerrit.server.query.change.ChangeData;
-import com.google.gerrit.server.rules.StoredValues;
+import com.google.gerrit.server.rules.prolog.StoredValues;
 import com.googlecode.prolog_cafe.exceptions.PrologException;
 import com.googlecode.prolog_cafe.lang.IntegerTerm;
 import com.googlecode.prolog_cafe.lang.JavaObjectTerm;
diff --git a/owners/src/main/java/gerrit_owners/PRED_file_owners_2.java b/owners/src/main/java/gerrit_owners/PRED_file_owners_2.java
index cbb23cf..11f1a74 100644
--- a/owners/src/main/java/gerrit_owners/PRED_file_owners_2.java
+++ b/owners/src/main/java/gerrit_owners/PRED_file_owners_2.java
@@ -18,8 +18,8 @@
 
 import com.google.gerrit.entities.Account;
 import com.google.gerrit.server.IdentifiedUser;
-import com.google.gerrit.server.rules.PrologEnvironment;
-import com.google.gerrit.server.rules.StoredValues;
+import com.google.gerrit.server.rules.prolog.PrologEnvironment;
+import com.google.gerrit.server.rules.prolog.StoredValues;
 import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.exceptions.PrologException;
 import com.googlecode.prolog_cafe.lang.Operation;
diff --git a/owners/src/main/resources/Documentation/config.md b/owners/src/main/resources/Documentation/config.md
index 09f6e6d..5b85b7e 100644
--- a/owners/src/main/resources/Documentation/config.md
+++ b/owners/src/main/resources/Documentation/config.md
@@ -160,7 +160,7 @@
 > configuration is used) so that owners don't have to be granted with the
 > maximum label's score. Note that only single digit (0..9) is allowed.
 
-For example, imagine the following tree:
+For example, imagine the following tree with a default Gerrit project labels configuration:
 
 ```
 /OWNERS
@@ -212,7 +212,7 @@
 - Doug Smith
 ```
 
-### When `owners.enableSubmitRequirement = true`
+### When `owners.enableSubmitRequirement = true` with a default Gerrit project labels configuration
 
 Then Gerrit would:
 
@@ -263,7 +263,7 @@
 - Doug Smith
 ```
 
-### When `owners.enableSubmitRequirement = true`
+### When `owners.enableSubmitRequirement = true` with a default Gerrit project labels configuration
 
 This case is supported with the `Code-Review` label and `OWNERS` file
 modifications.
@@ -348,7 +348,7 @@
      label-Owner-Approved = -1..+1 group Registered Users
 ```
 
-### When `owners.enableSubmitRequirement = true`
+### When `owners.enableSubmitRequirement = true` with a default Gerrit project labels configuration
 
 Given now an OWNERS configuration of:
 
@@ -398,7 +398,7 @@
 shouldn't be granted with `Code-Review +2` for all project files as it might be
 outside of their comptenence/comfort zone.
 
-### When `owners.enableSubmitRequirement = true`
+### When `owners.enableSubmitRequirement = true` with a default Gerrit project labels configuration
 
 Given an OWNERS configuration of:
 
@@ -439,7 +439,7 @@
   - Matt Designer
 ```
 
-### When `owners.enableSubmitRequirement = true`
+### When `owners.enableSubmitRequirement = true` with a default Gerrit project labels configuration
 
 Then for any change that contains files with .sql or .css extensions, besides
 to the default Gerrit submit rules, the extra constraints on the additional
@@ -473,7 +473,7 @@
 
 ## Example 6 - Owners details on a per-file basis
 
-### When `owners.enableSubmitRequirement = true`
+### When `owners.enableSubmitRequirement = true` with a default Gerrit project labels configuration
 
 This case is obsolete and _only_ prolog specific. The list of which file is
 owned by whom is available through the [REST API](rest-api.md).
diff --git a/owners/src/main/resources/Documentation/metrcis.md b/owners/src/main/resources/Documentation/metrics.md
similarity index 100%
rename from owners/src/main/resources/Documentation/metrcis.md
rename to owners/src/main/resources/Documentation/metrics.md
diff --git a/owners/src/test/java/com/googlesource/gerrit/owners/OwnersRegressionIT.java b/owners/src/test/java/com/googlesource/gerrit/owners/OwnersRegressionIT.java
index 2fc37ce..1f23510 100644
--- a/owners/src/test/java/com/googlesource/gerrit/owners/OwnersRegressionIT.java
+++ b/owners/src/test/java/com/googlesource/gerrit/owners/OwnersRegressionIT.java
@@ -72,19 +72,24 @@
 
   private void verifySubmitRequirement(
       Collection<SubmitRequirementResultInfo> requirements, String name, Status status) {
-    assertThat(requirements).hasSize(1);
+    // in post stable-3.10 Gerrit has default submit requirement no-unresolved-comments turned on by
+    // default therefore 2 requirements will be always present
+    assertThat(requirements).hasSize(2);
 
-    SubmitRequirementResultInfo requirement = requirements.iterator().next();
-    if (!requirement.name.equals(name) || !(requirement.status == status)) {
-      throw new AssertionError(
-          String.format(
-              "No submit requirement %s with status %s (existing = %s)",
-              name,
-              status,
-              requirements.stream()
-                  .map(r -> String.format("%s=%s", r.name, r.status))
-                  .collect(toImmutableList())));
+    for (SubmitRequirementResultInfo requirement : requirements) {
+      if (requirement.name.equals(name) && requirement.status == status) {
+        return;
+      }
     }
+
+    throw new AssertionError(
+        String.format(
+            "Could not find submit requirement %s with status %s (results = %s)",
+            name,
+            status,
+            requirements.stream()
+                .map(r -> String.format("%s=%s", r.name, r.status))
+                .collect(toImmutableList())));
   }
 
   private ChangeApi forChange(PushOneCommit.Result r) throws RestApiException {
diff --git a/owners/src/test/java/com/googlesource/gerrit/owners/OwnersSubmitRequirementIT.java b/owners/src/test/java/com/googlesource/gerrit/owners/OwnersSubmitRequirementIT.java
index 0e7e40b..f7421fe 100644
--- a/owners/src/test/java/com/googlesource/gerrit/owners/OwnersSubmitRequirementIT.java
+++ b/owners/src/test/java/com/googlesource/gerrit/owners/OwnersSubmitRequirementIT.java
@@ -16,7 +16,6 @@
 package com.googlesource.gerrit.owners;
 
 import static com.google.common.truth.Truth.assertThat;
-import static com.google.common.truth.Truth8.assertThat;
 
 import com.google.gerrit.acceptance.TestPlugin;
 import com.google.gerrit.acceptance.UseLocalDisk;
diff --git a/owners/src/test/java/com/googlesource/gerrit/owners/OwnersSubmitRequirementITAbstract.java b/owners/src/test/java/com/googlesource/gerrit/owners/OwnersSubmitRequirementITAbstract.java
index 2135b40..ba35cdb 100644
--- a/owners/src/test/java/com/googlesource/gerrit/owners/OwnersSubmitRequirementITAbstract.java
+++ b/owners/src/test/java/com/googlesource/gerrit/owners/OwnersSubmitRequirementITAbstract.java
@@ -16,7 +16,6 @@
 package com.googlesource.gerrit.owners;
 
 import static com.google.common.truth.Truth.assertThat;
-import static com.google.common.truth.Truth8.assertThat;
 import static com.google.gerrit.acceptance.testsuite.project.TestProjectUpdate.allowLabel;
 import static com.google.gerrit.server.group.SystemGroupBackend.REGISTERED_USERS;
 import static com.google.gerrit.server.project.testing.TestLabels.labelBuilder;
@@ -89,7 +88,7 @@
     assertThat(changeNotReady.requirements).isEmpty();
 
     changeApi.current().review(ReviewInput.approve());
-    ChangeInfo changeReady = changeApi.get();
+    ChangeInfo changeReady = forChange(r).get();
     assertThat(changeReady.submittable).isTrue();
     assertThat(changeReady.requirements).isEmpty();
   }
@@ -158,9 +157,10 @@
         forChange(r).get().submitRecords, LabelId.VERIFIED, SubmitRecordInfo.Label.Status.NEED);
 
     changeApi.current().review(new ReviewInput().label(LabelId.VERIFIED, 1));
-    assertThat(changeApi.get().submittable).isTrue();
+    ChangeInfo changeReady = forChange(r).get();
+    assertThat(changeReady.submittable).isTrue();
     verifyHasSubmitRecord(
-        changeApi.get().submitRecords, LabelId.VERIFIED, SubmitRecordInfo.Label.Status.OK);
+        changeReady.submitRecords, LabelId.VERIFIED, SubmitRecordInfo.Label.Status.OK);
   }
 
   @Test
@@ -270,7 +270,7 @@
 
     requestScopeOperations.setApiUser(admin2.id());
     forChange(r).current().review(ReviewInput.recommend());
-    ChangeInfo ownersVoteNotSufficient = changeApi.get();
+    ChangeInfo ownersVoteNotSufficient = forChange(r).get();
     assertThat(ownersVoteNotSufficient.submittable).isFalse();
     verifyChangeReady(ownersVoteNotSufficient);
     verifyHasSubmitRecord(
diff --git a/owners/src/test/java/com/googlesource/gerrit/owners/OwnersSubmitRequirementTest.java b/owners/src/test/java/com/googlesource/gerrit/owners/OwnersSubmitRequirementTest.java
index bd6c232..1a411c3 100644
--- a/owners/src/test/java/com/googlesource/gerrit/owners/OwnersSubmitRequirementTest.java
+++ b/owners/src/test/java/com/googlesource/gerrit/owners/OwnersSubmitRequirementTest.java
@@ -15,7 +15,6 @@
 package com.googlesource.gerrit.owners;
 
 import static com.google.common.truth.Truth.assertThat;
-import static com.google.common.truth.Truth8.assertThat;
 import static com.google.gerrit.server.project.testing.TestLabels.codeReview;
 import static com.google.gerrit.server.project.testing.TestLabels.labelBuilder;
 import static com.google.gerrit.server.project.testing.TestLabels.value;
diff --git a/owners/src/test/java/com/googlesource/gerrit/owners/restapi/GetFilesOwnersITAbstract.java b/owners/src/test/java/com/googlesource/gerrit/owners/restapi/GetFilesOwnersITAbstract.java
index 1633783..4593e33 100644
--- a/owners/src/test/java/com/googlesource/gerrit/owners/restapi/GetFilesOwnersITAbstract.java
+++ b/owners/src/test/java/com/googlesource/gerrit/owners/restapi/GetFilesOwnersITAbstract.java
@@ -41,16 +41,12 @@
 import com.googlesource.gerrit.owners.entities.GroupOwner;
 import com.googlesource.gerrit.owners.entities.Owner;
 import com.googlesource.gerrit.owners.restapi.GetFilesOwners.LabelNotFoundException;
-import java.util.Arrays;
 import java.util.Map;
 import javax.servlet.http.HttpServletResponse;
 import org.apache.commons.compress.utils.Sets;
-import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
 import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
 import org.eclipse.jgit.junit.TestRepository;
-import org.eclipse.jgit.lib.Config;
 import org.eclipse.jgit.transport.FetchResult;
-import org.eclipse.jgit.util.FS;
 import org.junit.Test;
 
 public abstract class GetFilesOwnersITAbstract extends LightweightPluginDaemonTest {
@@ -375,31 +371,18 @@
 
   public TestRepository<InMemoryRepository> cloneProjectWithMetaRefs(Project.NameKey project)
       throws Exception {
-    String uri = registerRepoConnection(project, admin);
+    TestRepository<InMemoryRepository> clonedProject = cloneProject(project);
     String initialRef = "refs/remotes/origin/config";
-    DfsRepositoryDescription desc = new DfsRepositoryDescription("clone of " + project.get());
-
-    InMemoryRepository.Builder b = new InMemoryRepository.Builder().setRepositoryDescription(desc);
-    if (uri.startsWith("ssh://")) {
-      // SshTransport depends on a real FS to read ~/.ssh/config, but InMemoryRepository by default
-      // uses a null FS.
-      // Avoid leaking user state into our tests.
-      b.setFS(FS.detect().setUserHome(null));
-    }
-    InMemoryRepository dest = b.build();
-    Config cfg = dest.getConfig();
-    cfg.setString("remote", "origin", "url", uri);
-    cfg.setStringList(
-        "remote",
-        "origin",
-        "fetch",
-        Arrays.asList(
-            "+refs/heads/*:refs/remotes/origin/*", "+refs/meta/config:refs/remotes/origin/config"));
-    TestRepository<InMemoryRepository> testRepo = GitUtil.newTestRepository(dest);
-    FetchResult result = testRepo.git().fetch().setRemote("origin").call();
+    FetchResult result =
+        clonedProject
+            .git()
+            .fetch()
+            .setRemote("origin")
+            .setRefSpecs("+refs/meta/config:refs/remotes/origin/config")
+            .call();
     if (result.getTrackingRefUpdate(initialRef) != null) {
-      testRepo.reset(initialRef);
+      clonedProject.reset(initialRef);
     }
-    return testRepo;
+    return clonedProject;
   }
 }
diff --git a/owners/src/test/java/com/googlesource/gerrit/owners/restapi/GetFilesOwnersSubmitRequirementsIT.java b/owners/src/test/java/com/googlesource/gerrit/owners/restapi/GetFilesOwnersSubmitRequirementsIT.java
index f5c80b7..d45deb5 100644
--- a/owners/src/test/java/com/googlesource/gerrit/owners/restapi/GetFilesOwnersSubmitRequirementsIT.java
+++ b/owners/src/test/java/com/googlesource/gerrit/owners/restapi/GetFilesOwnersSubmitRequirementsIT.java
@@ -28,6 +28,7 @@
 import com.google.gerrit.entities.RefNames;
 import com.google.gerrit.extensions.api.changes.ReviewInput;
 import com.google.gerrit.extensions.restapi.Response;
+import com.google.gerrit.server.config.SitePaths;
 import com.google.gerrit.server.project.testing.TestLabels;
 import com.google.inject.Inject;
 import com.googlesource.gerrit.owners.common.LabelDefinition;
@@ -44,6 +45,7 @@
 @UseLocalDisk
 public class GetFilesOwnersSubmitRequirementsIT extends GetFilesOwnersITAbstract {
   @Inject private ProjectOperations projectOperations;
+  @Inject private SitePaths sitePaths;
 
   @Override
   public void setUpTestPlugin() throws Exception {
@@ -53,7 +55,7 @@
     // globally
     pluginCfg.setBoolean("owners", null, "enableSubmitRequirement", true);
     Files.writeString(
-        server.getSitePath().resolve("etc").resolve("owners.config"),
+        sitePaths.etc_dir.resolve("owners.config"),
         pluginCfg.toText(),
         StandardOpenOption.CREATE,
         StandardOpenOption.APPEND);