Fix inherited owners for deeply nested dirs
Change-Id: I08a23b0b83bdc2bddef8e93bd5098d4698d99e8d
Bug-Id: Issue 6305
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 8413704..70a1af4 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
@@ -170,7 +170,6 @@
throws IOException {
String[] parts = path.split("/");
PathOwnersEntry currentEntry = rootEntry;
- Set<Id> currentOwners = currentEntry.getOwners();
StringBuilder builder = new StringBuilder();
if (rootEntry.isInherited()) {
@@ -181,7 +180,6 @@
}
if (currentEntry.getOwners().isEmpty()) {
currentEntry.setOwners(projectEntry.getOwners());
- currentOwners = currentEntry.getOwners();
}
if (currentEntry.getOwnersPath() == null) {
currentEntry.setOwnersPath(projectEntry.getOwnersPath());
@@ -201,7 +199,7 @@
} else {
String ownersPath = partial + "OWNERS";
Optional<OwnersConfig> conf = getOwnersConfig(ownersPath, branch);
- final Set<Id> owners = currentOwners;
+ final Set<Id> owners = currentEntry.getOwners();
currentEntry =
conf.map(c -> new PathOwnersEntry(ownersPath, c, accounts, owners))
.orElse(currentEntry);
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 cb33518..1b77177 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
@@ -76,6 +76,25 @@
}
@Test
+ public void testClassicWithInheritanceAndDeepNesting() throws Exception {
+ expectConfig("OWNERS", createConfig(true, owners(USER_C_EMAIL_COM)));
+ expectConfig("dir/OWNERS", createConfig(true, owners(USER_B_EMAIL_COM)));
+ expectConfig("dir/subdir/OWNERS",
+ createConfig(true, owners(USER_A_EMAIL_COM)));
+
+ creatingPatchList(Arrays.asList("dir/subdir/file.txt"));
+ replayAll();
+
+ PathOwners owners = new PathOwners(accounts, repository, branch, patchList);
+ Set<Account.Id> ownersSet = owners.get().get("dir/subdir/OWNERS");
+
+ assertEquals(3, ownersSet.size());
+ assertTrue(ownersSet.contains(USER_A_ID));
+ assertTrue(ownersSet.contains(USER_B_ID));
+ assertTrue(ownersSet.contains(USER_C_ID));
+ }
+
+ @Test
public void testParsingYaml() {
String yamlString = (
"inherited: true\n" +
@@ -83,6 +102,7 @@
"- " + USER_C_EMAIL_COM);
Optional<OwnersConfig> config = getOwnersConfig(yamlString);
assertTrue(config.isPresent());
+ assertTrue(config.get().isInherited());
assertEquals(1,config.get().getOwners().size());
assertTrue(config.get().getOwners().contains(USER_C_EMAIL_COM));
}