Defer branch visibility checks and reuse CodeOwnerResolver

In AbstractGetCodeOwnersForPath, filterCodeOwners previously checked
RefPermission.READ (isVisibleTo) on all candidate code owners across
the entire OWNERS hierarchy before scoring, sorting, and limiting the
results. Additionally, codeOwnerResolver.get() was called for each
visited OWNERS file, discarding the per-instance TransientCodeOwnerCache
between hierarchy levels.

Move getVisibleCodeOwners into sortAndLimit so branch visibility is
evaluated lazily on the score-sorted stream only until the requested
limit is reached, and reuse a single CodeOwnerResolver instance across
the hierarchy traversal and global code owner resolution.

Testing & Benchmark Results (https://paste.googleplex.com/6755399436516647)

Bug: Google b/360136905
Change-Id: I7cefffe9e66b16bdd0de308eec1d42b4e4b2d215
3 files changed
tree: 2eb5302d45a1e2ed35efbd48411b0a9946b2dc50
  1. java/
  2. javatests/
  3. proto/
  4. resources/
  5. web/
  6. .gitignore
  7. .gitreview
  8. BUILD
  9. LICENSE
  10. README.md
README.md

Gerrit Code Review code-owners plugin

This plugin provides support for defining code owners for files in a repository.

If the code-owners plugin is enabled, changes can only be submitted if all touched files are covered by approvals from code owners.

For a detailed description of the plugin functionality please refer to the plugin documentation.

IMPORTANT: Before installing/enabling the plugin follow the instructions from the setup guide.

NOTE: The plugin documentation only renders correctly when the plugin is installed in Gerrit and the documentation is accessed via https:///plugins/code-owners/Documentation/index.html. If you want to read the documentation before installing the plugin, you can find it properly rendered here.

JavaScript Plugin

From the root of the gerrit repository.

bazel test //plugins/code-owners/web:karma_test

For testing the plugin with the Gerrit FE Dev Helper the command below builds

    bazel build //plugins/code-owners/web:code-owners
    ln -s bazel-bin/plugins/code-owners/web/code-owners.js polygerrit-ui/app/plugins/

and let the Dev Helper redirect from .+/plugins/code-owners/static/code-owners.js to http://localhost:8081/plugins/code-owners.js.