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() {