Merge "Fix destination branch to resolve OWNERS file"
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 baecfbd..907469d 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
@@ -99,8 +99,8 @@
         Change change = reviewDb.changes().get(id);
         PatchList patchList = getPatchList(event, change);
         if (patchList != null) {
-          PathOwners owners = new PathOwners(accounts,
-              repository, patchList);
+          PathOwners owners =
+              new PathOwners(accounts, repository, change.getDest().get(), patchList);
           Set<Account.Id> allReviewers = Sets.newHashSet();
           allReviewers.addAll(owners.get().values());
           for(Matcher matcher: owners.getMatchers().values()) {
diff --git a/owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java b/owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java
index ca79883..17d6fdd 100644
--- a/owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java
+++ b/owners-common/src/main/java/com/vmware/gerrit/owners/common/PathOwners.java
@@ -62,15 +62,13 @@
 
   private Map<String, Set<Id>> fileOwners;
 
-  public PathOwners(Accounts accounts,
-      Repository repository,
-      PatchList patchList) {
+  public PathOwners(Accounts accounts, Repository repository, String branch, PatchList patchList) {
     this.repository = repository;
     this.patchList = patchList;
     this.parser = new ConfigurationParser(accounts);
     this.accounts = accounts;
 
-    OwnersMap map = fetchOwners();
+    OwnersMap map = fetchOwners(branch);
     owners = Multimaps.unmodifiableSetMultimap(map.getPathOwners());
     matchers = map.getMatchers();
     fileOwners = map.getFileOwners();
@@ -98,12 +96,12 @@
    *
    * @return A structure containing matchers paths to owners
    */
-  private OwnersMap fetchOwners() {
+  private OwnersMap fetchOwners(String branch) {
     OwnersMap ownersMap = new OwnersMap();
     try {
       String rootPath = "OWNERS";
       PathOwnersEntry rootEntry =
-          getOwnersConfig(rootPath).map(
+          getOwnersConfig(rootPath, branch).map(
               conf -> new PathOwnersEntry(rootPath, conf, accounts, Collections
                   .emptySet())).orElse(new PathOwnersEntry());
 
@@ -111,8 +109,7 @@
       Map<String, PathOwnersEntry> entries = new HashMap<>();
       PathOwnersEntry currentEntry = null;
       for (String path : modifiedPaths) {
-        currentEntry =
-            resolvePathEntry(path, rootEntry, entries);
+        currentEntry = resolvePathEntry(path, branch, rootEntry, entries);
 
         // add owners to file for matcher predicates
         ownersMap.addFileOwners(path,currentEntry.getOwners());
@@ -157,8 +154,8 @@
     }
   }
 
-  private PathOwnersEntry resolvePathEntry(String path,
-      PathOwnersEntry rootEntry, Map<String, PathOwnersEntry> entries)
+  private PathOwnersEntry resolvePathEntry(
+      String path, String branch, PathOwnersEntry rootEntry, Map<String, PathOwnersEntry> entries)
       throws IOException {
     String[] parts = path.split("/");
     PathOwnersEntry currentEntry = rootEntry;
@@ -176,7 +173,7 @@
         currentEntry = entries.get(partial);
       } else {
         String ownersPath = partial + "OWNERS";
-        Optional<OwnersConfig> conf = getOwnersConfig(ownersPath);
+        Optional<OwnersConfig> conf = getOwnersConfig(ownersPath, branch);
         currentEntry =
             conf.map(
                 c -> new PathOwnersEntry(ownersPath, c, accounts, currentOwners))
@@ -221,9 +218,9 @@
    * @return config or null if it doesn't exist
    * @throws IOException
    */
-  private Optional<OwnersConfig> getOwnersConfig(String ownersPath)
+  private Optional<OwnersConfig> getOwnersConfig(String ownersPath, String branch)
       throws IOException {
-    return getBlobAsBytes(repository, "master", ownersPath).flatMap(
-        bytes -> parser.getOwnersConfig(bytes));
+    return getBlobAsBytes(repository, branch, ownersPath)
+        .flatMap(bytes -> parser.getOwnersConfig(bytes));
   }
 }
diff --git a/owners-common/src/test/java/com/vmware/gerrit/owners/common/Config.java b/owners-common/src/test/java/com/vmware/gerrit/owners/common/Config.java
index 499b152..8048391 100644
--- a/owners-common/src/test/java/com/vmware/gerrit/owners/common/Config.java
+++ b/owners-common/src/test/java/com/vmware/gerrit/owners/common/Config.java
@@ -30,6 +30,7 @@
 
 import com.google.common.base.Charsets;
 import com.google.gerrit.reviewdb.client.Patch;
+import com.google.gerrit.reviewdb.client.RefNames;
 import com.google.gerrit.reviewdb.server.ReviewDb;
 import com.google.gerrit.server.patch.PatchList;
 import com.google.gerrit.server.patch.PatchListEntry;
@@ -41,6 +42,7 @@
   protected PatchList patchList;
   protected ConfigurationParser parser;
   protected TestAccounts accounts = new TestAccounts();
+  protected String branch = "master";
 
   public void setup() throws Exception {
     PowerMock.mockStatic(JgitWrapper.class);
@@ -89,8 +91,7 @@
     return parser.getOwnersConfig(string.getBytes(Charsets.UTF_8));
   }
 
-  public String createConfig(boolean inherited, String[] owners,
-      MatcherConfig... matchers) {
+  public String createConfig(boolean inherited, String[] owners, MatcherConfig... matchers) {
     StringBuilder sb = new StringBuilder();
     sb.append("inherited: " + inherited + "\n");
     if (owners.length > 0) {
diff --git a/owners-common/src/test/java/com/vmware/gerrit/owners/common/PathOwnersTest.java b/owners-common/src/test/java/com/vmware/gerrit/owners/common/PathOwnersTest.java
index fea518e..cb33518 100644
--- a/owners-common/src/test/java/com/vmware/gerrit/owners/common/PathOwnersTest.java
+++ b/owners-common/src/test/java/com/vmware/gerrit/owners/common/PathOwnersTest.java
@@ -49,7 +49,7 @@
     creatingPatchList(Arrays.asList("classic/file.txt"));
     replayAll();
 
-    PathOwners owners = new PathOwners(accounts, repository, patchList);
+    PathOwners owners = new PathOwners(accounts, repository, branch, patchList);
     Set<Account.Id> ownersSet = owners.get().get("classic/OWNERS");
     assertEquals(2, ownersSet.size());
     assertTrue(ownersSet.contains(USER_A_ID));
@@ -65,7 +65,7 @@
     creatingPatchList(Arrays.asList("classic/file.txt"));
     replayAll();
 
-    PathOwners owners2 = new PathOwners(accounts, repository, patchList);
+    PathOwners owners2 = new PathOwners(accounts, repository, branch, patchList);
     Set<Account.Id> ownersSet2 = owners2.get().get("classic/OWNERS");
 
     // in this case we are inheriting the acct3 from /OWNERS
diff --git a/owners-common/src/test/java/com/vmware/gerrit/owners/common/RegexTest.java b/owners-common/src/test/java/com/vmware/gerrit/owners/common/RegexTest.java
index 68a7cae..f06edb7 100644
--- a/owners-common/src/test/java/com/vmware/gerrit/owners/common/RegexTest.java
+++ b/owners-common/src/test/java/com/vmware/gerrit/owners/common/RegexTest.java
@@ -144,7 +144,7 @@
     replayAll();
 
     // function under test
-    PathOwners owners = new PathOwners(accounts, repository, patchList);
+    PathOwners owners = new PathOwners(accounts, repository, branch, patchList);
 
     // assertions on classic owners
     Set<Account.Id> ownersSet = owners.get().get("project/OWNERS");
@@ -242,7 +242,7 @@
     creatingPatch("project/file.sql", "another.txt");
     replayAll();
 
-    PathOwners owners = new PathOwners(accounts, repository, patchList);
+    PathOwners owners = new PathOwners(accounts, repository, branch, patchList);
 
     Set<String> ownedFiles = owners.getFileOwners().keySet();
     assertThat(ownedFiles).containsExactly("project/file.sql");
diff --git a/owners/src/main/java/com/vmware/gerrit/owners/OwnersStoredValues.java b/owners/src/main/java/com/vmware/gerrit/owners/OwnersStoredValues.java
index 19092af..9c2e27f 100644
--- a/owners/src/main/java/com/vmware/gerrit/owners/OwnersStoredValues.java
+++ b/owners/src/main/java/com/vmware/gerrit/owners/OwnersStoredValues.java
@@ -42,14 +42,16 @@
       return;
     }
     log.info("Initializing OwnerStoredValues");
-    PATH_OWNERS = new StoredValue<PathOwners>() {
-      @Override
-      protected PathOwners createValue(Prolog engine) {
-        PatchList patchList = StoredValues.PATCH_LIST.get(engine);
-        Repository repository = StoredValues.REPOSITORY.get(engine);
-        return new PathOwners(accounts, repository, patchList);
-      }
-    };
+    PATH_OWNERS =
+        new StoredValue<PathOwners>() {
+          @Override
+          protected PathOwners createValue(Prolog engine) {
+            PatchList patchList = StoredValues.PATCH_LIST.get(engine);
+            Repository repository = StoredValues.REPOSITORY.get(engine);
+            String branch = StoredValues.getChange(engine).getDest().get();
+            return new PathOwners(accounts, repository, branch, patchList);
+          }
+        };
   }
 
   private OwnersStoredValues() {