Merge branch 'stable-2.15' into stable-2.16

* stable-2.15:
  Create a user-context if not propagated by Gerrit

Change-Id: I07e432e68185f10eeccdd13a1ea5dccc42f40fd4
diff --git a/WORKSPACE b/WORKSPACE
index a525358..d22a85a 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -3,7 +3,7 @@
 load("//:bazlets.bzl", "load_bazlets")
 
 load_bazlets(
-    commit = "2b1d68959119920e5fa9bdfb9f0cf926bfef4929",
+    commit = "b084bd74743f4303971a2a057bcea4f3352ddf4e",
     #local_path = "/home/<user>/projects/bazlets",
 )
 
diff --git a/config.md b/config.md
index a284e55..b294ae8 100644
--- a/config.md
+++ b/config.md
@@ -21,7 +21,7 @@
 - partial_regex: example
   owners:
       [...]
-- exact: /path/to/file.txt
+- exact: path/to/file.txt
       [...]
 ```
 
@@ -39,7 +39,8 @@
 
 Additional owners can be specified for files selected by other matching
 conditions (matchers section). Matching can be done by file suffix, regex
-(partial or full) and exact string comparison.
+(partial or full) and exact string comparison. For exact match, path is
+relative to the root of the repo.
 
 The plugin analyzes the latest patch set by looking at each file directory and
 building an OWNERS hierarchy. It stops once it finds an OWNERS file that has
@@ -72,7 +73,7 @@
 
 ```yaml
 matchers:
-- suffix: *.config
+- suffix: .config
   owners:
   - Configuration Managers
 ```
@@ -266,4 +267,4 @@
 removed from the "need" section of the change.
 
 In this way, it is always clear which owner needs to provide their feedback on
-which file of the change.
\ No newline at end of file
+which file of the change.
diff --git a/owners-autoassign/BUILD b/owners-autoassign/BUILD
index 42a32bc..463afcb 100644
--- a/owners-autoassign/BUILD
+++ b/owners-autoassign/BUILD
@@ -11,8 +11,8 @@
         "Implementation-Title: Gerrit OWNERS autoassign plugin",
         "Implementation-URL: https://gerrit.googlesource.com/plugins/owners",
         "Gerrit-PluginName: owners-autoassign",
-        "Gerrit-Module: com.vmware.gerrit.owners.common.AutoassignModule",
-        "Gerrit-ApiVersion: 2.15",
+        "Gerrit-Module: com.googlesource.gerrit.owners.common.AutoassignModule",
+        "Gerrit-ApiVersion: 2.16",
     ],
     resources = glob(["src/main/**/*"]),
     deps = [
diff --git a/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/AutoassignModule.java b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/AutoassignModule.java
similarity index 95%
rename from owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/AutoassignModule.java
rename to owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/AutoassignModule.java
index a341505..d6bdaef 100644
--- a/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/AutoassignModule.java
+++ b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/AutoassignModule.java
@@ -14,7 +14,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import com.google.gerrit.extensions.events.GitReferenceUpdatedListener;
 import com.google.gerrit.extensions.registration.DynamicSet;
diff --git a/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java
similarity index 98%
rename from owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java
rename to owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java
index eae0cb8..a0a6263 100644
--- a/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/GitRefListener.java
+++ b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/GitRefListener.java
@@ -14,7 +14,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import static com.google.gerrit.extensions.client.DiffPreferencesInfo.Whitespace.IGNORE_NONE;
 
@@ -132,7 +132,7 @@
     }
   }
 
-  void processEvent(Repository repository, Event event) {
+  public void processEvent(Repository repository, Event event) {
     Change.Id cId = Change.Id.fromRef(event.getRefName());
     Changes changes = api.changes();
     // The provider injected by Gerrit is shared with other workers on the
diff --git a/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/ReviewerManager.java b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/ReviewerManager.java
similarity index 98%
rename from owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/ReviewerManager.java
rename to owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/ReviewerManager.java
index 76e16fa..efb9910 100644
--- a/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/ReviewerManager.java
+++ b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/ReviewerManager.java
@@ -14,7 +14,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import com.google.gerrit.extensions.api.GerritApi;
 import com.google.gerrit.extensions.api.changes.AddReviewerInput;
diff --git a/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/ReviewerManagerException.java b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/ReviewerManagerException.java
similarity index 95%
rename from owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/ReviewerManagerException.java
rename to owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/ReviewerManagerException.java
index 2425514..34b6109 100644
--- a/owners-autoassign/src/main/java/com/vmware/gerrit/owners/common/ReviewerManagerException.java
+++ b/owners-autoassign/src/main/java/com/googlesource/gerrit/owners/common/ReviewerManagerException.java
@@ -14,7 +14,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 public class ReviewerManagerException extends Exception {
   private static final long serialVersionUID = 1L;
diff --git a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerTest.java b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerTest.java
index 8fb940c..e3d4be4 100644
--- a/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerTest.java
+++ b/owners-autoassign/src/test/java/com/vmware/gerrit/owners/common/GitRefListenerTest.java
@@ -22,6 +22,9 @@
 import com.google.gerrit.server.util.OneOffRequestContext;
 import com.google.inject.Inject;
 import com.google.inject.Provider;
+import com.googlesource.gerrit.owners.common.Accounts;
+import com.googlesource.gerrit.owners.common.GitRefListener;
+import com.googlesource.gerrit.owners.common.ReviewerManager;
 import org.eclipse.jgit.lib.Repository;
 import org.junit.Ignore;
 
@@ -49,7 +52,7 @@
   }
 
   @Override
-  void processEvent(Repository repository, Event event) {
+  public void processEvent(Repository repository, Event event) {
     processedEvents++;
   }
 
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/Accounts.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/Accounts.java
similarity index 94%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/Accounts.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/Accounts.java
index 0320414..0fdf717 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/Accounts.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/Accounts.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import com.google.gerrit.reviewdb.client.Account;
 import com.google.inject.ImplementedBy;
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/AccountsImpl.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java
similarity index 88%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/AccountsImpl.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java
index a5e7d26..106a91a 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/AccountsImpl.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/AccountsImpl.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import static com.google.gerrit.server.account.externalids.ExternalId.SCHEME_GERRIT;
 import static com.google.gerrit.server.account.externalids.ExternalId.SCHEME_MAILTO;
@@ -50,7 +50,7 @@
   private final AccountResolver resolver;
   private final AccountCache byId;
   private final GroupCache groupCache;
-  private final GroupMembers.Factory groupMembers;
+  private final GroupMembers groupMembers;
   private final IdentifiedUser adminUser;
   private final OneOffRequestContext oneOffRequestContext;
 
@@ -59,13 +59,13 @@
       AccountResolver resolver,
       AccountCache byId,
       GroupCache groupCache,
-      GroupMembers.Factory groupMembersFactory,
+      GroupMembers groupMembers,
       OneOffRequestContext oneOffRequestContext,
       IdentifiedUser.GenericFactory userFactory) {
     this.resolver = resolver;
     this.byId = byId;
     this.groupCache = groupCache;
-    this.groupMembers = groupMembersFactory;
+    this.groupMembers = groupMembers;
     this.adminUser = userFactory.create(new Account.Id(1000000));
     this.oneOffRequestContext = oneOffRequestContext;
   }
@@ -92,10 +92,10 @@
 
     try (ManualRequestContext ctx = oneOffRequestContext.openAs(adminUser.getAccountId())) {
 
-      return groupMembers.create(adminUser).listAccounts(group.get().getGroupUUID(), null).stream()
+      return groupMembers.listAccounts(group.get().getGroupUUID(), null).stream()
           .map(Account::getId)
           .collect(Collectors.toSet());
-    } catch (NoSuchGroupException | NoSuchProjectException | OrmException | IOException e) {
+    } catch (NoSuchProjectException | OrmException | IOException e) {
       log.error("Unable to list accounts in group " + group, e);
       return Collections.emptySet();
     }
@@ -141,16 +141,20 @@
   }
 
   private boolean isFullMatch(Account.Id id, String nameOrEmail) {
-    AccountState accountState = byId.get(id);
-    Account account = accountState.getAccount();
-    return isFullNameMatch(accountState, nameOrEmail)
+    Optional<AccountState> accountState = byId.get(id);
+    if (!accountState.isPresent()) {
+      return false;
+    }
+
+    Account account = accountState.get().getAccount();
+    return isFullNameMatch(account, nameOrEmail)
         || nameOrEmail.equalsIgnoreCase(account.getPreferredEmail())
-        || accountState.getExternalIds().stream()
+        || accountState.get().getExternalIds().stream()
             .anyMatch(eid -> isEMailMatch(eid, nameOrEmail) || isUsernameMatch(eid, nameOrEmail));
   }
 
-  private boolean isFullNameMatch(AccountState account, String fullName) {
-    return Optional.ofNullable(account.getAccount().getFullName())
+  private boolean isFullNameMatch(Account account, String fullName) {
+    return Optional.ofNullable(account.getFullName())
         .filter(n -> n.trim().equalsIgnoreCase(fullName))
         .isPresent();
   }
@@ -172,7 +176,7 @@
   }
 
   private boolean isActive(Account.Id accountId) {
-    return byId.get(accountId).getAccount().isActive();
+    return byId.get(accountId).map(AccountState::getAccount).map(Account::isActive).orElse(false);
   }
 
   private Optional<String> keySchemeRest(String scheme, ExternalId.Key key) {
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/ConfigurationParser.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/ConfigurationParser.java
similarity index 97%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/ConfigurationParser.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/ConfigurationParser.java
index 48b7bc3..2f5c5c0 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/ConfigurationParser.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/ConfigurationParser.java
@@ -13,9 +13,9 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
-import static com.vmware.gerrit.owners.common.StreamUtils.iteratorStream;
+import static com.googlesource.gerrit.owners.common.StreamUtils.iteratorStream;
 
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/ExactMatcher.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/ExactMatcher.java
similarity index 94%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/ExactMatcher.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/ExactMatcher.java
index 04c3c32..f638a32 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/ExactMatcher.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/ExactMatcher.java
@@ -13,7 +13,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import com.google.gerrit.reviewdb.client.Account;
 import java.util.Set;
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/JgitWrapper.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/JgitWrapper.java
similarity index 97%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/JgitWrapper.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/JgitWrapper.java
index c076c6e..9668af8 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/JgitWrapper.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/JgitWrapper.java
@@ -13,7 +13,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
 import static org.eclipse.jgit.lib.FileMode.TYPE_FILE;
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/Matcher.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/Matcher.java
similarity index 96%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/Matcher.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/Matcher.java
index df0df2b..d57116b 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/Matcher.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/Matcher.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import com.google.gerrit.reviewdb.client.Account;
 import java.util.Set;
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/OptionalUtils.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/OptionalUtils.java
similarity index 94%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/OptionalUtils.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/OptionalUtils.java
index 7a6f83c..f35941d 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/OptionalUtils.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/OptionalUtils.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import java.util.Optional;
 
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/OwnersConfig.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/OwnersConfig.java
similarity index 97%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/OwnersConfig.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/OwnersConfig.java
index e827691..0c29516 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/OwnersConfig.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/OwnersConfig.java
@@ -14,7 +14,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/OwnersMap.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/OwnersMap.java
similarity index 97%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/OwnersMap.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/OwnersMap.java
index 30f796c..8af46e3 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/OwnersMap.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/OwnersMap.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import com.google.common.collect.HashMultimap;
 import com.google.common.collect.Maps;
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/PartialRegExMatcher.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/PartialRegExMatcher.java
similarity index 95%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/PartialRegExMatcher.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/PartialRegExMatcher.java
index e33704b..759170f 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/PartialRegExMatcher.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/PartialRegExMatcher.java
@@ -13,7 +13,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import com.google.gerrit.reviewdb.client.Account;
 import java.util.Set;
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/PathOwners.java
similarity index 98%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/PathOwners.java
index 614ac4c..bb53419 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/PathOwners.java
@@ -14,11 +14,11 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import static com.google.gerrit.reviewdb.client.Patch.COMMIT_MSG;
 import static com.google.gerrit.reviewdb.client.Patch.MERGE_LIST;
-import static com.vmware.gerrit.owners.common.JgitWrapper.getBlobAsBytes;
+import static com.googlesource.gerrit.owners.common.JgitWrapper.getBlobAsBytes;
 
 import com.google.common.collect.Maps;
 import com.google.common.collect.Multimaps;
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwnersEntry.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/PathOwnersEntry.java
similarity index 98%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwnersEntry.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/PathOwnersEntry.java
index a1cf85f..3a7111d 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwnersEntry.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/PathOwnersEntry.java
@@ -14,7 +14,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/RegExMatcher.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/RegExMatcher.java
similarity index 95%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/RegExMatcher.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/RegExMatcher.java
index c4b13ff..2f1c23d 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/RegExMatcher.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/RegExMatcher.java
@@ -13,7 +13,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import com.google.gerrit.reviewdb.client.Account;
 import java.util.Set;
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/StreamUtils.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/StreamUtils.java
similarity index 94%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/StreamUtils.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/StreamUtils.java
index 99bceac..0f8bac3 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/StreamUtils.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/StreamUtils.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import java.util.Iterator;
 import java.util.stream.Stream;
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/SuffixMatcher.java b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/SuffixMatcher.java
similarity index 94%
rename from owners-common/src/main/java/com/vmware/gerrit/owners/common/SuffixMatcher.java
rename to owners-common/src/main/java/com/googlesource/gerrit/owners/common/SuffixMatcher.java
index d7a481f..4c72b7a 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/SuffixMatcher.java
+++ b/owners-common/src/main/java/com/googlesource/gerrit/owners/common/SuffixMatcher.java
@@ -13,7 +13,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import com.google.gerrit.reviewdb.client.Account;
 import java.util.Set;
diff --git a/owners-common/src/test/java/com/vmware/gerrit/owners/common/ClassicConfig.java b/owners-common/src/test/java/com/googlesource/gerrit/owners/common/ClassicConfig.java
similarity index 96%
rename from owners-common/src/test/java/com/vmware/gerrit/owners/common/ClassicConfig.java
rename to owners-common/src/test/java/com/googlesource/gerrit/owners/common/ClassicConfig.java
index ee14e25..e388125 100644
--- a/owners-common/src/test/java/com/vmware/gerrit/owners/common/ClassicConfig.java
+++ b/owners-common/src/test/java/com/googlesource/gerrit/owners/common/ClassicConfig.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import com.google.gerrit.reviewdb.client.Account;
 import org.junit.Ignore;
diff --git a/owners-common/src/test/java/com/vmware/gerrit/owners/common/Config.java b/owners-common/src/test/java/com/googlesource/gerrit/owners/common/Config.java
similarity index 98%
rename from owners-common/src/test/java/com/vmware/gerrit/owners/common/Config.java
rename to owners-common/src/test/java/com/googlesource/gerrit/owners/common/Config.java
index 36d2497..a5df462 100644
--- a/owners-common/src/test/java/com/vmware/gerrit/owners/common/Config.java
+++ b/owners-common/src/test/java/com/googlesource/gerrit/owners/common/Config.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import static org.easymock.EasyMock.anyObject;
 import static org.easymock.EasyMock.eq;
diff --git a/owners-common/src/test/java/com/vmware/gerrit/owners/common/MatcherConfig.java b/owners-common/src/test/java/com/googlesource/gerrit/owners/common/MatcherConfig.java
similarity index 97%
rename from owners-common/src/test/java/com/vmware/gerrit/owners/common/MatcherConfig.java
rename to owners-common/src/test/java/com/googlesource/gerrit/owners/common/MatcherConfig.java
index c1e8637..a2b20d8 100644
--- a/owners-common/src/test/java/com/vmware/gerrit/owners/common/MatcherConfig.java
+++ b/owners-common/src/test/java/com/googlesource/gerrit/owners/common/MatcherConfig.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import org.junit.Ignore;
 
diff --git a/owners-common/src/test/java/com/vmware/gerrit/owners/common/PathOwnersTest.java b/owners-common/src/test/java/com/googlesource/gerrit/owners/common/PathOwnersTest.java
similarity index 98%
rename from owners-common/src/test/java/com/vmware/gerrit/owners/common/PathOwnersTest.java
rename to owners-common/src/test/java/com/googlesource/gerrit/owners/common/PathOwnersTest.java
index 77dc597..42a1796 100644
--- a/owners-common/src/test/java/com/vmware/gerrit/owners/common/PathOwnersTest.java
+++ b/owners-common/src/test/java/com/googlesource/gerrit/owners/common/PathOwnersTest.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
diff --git a/owners-common/src/test/java/com/vmware/gerrit/owners/common/RegexMatcherTest.java b/owners-common/src/test/java/com/googlesource/gerrit/owners/common/RegexMatcherTest.java
similarity index 96%
rename from owners-common/src/test/java/com/vmware/gerrit/owners/common/RegexMatcherTest.java
rename to owners-common/src/test/java/com/googlesource/gerrit/owners/common/RegexMatcherTest.java
index 8d3aa0f..1fd557b 100644
--- a/owners-common/src/test/java/com/vmware/gerrit/owners/common/RegexMatcherTest.java
+++ b/owners-common/src/test/java/com/googlesource/gerrit/owners/common/RegexMatcherTest.java
@@ -13,7 +13,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
diff --git a/owners-common/src/test/java/com/vmware/gerrit/owners/common/RegexTest.java b/owners-common/src/test/java/com/googlesource/gerrit/owners/common/RegexTest.java
similarity index 95%
rename from owners-common/src/test/java/com/vmware/gerrit/owners/common/RegexTest.java
rename to owners-common/src/test/java/com/googlesource/gerrit/owners/common/RegexTest.java
index 51cf937..47f9381 100644
--- a/owners-common/src/test/java/com/vmware/gerrit/owners/common/RegexTest.java
+++ b/owners-common/src/test/java/com/googlesource/gerrit/owners/common/RegexTest.java
@@ -12,14 +12,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import static com.google.common.truth.Truth.assertThat;
-import static com.vmware.gerrit.owners.common.MatcherConfig.exactMatcher;
-import static com.vmware.gerrit.owners.common.MatcherConfig.partialRegexMatcher;
-import static com.vmware.gerrit.owners.common.MatcherConfig.regexMatcher;
-import static com.vmware.gerrit.owners.common.MatcherConfig.suffixMatcher;
-import static com.vmware.gerrit.owners.common.StreamUtils.iteratorStream;
+import static com.googlesource.gerrit.owners.common.MatcherConfig.exactMatcher;
+import static com.googlesource.gerrit.owners.common.MatcherConfig.partialRegexMatcher;
+import static com.googlesource.gerrit.owners.common.MatcherConfig.regexMatcher;
+import static com.googlesource.gerrit.owners.common.MatcherConfig.suffixMatcher;
+import static com.googlesource.gerrit.owners.common.StreamUtils.iteratorStream;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 import static org.powermock.api.easymock.PowerMock.replayAll;
diff --git a/owners-common/src/test/java/com/vmware/gerrit/owners/common/TestAccounts.java b/owners-common/src/test/java/com/googlesource/gerrit/owners/common/TestAccounts.java
similarity index 95%
rename from owners-common/src/test/java/com/vmware/gerrit/owners/common/TestAccounts.java
rename to owners-common/src/test/java/com/googlesource/gerrit/owners/common/TestAccounts.java
index 7141931..ba48011 100644
--- a/owners-common/src/test/java/com/vmware/gerrit/owners/common/TestAccounts.java
+++ b/owners-common/src/test/java/com/googlesource/gerrit/owners/common/TestAccounts.java
@@ -12,7 +12,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners.common;
+package com.googlesource.gerrit.owners.common;
 
 import com.google.gerrit.reviewdb.client.Account;
 import java.util.Arrays;
diff --git a/owners/BUILD b/owners/BUILD
index d0c1efc..05c1fa7 100644
--- a/owners/BUILD
+++ b/owners/BUILD
@@ -2,7 +2,7 @@
 load("//lib/prolog:prolog.bzl", "prolog_cafe_library")
 
 PROLOG_PREDICATES = glob(["src/main/java/gerrit_owners/**/*.java"]) + [
-    "src/main/java/com/vmware/gerrit/owners/OwnersStoredValues.java",
+    "src/main/java/com/googlesource/gerrit/owners/OwnersStoredValues.java",
 ]
 
 java_library(
@@ -34,8 +34,8 @@
         "Implementation-Title: Gerrit OWNERS plugin",
         "Implementation-URL: https://gerrit.googlesource.com/plugins/owners",
         "Gerrit-PluginName: owners",
-        "Gerrit-Module: com.vmware.gerrit.owners.OwnersModule",
-        "Gerrit-ApiVersion: 2.15",
+        "Gerrit-Module: com.googlesource.gerrit.owners.OwnersModule",
+        "Gerrit-ApiVersion: 2.16",
     ],
     resources = glob(["src/main/resources/**/*"]),
     deps = [
diff --git a/owners/src/main/java/com/vmware/gerrit/owners/CompileStub.java b/owners/src/main/java/com/googlesource/gerrit/owners/CompileStub.java
similarity index 94%
rename from owners/src/main/java/com/vmware/gerrit/owners/CompileStub.java
rename to owners/src/main/java/com/googlesource/gerrit/owners/CompileStub.java
index 66be624..f8cddfb 100644
--- a/owners/src/main/java/com/vmware/gerrit/owners/CompileStub.java
+++ b/owners/src/main/java/com/googlesource/gerrit/owners/CompileStub.java
@@ -13,7 +13,7 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners;
+package com.googlesource.gerrit.owners;
 
 /** A stub class only used for pleasing BUCK. */
 public class CompileStub {}
diff --git a/owners/src/main/java/com/vmware/gerrit/owners/OwnerPredicateProvider.java b/owners/src/main/java/com/googlesource/gerrit/owners/OwnerPredicateProvider.java
similarity index 88%
rename from owners/src/main/java/com/vmware/gerrit/owners/OwnerPredicateProvider.java
rename to owners/src/main/java/com/googlesource/gerrit/owners/OwnerPredicateProvider.java
index 0470aea..ef0b92b 100644
--- a/owners/src/main/java/com/vmware/gerrit/owners/OwnerPredicateProvider.java
+++ b/owners/src/main/java/com/googlesource/gerrit/owners/OwnerPredicateProvider.java
@@ -14,13 +14,13 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners;
+package com.googlesource.gerrit.owners;
 
 import com.google.common.collect.ImmutableSet;
 import com.google.gerrit.extensions.annotations.Listen;
-import com.google.gerrit.rules.PredicateProvider;
+import com.google.gerrit.server.rules.PredicateProvider;
 import com.google.inject.Inject;
-import com.vmware.gerrit.owners.common.Accounts;
+import com.googlesource.gerrit.owners.common.Accounts;
 
 /** Gerrit OWNERS Prolog Predicate Provider. */
 @Listen
diff --git a/owners/src/main/java/com/vmware/gerrit/owners/OwnersModule.java b/owners/src/main/java/com/googlesource/gerrit/owners/OwnersModule.java
similarity index 90%
rename from owners/src/main/java/com/vmware/gerrit/owners/OwnersModule.java
rename to owners/src/main/java/com/googlesource/gerrit/owners/OwnersModule.java
index c4a5f80..750c58e 100644
--- a/owners/src/main/java/com/vmware/gerrit/owners/OwnersModule.java
+++ b/owners/src/main/java/com/googlesource/gerrit/owners/OwnersModule.java
@@ -13,10 +13,10 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners;
+package com.googlesource.gerrit.owners;
 
 import com.google.gerrit.extensions.registration.DynamicSet;
-import com.google.gerrit.rules.PredicateProvider;
+import com.google.gerrit.server.rules.PredicateProvider;
 import com.google.inject.AbstractModule;
 
 public class OwnersModule extends AbstractModule {
diff --git a/owners/src/main/java/com/vmware/gerrit/owners/OwnersStoredValues.java b/owners/src/main/java/com/googlesource/gerrit/owners/OwnersStoredValues.java
similarity index 87%
rename from owners/src/main/java/com/vmware/gerrit/owners/OwnersStoredValues.java
rename to owners/src/main/java/com/googlesource/gerrit/owners/OwnersStoredValues.java
index 97502b1..18abe29 100644
--- a/owners/src/main/java/com/vmware/gerrit/owners/OwnersStoredValues.java
+++ b/owners/src/main/java/com/googlesource/gerrit/owners/OwnersStoredValues.java
@@ -14,14 +14,14 @@
 // See the License for the specific language governing permissions and
 // limitations under the License.
 
-package com.vmware.gerrit.owners;
+package com.googlesource.gerrit.owners;
 
-import com.google.gerrit.rules.StoredValue;
-import com.google.gerrit.rules.StoredValues;
 import com.google.gerrit.server.patch.PatchList;
+import com.google.gerrit.server.rules.StoredValue;
+import com.google.gerrit.server.rules.StoredValues;
 import com.googlecode.prolog_cafe.lang.Prolog;
-import com.vmware.gerrit.owners.common.Accounts;
-import com.vmware.gerrit.owners.common.PathOwners;
+import com.googlesource.gerrit.owners.common.Accounts;
+import com.googlesource.gerrit.owners.common.PathOwners;
 import org.eclipse.jgit.lib.Repository;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
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 06557e2..4e7263a 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
@@ -14,12 +14,12 @@
 
 package gerrit_owners;
 
-import static com.vmware.gerrit.owners.common.StreamUtils.iteratorStream;
+import static com.googlesource.gerrit.owners.common.StreamUtils.iteratorStream;
 
 import com.google.gerrit.reviewdb.client.Account;
-import com.google.gerrit.rules.PrologEnvironment;
-import com.google.gerrit.rules.StoredValues;
 import com.google.gerrit.server.IdentifiedUser;
+import com.google.gerrit.server.rules.PrologEnvironment;
+import com.google.gerrit.server.rules.StoredValues;
 import com.googlecode.prolog_cafe.exceptions.PInstantiationException;
 import com.googlecode.prolog_cafe.exceptions.PrologException;
 import com.googlecode.prolog_cafe.lang.Operation;
@@ -28,8 +28,8 @@
 import com.googlecode.prolog_cafe.lang.SymbolTerm;
 import com.googlecode.prolog_cafe.lang.Term;
 import com.googlecode.prolog_cafe.lang.VariableTerm;
-import com.vmware.gerrit.owners.OwnersStoredValues;
-import com.vmware.gerrit.owners.common.PathOwners;
+import com.googlesource.gerrit.owners.OwnersStoredValues;
+import com.googlesource.gerrit.owners.common.PathOwners;
 import java.io.File;
 import java.util.Map;
 import java.util.Set;
@@ -76,7 +76,7 @@
     }
     Account account = user.asIdentifiedUser().state().getAccount();
     String userName = account.getFullName();
-    return userName;
+    return sanitizeAsSubmitLabel(userName);
   }
 
   public Term createFormattedList(Prolog engine, Term key) {
@@ -86,9 +86,13 @@
         iteratorStream(owners.getFileOwners().get(path).iterator())
             .map(id -> getFullNameFromId(engine, id))
             .collect(Collectors.toSet());
-    String ownVerb = ownersNames.size() > 1 ? " own " : " owns ";
-    String userNames = ownersNames.stream().collect(Collectors.joining(", "));
-    return SymbolTerm.create(userNames + ownVerb + (new File(path)).getName());
+    String ownVerb = ownersNames.size() > 1 ? "-own-" : "-owns-";
+    String userNames = ownersNames.stream().collect(Collectors.joining("-"));
+    return SymbolTerm.create(userNames + ownVerb + sanitizeAsSubmitLabel(new File(path).getName()));
+  }
+
+  private String sanitizeAsSubmitLabel(String anyLabelPart) {
+    return anyLabelPart.replaceAll("[\\s_\\.]+", "-");
   }
 
   private static IdentifiedUser.GenericFactory userFactory(Prolog engine) {
diff --git a/owners/src/main/java/gerrit_owners/PRED_matcher_owner_2.java b/owners/src/main/java/gerrit_owners/PRED_matcher_owner_2.java
index 3afc6c7..5abf7ad 100644
--- a/owners/src/main/java/gerrit_owners/PRED_matcher_owner_2.java
+++ b/owners/src/main/java/gerrit_owners/PRED_matcher_owner_2.java
@@ -26,8 +26,8 @@
 import com.googlecode.prolog_cafe.lang.StructureTerm;
 import com.googlecode.prolog_cafe.lang.SymbolTerm;
 import com.googlecode.prolog_cafe.lang.Term;
-import com.vmware.gerrit.owners.OwnersStoredValues;
-import com.vmware.gerrit.owners.common.PathOwners;
+import com.googlesource.gerrit.owners.OwnersStoredValues;
+import com.googlesource.gerrit.owners.common.PathOwners;
 import java.util.Iterator;
 import java.util.Map;
 
diff --git a/owners/src/main/java/gerrit_owners/PRED_matcher_path_1.java b/owners/src/main/java/gerrit_owners/PRED_matcher_path_1.java
index 3cb3bb9..4bbc734 100644
--- a/owners/src/main/java/gerrit_owners/PRED_matcher_path_1.java
+++ b/owners/src/main/java/gerrit_owners/PRED_matcher_path_1.java
@@ -23,8 +23,8 @@
 import com.googlecode.prolog_cafe.lang.Prolog;
 import com.googlecode.prolog_cafe.lang.SymbolTerm;
 import com.googlecode.prolog_cafe.lang.Term;
-import com.vmware.gerrit.owners.OwnersStoredValues;
-import com.vmware.gerrit.owners.common.PathOwners;
+import com.googlesource.gerrit.owners.OwnersStoredValues;
+import com.googlesource.gerrit.owners.common.PathOwners;
 import java.util.Iterator;
 
 /** 'owner_path'(-Path) */
diff --git a/owners/src/main/java/gerrit_owners/PRED_owner_2.java b/owners/src/main/java/gerrit_owners/PRED_owner_2.java
index 92b77c9..5697a32 100644
--- a/owners/src/main/java/gerrit_owners/PRED_owner_2.java
+++ b/owners/src/main/java/gerrit_owners/PRED_owner_2.java
@@ -26,8 +26,8 @@
 import com.googlecode.prolog_cafe.lang.StructureTerm;
 import com.googlecode.prolog_cafe.lang.SymbolTerm;
 import com.googlecode.prolog_cafe.lang.Term;
-import com.vmware.gerrit.owners.OwnersStoredValues;
-import com.vmware.gerrit.owners.common.PathOwners;
+import com.googlesource.gerrit.owners.OwnersStoredValues;
+import com.googlesource.gerrit.owners.common.PathOwners;
 import java.util.Iterator;
 import java.util.Map;
 
diff --git a/owners/src/main/java/gerrit_owners/PRED_owner_path_1.java b/owners/src/main/java/gerrit_owners/PRED_owner_path_1.java
index 90936e0..df973b3 100644
--- a/owners/src/main/java/gerrit_owners/PRED_owner_path_1.java
+++ b/owners/src/main/java/gerrit_owners/PRED_owner_path_1.java
@@ -23,8 +23,8 @@
 import com.googlecode.prolog_cafe.lang.Prolog;
 import com.googlecode.prolog_cafe.lang.SymbolTerm;
 import com.googlecode.prolog_cafe.lang.Term;
-import com.vmware.gerrit.owners.OwnersStoredValues;
-import com.vmware.gerrit.owners.common.PathOwners;
+import com.googlesource.gerrit.owners.OwnersStoredValues;
+import com.googlesource.gerrit.owners.common.PathOwners;
 import java.util.Iterator;
 
 /** 'owner_path'(-Path) */
diff --git a/owners/src/main/prolog/gerrit_owners.pl b/owners/src/main/prolog/gerrit_owners.pl
index 157f0b6..1fe2a22 100644
--- a/owners/src/main/prolog/gerrit_owners.pl
+++ b/owners/src/main/prolog/gerrit_owners.pl
@@ -24,7 +24,7 @@
 add_owner_approval(In, Out) :-
   owner_path(Path),
   \+ owner_approved(Path),
-  Out = [label('Code-Review from owners', need(_)) | In],
+  Out = [label('Code-Review-from-owners', need(_)) | In],
   !.
 
 add_owner_approval(In, Out) :- In = Out.
@@ -32,7 +32,7 @@
 add_owner_approval(Users, In, Out) :-
   owner_path(Path),
   \+ owner_approved(Users, Path),
-  Out = [label('Code-Review from owners', need(_)) | In],
+  Out = [label('Code-Review-from-owners', need(_)) | In],
   !.
 
 add_owner_approval(_, In, Out) :- In = Out.
@@ -67,7 +67,7 @@
     findall(US,code_review_user(US),Approvers),
     matcher_needed(Approvers,P,W),
     \+ W == [],
-    Out = [label('Code-Review from owners', need(_)) | In], !.
+    Out = [label('Code-Review-from-owners', need(_)) | In], !.
 
 add_match_owner_approval(In,Out) :- Out = In.