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));
   }