in owners-common/src/main/java/com/googlesource/gerrit/owners/common/PathOwners.java [196:247]
private PathOwnersEntry resolvePathEntry(
String path,
String branch,
PathOwnersEntry projectEntry,
PathOwnersEntry rootEntry,
Map<String, PathOwnersEntry> entries)
throws IOException {
String[] parts = path.split("/");
PathOwnersEntry currentEntry = rootEntry;
StringBuilder builder = new StringBuilder();
if (rootEntry.isInherited()) {
for (Matcher matcher : projectEntry.getMatchers().values()) {
if (!currentEntry.hasMatcher(matcher.getPath())) {
currentEntry.addMatcher(matcher);
}
}
if (currentEntry.getOwners().isEmpty()) {
currentEntry.setOwners(projectEntry.getOwners());
}
if (currentEntry.getOwnersPath() == null) {
currentEntry.setOwnersPath(projectEntry.getOwnersPath());
}
}
// Iterate through the parent paths, not including the file name
// itself
for (int i = 0; i < parts.length - 1; i++) {
String part = parts[i];
builder.append(part).append("/");
String partial = builder.toString();
// Skip if we already parsed this path
if (entries.containsKey(partial)) {
currentEntry = entries.get(partial);
} else {
String ownersPath = partial + "OWNERS";
Optional<OwnersConfig> conf = getOwnersConfig(ownersPath, branch);
final Set<Id> owners = currentEntry.getOwners();
final Set<Id> reviewers = currentEntry.getReviewers();
Collection<Matcher> inheritedMatchers = currentEntry.getMatchers().values();
currentEntry =
conf.map(
c ->
new PathOwnersEntry(
ownersPath, c, accounts, owners, reviewers, inheritedMatchers))
.orElse(currentEntry);
entries.put(partial, currentEntry);
}
}
return currentEntry;
}