Merge branch 'stable-2.14' into stable-2.15

* stable-2.14:
  Allow OWNERS file with single owner
  Revert "Fix label name generated by workskace-status.sh"

Change-Id: Ic7634bbfd5a0770caf714bcb3474a6051cc0c363
diff --git a/.gitignore b/.gitignore
index f07afcd..6042b9d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,7 +3,6 @@
 *.ipr
 .idea
 /.classpath
-/.primary_build_tool
 /.project
 /.settings/
 /bazel-*
diff --git a/WORKSPACE b/WORKSPACE
index 2b45965..7c2b01b 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "b17f700875f5f2a96942d434516ba8e6088463d4",
+    commit = "087da1f6ca119ad5c4bc443926426ddf44dcde3a",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
diff --git a/lib/prolog/BUILD b/lib/prolog/BUILD
index e69de29..c5ed0b7 100644
--- a/lib/prolog/BUILD
+++ b/lib/prolog/BUILD
@@ -0,0 +1 @@
+# Empty file required by Bazel
diff --git a/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java b/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java
index aeb5960..67fdb1e 100644
--- a/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java
+++ b/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java
@@ -120,7 +120,7 @@
       newId = ObjectId.fromString(event.getNewObjectId());
     }
 
-    PatchListKey plKey = new PatchListKey(null, newId, IGNORE_NONE);
+    PatchListKey plKey = PatchListKey.againstCommit(null, newId, IGNORE_NONE);
     try {
       return patchListCache.get(plKey, change.getProject());
     } catch (PatchListNotAvailableException e) {
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/AccountsImpl.java b/owners-common/src/main/java/com/vmware/gerrit/owners/common/AccountsImpl.java
index 07e9af8..f22712a 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/AccountsImpl.java
+++ b/owners-common/src/main/java/com/vmware/gerrit/owners/common/AccountsImpl.java
@@ -14,8 +14,8 @@
 
 package com.vmware.gerrit.owners.common;
 
-import static com.google.gerrit.server.account.ExternalId.SCHEME_GERRIT;
-import static com.google.gerrit.server.account.ExternalId.SCHEME_MAILTO;
+import static com.google.gerrit.server.account.externalids.ExternalId.SCHEME_GERRIT;
+import static com.google.gerrit.server.account.externalids.ExternalId.SCHEME_MAILTO;
 
 import com.google.gerrit.common.errors.NoSuchGroupException;
 import com.google.gerrit.reviewdb.client.Account;
@@ -25,9 +25,10 @@
 import com.google.gerrit.server.account.AccountCache;
 import com.google.gerrit.server.account.AccountResolver;
 import com.google.gerrit.server.account.AccountState;
-import com.google.gerrit.server.account.ExternalId;
 import com.google.gerrit.server.account.GroupCache;
 import com.google.gerrit.server.account.GroupMembers;
+import com.google.gerrit.server.account.externalids.ExternalId;
+import com.google.gerrit.server.group.InternalGroup;
 import com.google.gerrit.server.project.NoSuchProjectException;
 import com.google.gerrit.server.util.ManualRequestContext;
 import com.google.gerrit.server.util.OneOffRequestContext;
@@ -38,6 +39,7 @@
 import java.util.Optional;
 import java.util.Set;
 import java.util.stream.Collectors;
+import org.eclipse.jgit.errors.ConfigInvalidException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -76,19 +78,22 @@
   }
 
   private Set<Id> findAccountsInGroup(String groupNameOrUUID) {
-    AccountGroup group =
-        Optional.ofNullable(groupCache.get(new AccountGroup.NameKey(groupNameOrUUID)))
+    Optional<InternalGroup> group =
+        groupCache
+            .get(new AccountGroup.NameKey(groupNameOrUUID))
+            .map(Optional::of)
             .orElse(groupCache.get(new AccountGroup.UUID(groupNameOrUUID)));
 
-    if (group == null) {
+    if (!group.isPresent()) {
       log.warn("Group {} was not found", groupNameOrUUID);
+      return Collections.emptySet();
     }
 
     try (ManualRequestContext ctx = oneOffRequestContext.openAs(adminUser.getAccountId())) {
 
       return groupMembers
           .create(adminUser)
-          .listAccounts(group.getGroupUUID(), null)
+          .listAccounts(group.get().getGroupUUID(), null)
           .stream()
           .map(Account::getId)
           .collect(Collectors.toSet());
@@ -100,7 +105,7 @@
 
   private Set<Account.Id> findUserOrEmail(String nameOrEmail) {
     try (ManualRequestContext ctx = oneOffRequestContext.open()) {
-      Set<Id> accountIds = resolver.findAll(ctx.getReviewDbProvider().get(), nameOrEmail);
+      Set<Id> accountIds = resolver.findAll(nameOrEmail);
       if (accountIds.isEmpty()) {
         log.warn("User '{}' does not resolve to any account.", nameOrEmail);
         return accountIds;
@@ -132,7 +137,7 @@
       }
 
       return accountIds;
-    } catch (OrmException e) {
+    } catch (OrmException | IOException | ConfigInvalidException e) {
       log.error("Error trying to resolve user " + nameOrEmail, e);
       return Collections.emptySet();
     }
diff --git a/tools/bazel.rc b/tools/bazel.rc
new file mode 100644
index 0000000..4ed16cf
--- /dev/null
+++ b/tools/bazel.rc
@@ -0,0 +1,2 @@
+build --workspace_status_command=./tools/workspace-status.sh
+test --build_tests_only
diff --git a/tools/bzl/BUILD b/tools/bzl/BUILD
index e69de29..c5ed0b7 100644
--- a/tools/bzl/BUILD
+++ b/tools/bzl/BUILD
@@ -0,0 +1 @@
+# Empty file required by Bazel