)]}'
{
  "log": [
    {
      "commit": "7adb9aa4b0a4b80bdc4c5e878f418cbf0837334c",
      "tree": "7e4a7812d9bf5019d0a9806602455d25d3332328",
      "parents": [
        "f237d1d3e55c1d0a2540e9a7eb928fbd6067d3f9"
      ],
      "author": {
        "name": "Thomas Dräbing",
        "email": "thomas.draebing@sap.com",
        "time": "Thu May 07 12:33:38 2026 +0200"
      },
      "committer": {
        "name": "Thomas Draebing",
        "email": "thomas.draebing@sap.com",
        "time": "Thu May 07 03:36:57 2026 -0700"
      },
      "message": "Fix eslint config path\n\nBuilding all targets (`bazelisk build //plugins/code-owners/...`)\nfailed, because the `plugin_eslint()` rule expected `eslint.config.js`\ninstead of `.eslintrc.js`.\n\nChange-Id: I3d23fa81b4d58b82e059e8861886dd67cf1736bf\n"
    },
    {
      "commit": "f237d1d3e55c1d0a2540e9a7eb928fbd6067d3f9",
      "tree": "ef47d49257320b099afef726d92632b02c0c94da",
      "parents": [
        "f00c81d7ca4cff0b9d7887d8d6f59196fe16a32e"
      ],
      "author": {
        "name": "Nitzan Gur-Furman",
        "email": "nitzan@google.com",
        "time": "Mon May 04 21:20:57 2026 +0000"
      },
      "committer": {
        "name": "Nitzan Gur-Furman",
        "email": "nitzan@google.com",
        "time": "Tue May 05 01:39:10 2026 -0700"
      },
      "message": "Modify the code-owners plugin to use the new Accounts#randomNIds method\n\nFor storage systems that optimizes Accounts#randomNIds implementation,\nthis should lead to performance improvements.\n\nChange-Id: Ia21b61f8527a8462734e477fe288f3d479db5f51\nRelease-Notes: skip\nGoogle-Bug-Id: b/299605283\n"
    },
    {
      "commit": "f00c81d7ca4cff0b9d7887d8d6f59196fe16a32e",
      "tree": "5de4d5cddaf5565f83a0f2019db48e3c0a936b7e",
      "parents": [
        "9db6b62d50424668870bba8b0070063381cfba00"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Tue Apr 21 13:52:56 2026 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Tue Apr 21 14:36:10 2026 +0200"
      },
      "message": "Bazel: Load java_proto_library from protobuf\n\nThe code-owners plugin still loads java_proto_library from rules_java,\nwhich is deprecated and causes Bazel warnings during the build.\n\nSwitch the load statement to:\n@protobuf//bazel:java_proto_library.bzl\n\nThis matches current Gerrit usage and removes the deprecation warnings\nfor owners_metadata_java_proto.\n\nChange-Id: I9207bc6829e5947d2441487cf62b9d54e311f105\n"
    },
    {
      "commit": "9db6b62d50424668870bba8b0070063381cfba00",
      "tree": "1edffb903614c291ad7616dd4473134b0c9f65b1",
      "parents": [
        "8d37f4caa6f1cdccc6a06e09e6c31d090952e186"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue Feb 17 10:31:42 2026 -0500"
      },
      "committer": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue Feb 17 10:31:42 2026 -0500"
      },
      "message": "docs: fix stray `\n\nChange-Id: Ib265033ebfd847dd76e5bd5b3ebeae21420e5695\n"
    },
    {
      "commit": "8d37f4caa6f1cdccc6a06e09e6c31d090952e186",
      "tree": "5dafb41254db960ab06527d64708a6aeb58eb7d4",
      "parents": [
        "b1244a4ac5be5bf7c332745932d59ef1bdb19b40"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Dec 04 12:51:28 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Dec 04 14:20:03 2025 +0000"
      },
      "message": "getFileStatusesForAccounts: Add comment for why rename detection is enabled\n\nThe returned FileCodeOwnerStatus are used for the response of the\nGetOwnedPath REST endpoint, which is documented to detect renames. Hence\nthe rename detection should be enabled here.\n\nChange-Id: I3ca230017626e08b70dadef50c8c68dc403224b3\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "b1244a4ac5be5bf7c332745932d59ef1bdb19b40",
      "tree": "ac446260ae3d6af8a36c61e25d8d8620709f5c27",
      "parents": [
        "62c4303705803106bcfceb24575cc759ac1bdcf9"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Dec 04 12:12:27 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Dec 04 14:11:55 2025 +0000"
      },
      "message": "Disable rename detection for the code owners submit rule\n\nThe code owners submit rule only checks if all paths (new and old) have\nbeen code owner approved (see CodeOwnerApprovalCheck#isSubmittable). For\nthis it\u0027s OK if for renamed files 2 FileCodeOwnerStatus\u0027es are returned\n(one for the new path and one for the old path), hence rename detection\ncan be disabled here.\n\nWhen code owner statuses are returned from the GetCodeOwnerStatus REST\nendpoint however we must detect renames (see\nCodeOwnerApprovalCheck#getFileStatusesAsSet) because our API\ndocumentation for this REST endpoint says that we return a single code\nowner status for renamed files. This is important for callers that do\npagination, e.g. if the change screen shows the first 200 files (which\nmay include renames) than getting the first 200 code owner statuses\nshould match these files (their new and old paths).\n\nChanging CodeOwnerApprovalCheck#getAllPathsAsApproved to always disable\nthe rename detection didn\u0027t make any tests fail although it affects the\nGetCodeOwnerStatus REST endpoint. This was because getAllPathsAsApproved\nis only called from the GetCodeOwnerStatus REST endpoint if a change\ncontains a renamed file and all files of the change are exempted from\nrequiring code owner approvals because a) the uploader is exempted from\nrequiring code owner approvals or b) the change is a pure revert and\npure reverts are configured to not require code owner approvals. The new\ntests in GetCodeOwnerStatusIT cover this now.\n\nCodeOwnerApprovalCheck has one more caller of ChangedFiles for which we\nhaven\u0027t checked yet whether rename detection can be disabled. At this\nplace we add a TODO so that we remember to check this later.\n\nBug: Google b/461456634\nChange-Id: I9fc7ca3a808a176324fc9eb2f1d49b4bb4b55cae\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "62c4303705803106bcfceb24575cc759ac1bdcf9",
      "tree": "29e10305e0950a1aa4505fb299feef0733305a83",
      "parents": [
        "1f4904e22f2d90cd59a814a06b5f4fc118fe8c11"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Dec 04 10:33:44 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Dec 04 13:58:57 2025 +0000"
      },
      "message": "CodeOwnersInChangeCollection: Get changed paths without rename detection\n\nCodeOwnersInChangeCollection only needs to check whether the path exists\nas a new path or as an old path of a rename or deletion. Since old paths\nof deletions and renames are handled the same way we do not need to\ndetect renames. If we get the changed files without rename detection,\nrenames are returned as 2 changed files, one with the new path for the\naddition and one with the old path for the deletion.\n\nChange-Id: I9a857e0bf17262a7be56c7a2affcc2cbe4f12694\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "1f4904e22f2d90cd59a814a06b5f4fc118fe8c11",
      "tree": "c72f2f3ec806f043cf9f50405b4ad765cde2d2db",
      "parents": [
        "0863f5ceab9ec739ddd6459850e97df50522d03f"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Dec 04 10:18:23 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Dec 04 13:51:09 2025 +0000"
      },
      "message": "CheckCodeOwnerConfigFilesInRevision: Get changed files without rename detection\n\nCheckCodeOwnerConfigFilesInRevision checks OWNERS files in a revision.\nFor this we do not care about renames and deletions, hence rename\ndetection is not needed here.\n\nChange-Id: Iedb2f65698eaae073a61b0e926c5d188af31e45b\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "0863f5ceab9ec739ddd6459850e97df50522d03f",
      "tree": "11210f825a42fb0d755f45917a62dd580a196977",
      "parents": [
        "7ed4fd2b729ee3459844d962686d14ba0d08970e"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Dec 04 09:06:54 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Dec 04 10:17:20 2025 +0000"
      },
      "message": "ChangedFilesByPatchSetCache: Get changed files without rename detection\n\nThe only caller of ChangedFilesByPatchSetCache is\nCodeOwnerApprovalCheck. CodeOwnerApprovalCheck only uses\nChangedFilesByPatchSetCache to check whether the path has been\ncode-owner approved in a previous patch set. For this it doesn\u0027t matter\nwhether renamed are represented as a single ChangedFile (with new and\nold path set) or by 2 separate ChangedFile\u0027s (one that only has the new\npath set and one that only has the old path set).\n\nBug: Google b/461456634\nChange-Id: Ifdea3fed3379132d6271270e27866eb7a988f2ec\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "7ed4fd2b729ee3459844d962686d14ba0d08970e",
      "tree": "05ac73133f0108f077ae3fcaec2fed54eab8d665",
      "parents": [
        "c0ff0a64c154f3c11fbe5fbad6aef3b1451d46e5"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Dec 04 08:42:02 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Dec 04 10:04:48 2025 +0000"
      },
      "message": "SkipCodeOwnerConfigValidationPushOption: Get changed files without rename detection\n\nThe code only needs to know if any OWNERS file has been added or\nupdated. For this is only looks at the new paths of the changed files.\nHence rename detection is not required here.\n\nIf the rename detection is enabled, renamed files are retured as a\nsingle ChangedFile (with old and new path). If the rename detection is\ndisabled, renamed files are returned as two ChangeFiles (one with the\nold path for the deletion and one with the new path for the addition).\nVerify this behaviour in a test.\n\nChange-Id: If42e8410045d38613e6292e8d6e0e87575214ab0\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "c0ff0a64c154f3c11fbe5fbad6aef3b1451d46e5",
      "tree": "f8edccd40110c7cb3dd7ef6e95bc2af5e7a640cf",
      "parents": [
        "f76f88ecf76c119726f620d193f092f1c8f13005"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Dec 04 09:25:35 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Dec 04 09:25:35 2025 +0000"
      },
      "message": "ChangedFilesTest: Drop \"FromDiffCache\" from test names\n\nChange I454e4896a dropped \"FromDiffCache\" from the method names in\nChangedFiles, but forgot to rename the corresponding tests in\nChangedFilesTest.\n\nChange-Id: If7513e1b6a963f78b11d1ab10ff502b3922f7e4d\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "f76f88ecf76c119726f620d193f092f1c8f13005",
      "tree": "605dfbe49b4109b2230b8e491f1766c92dfaf4e4",
      "parents": [
        "8c0d9a9599eb4a350c340592e1b29483cedfd8b2"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Dec 03 15:38:12 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Dec 03 15:46:27 2025 +0000"
      },
      "message": "Avoid computing file diffs when evalution code owner approvals\n\nTo evaluate code owner approvals on a change we need to know which files\nhave been changed. So far we retrieved the changed files from the diff\ncache, which means file diffs are being computed when they are not\ncached yet (or when their cache entry has expired). Computing files diff\nfor changes that touch many files (e.g. \u003e 70k files) can take \u003e 15min.\nSince the code owner approval evaluation only needs to know which files\nhave changed, computing the file diffs seems unnecessary. DiffOperations\nhas a new method that allows to get the modified files without computing\nthe file diffs and with this change we are using it to get the changed\nfiles instead of getting them from the diff cache. For the evalution of\ncode owner approvals detecting renames is important (because renamed\nfiles require an approval on the old and the new path), hence the\nrename detection must be enabled.\n\nBug: Google b/461456634\nChange-Id: I45c7e61832be45676ef0ceae5044990cfdf469e0\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "8c0d9a9599eb4a350c340592e1b29483cedfd8b2",
      "tree": "9b357d0384a4d08e68e1c039b67381d99f2b7456",
      "parents": [
        "6516292dec2924caeed4e7833164a096d921ca31"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Dec 03 14:51:08 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Dec 03 15:16:00 2025 +0000"
      },
      "message": "ChangedFiles: Rename \u0027getFromDiffCache\u0027 methods to \u0027get\u0027\n\nEarlier ChangedFiles offered 2 alternatives for geting the changed\nfiles, one that computed the changed files and one that retrieved them\nfrom the diff cache. The first alternative was dropped in change\nI811c28f64 and now the changed files are always retrieved from the diff\ncache. Back then when the 2 alternatives existed it was important that\nthey could be distinguished by the method, but now that only 1 way to\nget the changed files exists the \"FromDiffCache\" part of the method\nnames that exposes an implementation detail is no longer needed.\n\nDropping the \"FromDiffCache\" part from the method names will allow us to\nchange the implementation later, e.g. to get the changed files in\nanother way than retrieving them from the diff cache.\n\nChange-Id: I454e4896a7295432306c6bd620e805edf9ae245a\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "6516292dec2924caeed4e7833164a096d921ca31",
      "tree": "b2ce7c244d451ce480e89e42acd42eef447e3fac",
      "parents": [
        "33f4785c68f90b5baff5def72b69bfaebb4221a1"
      ],
      "author": {
        "name": "Nitzan Gur-Furman",
        "email": "nitzan@google.com",
        "time": "Tue Oct 14 03:10:49 2025 -0700"
      },
      "committer": {
        "name": "Nitzan Gur-Furman",
        "email": "nitzan@google.com",
        "time": "Tue Oct 14 03:12:57 2025 -0700"
      },
      "message": "Code-owners plugin adaptations for: make TestMetricMaker a real singleton\n\nVerification is manually overriden for this change as the automation doesn\u0027t use the main `gerrit/gerrit` change. Both changes will be submitted together as part of the same topic.\n\nMain change: I07739b44d22c0d2d7cb257443551478c458d7daf\nRelease-Notes: skip\nGoogle-Bug: b/443200063\n\nChange-Id: I1079747355eb006a4028c128629b6327355fa831\n"
    },
    {
      "commit": "33f4785c68f90b5baff5def72b69bfaebb4221a1",
      "tree": "02f26b4b90c815a2cc5a963b775d6c735a633cd4",
      "parents": [
        "0d264121fc65ce3e175c0309d8fbc71ce0b3afbb",
        "ad474fbfc4d55e0d0d68ecb7279449306778806b"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Sep 18 04:19:06 2025 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Sep 18 04:19:06 2025 -0700"
      },
      "message": "Merge \"Drop CodeOwnersInternalServerErrorException\""
    },
    {
      "commit": "ad474fbfc4d55e0d0d68ecb7279449306778806b",
      "tree": "0e5a6e83ba6ec70f4932698d66aa5944a2dc0967",
      "parents": [
        "0f053870fb799ecb43261f1e47eccdb49b9dd91f"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Sep 18 09:40:50 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Sep 18 09:40:50 2025 +0000"
      },
      "message": "Drop CodeOwnersInternalServerErrorException\n\nCodeOwnersInternalServerErrorException was added during the rollout of\nthe code-owners feature to recognise issues with the code-owners plugin\nimmediately. It\u0027s thrown for any exception that happens in the\ncode-owners plugin, even if the error is not caused by the code-owners\nplugin, but happens in other Gerrit modules that are used by the\ncode-owners plugin. For example if permissions cannot be evaluated and\nthe PermissionBackend fails with a PermissionBackendException, anywhere\nin Gerrit that would result in a normal \"internal server error\", only if\nthe caller is the code-owners plugin it is a \"code-owners internal\nserver error\". This doesn\u0027t make sense, at least no longer since the\ncode-owners rollout is long done. In retrospect wrapping arbitrary\nexceptions that happen in code that is called from the code-owners\nplugin into CodeOwnersInternalServerErrorException\u0027s caused more\nconfusion than it helped because non-code-owner related errors were\nattributed to the code-owners plugin. Hence dropping this exception now.\nInstead we just use StorageException like in the rest of the Gerrit\ncode.\n\nChange-Id: I77e7e2026de7a6c3a6eccd184fd20993dc81aa22\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "0d264121fc65ce3e175c0309d8fbc71ce0b3afbb",
      "tree": "4a737554458a6ee4bcf63d7aead18756e50a4500",
      "parents": [
        "65aee81297d5bb39a884dbc433aa6f73e6a9a92c"
      ],
      "author": {
        "name": "Milutin Kristofic",
        "email": "milutin@google.com",
        "time": "Tue Aug 12 10:44:25 2025 +0200"
      },
      "committer": {
        "name": "Milutin Kristofic",
        "email": "milutin@google.com",
        "time": "Tue Aug 12 01:48:14 2025 -0700"
      },
      "message": "Expand code owner check output area\n\nThe output textarea in the code owner check component introduced in\nChange 495381 is too small, making it difficult to read longer results.\n\nThis change increases the number of visible rows from the default 2 to\n20, improving usability by allowing more of the output to be seen at\nonce.\n\nGoogle-Bug-Id: b/437250084\nRelease-Notes: skip\nChange-Id: If17820dad3ddbdc193174e1cce3030b6ebeb1ea5\n"
    },
    {
      "commit": "65aee81297d5bb39a884dbc433aa6f73e6a9a92c",
      "tree": "958cf03d73de57dba393b4c6bd1765885e928fac",
      "parents": [
        "1afada3f06bd4a4e59ef8f8dd60117ce0288761b"
      ],
      "author": {
        "name": "Milutin Kristofic",
        "email": "milutin@google.com",
        "time": "Fri Aug 08 09:28:10 2025 +0200"
      },
      "committer": {
        "name": "Milutin Kristofic",
        "email": "milutin@google.com",
        "time": "Fri Aug 08 09:28:10 2025 +0200"
      },
      "message": "Replace iron-autogrow-textarea with standard textarea\n\nThe `iron-autogrow-textarea` component has been removed in Change 495381\nfrom the main Gerrit platform. This change updates the code owner check\ntool to use the standard HTML `\u003ctextarea\u003e` element instead.\n\nGoogle-Bug-Id: b/437250084\nChange-Id: I7bcf5f26ff49c2371c2926471969f9077e2e19e3\n"
    },
    {
      "commit": "1afada3f06bd4a4e59ef8f8dd60117ce0288761b",
      "tree": "c84ba67ea71d08b70d99a9fe1604111263494505",
      "parents": [
        "0f053870fb799ecb43261f1e47eccdb49b9dd91f"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Aug 01 07:36:08 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Aug 01 07:36:08 2025 +0000"
      },
      "message": "Transient caches: Include exceeded limit into warning log\n\nThis allows to double-check that a configured limit is taking effect.\n\nRelease-Notes: skip\nChange-Id: Ib5c9b979b06f9b8c4e4c66f274420bea8effbb0b\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "0f053870fb799ecb43261f1e47eccdb49b9dd91f",
      "tree": "d60a528f1c26e5984c66ca05eff26992193fd236",
      "parents": [
        "834ea20aaccfbf911b325a972a885af39eaa6ee7"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Jul 23 09:56:25 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Jul 23 09:56:25 2025 +0000"
      },
      "message": "Adapt to change in Gerrit core\n\nChange Ibe2d8b4f2 in Gerrit core improve the error message that is\nreturned when there are file conflicts. Adapt the\nCodeOwnerConfigValidatorIT to this.\n\nChange-Id: Icf1a0319fc04600d2c492e4b3cff3c071566c0a3\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "834ea20aaccfbf911b325a972a885af39eaa6ee7",
      "tree": "1769b3fa6619849b5814022adcd750e377704471",
      "parents": [
        "a30cf205422451720835927b0436f2f446b780eb"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Jul 14 09:11:29 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Jul 14 09:11:41 2025 +0000"
      },
      "message": "Remove unused static imports of PathSubject.paths\n\nThe usage has been removed in change I8c57989e2, but this change forgot\nto remove the imports.\n\nDue to this our internal build is failing now, since PathSubject.paths\nhas been made package private so that PathSubject.paths can no longer be\nresolved.\n\nChange-Id: I1ab58d9314ba3c02a4d85c88eb03d53d0882874d\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "a30cf205422451720835927b0436f2f446b780eb",
      "tree": "f36b74a83611dc02e553786f07a4b5780753c951",
      "parents": [
        "64418ca3b6c7bb9c81e265414a99882e06a5916d"
      ],
      "author": {
        "name": "Éamonn McManus",
        "email": "emcmanus@google.com",
        "time": "Thu Jul 10 17:53:10 2025 -0700"
      },
      "committer": {
        "name": "Éamonn McManus",
        "email": "emcmanus@google.com",
        "time": "Thu Jul 10 18:01:53 2025 -0700"
      },
      "message": "Remove unnecessary references to deprecated `PathSubject.paths()`.\n\nThese are the only references to the method outside\n`com.google.common.truth`. After removing them, we can make the method\npackage-private.\n\nChange-Id: I8c57989e21b4b56e901afa9747dc363a76eb2d45\n"
    },
    {
      "commit": "64418ca3b6c7bb9c81e265414a99882e06a5916d",
      "tree": "67b5444c6f823da0297d65ee7415ad9665f190c7",
      "parents": [
        "9ce02837c3a09dc321119fa71b13d54384526078",
        "e203a7cc27466b1c27a4a0f0e7035b327b3addf0"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Jul 09 23:27:28 2025 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jul 09 23:27:28 2025 -0700"
      },
      "message": "Merge changes I79768c0e,Ideb86f1d\n\n* changes:\n  Use test API to create change with deleted/renamed file\n  Stop using deprecated method to create test changes\n"
    },
    {
      "commit": "9ce02837c3a09dc321119fa71b13d54384526078",
      "tree": "f7a867df537ed0439df35d93d3b3aaa9864783a6",
      "parents": [
        "be51fb77b555c7e3200b1c68c3ffaba7dd4410a4",
        "93d5aec08ad890ada16051841ae6dc9fb73aaf72"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Jul 08 04:49:51 2025 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jul 08 04:49:51 2025 -0700"
      },
      "message": "Merge \"Adapt to change in Gerrit core that renames the method to create test changes\""
    },
    {
      "commit": "be51fb77b555c7e3200b1c68c3ffaba7dd4410a4",
      "tree": "d55c19f98f334312c892350abad5e36f8287fa56",
      "parents": [
        "9bf37d86596a6a5d5e3202780538265d9dc1e35a",
        "73b390ffe0897c6f62544dfbed780dcbd17d209f"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Jun 30 06:08:53 2025 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jun 30 06:08:53 2025 -0700"
      },
      "message": "Merge \"ChangedFilesTest: Set project when creating test changes\""
    },
    {
      "commit": "e203a7cc27466b1c27a4a0f0e7035b327b3addf0",
      "tree": "7ccf91dd7888e98d9ccd047a2d9dcd078fe08dd7",
      "parents": [
        "e04ad29784872c18f71bb5da82db0f7e86aa0427"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Jun 25 13:47:01 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Jun 25 13:48:33 2025 +0000"
      },
      "message": "Use test API to create change with deleted/renamed file\n\nThis makes the code that creates the test changes easier to read.\n\nChange-Id: I79768c0e70aafaa67e9f6bf7c5eafa4c36e513d6\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "e04ad29784872c18f71bb5da82db0f7e86aa0427",
      "tree": "98312f81155fedd2fc4c552451c7cf6cb14e003f",
      "parents": [
        "93d5aec08ad890ada16051841ae6dc9fb73aaf72"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Jun 25 07:20:38 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Jun 25 07:21:19 2025 +0000"
      },
      "message": "Stop using deprecated method to create test changes\n\nThe createV1() method to create test changes has been deprecated in\nfavour of the new create() method. Adapt all tests to use the new\nmethod for creating test changes.\n\nChange-Id: Ideb86f1dbb51658f7c5be1545b60ba300dd300d4\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "93d5aec08ad890ada16051841ae6dc9fb73aaf72",
      "tree": "7afbd6eb324841a0ac6f004872aea856982da6bd",
      "parents": [
        "73b390ffe0897c6f62544dfbed780dcbd17d209f"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Jun 25 06:55:26 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Jun 25 06:55:51 2025 +0000"
      },
      "message": "Adapt to change in Gerrit core that renames the method to create test changes\n\nThe rename is being done by change Idc4d38b06c.\n\nChange-Id: Ib27b3ce978bdf2c672b95392e3e547bbfe12872b\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "73b390ffe0897c6f62544dfbed780dcbd17d209f",
      "tree": "357177c36a07f938737a3a8d229756e1886e113d",
      "parents": [
        "73b1e0e3862ea8249f9ec8fdd7bcfd75b72b2c2d"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Jun 24 10:53:56 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Jun 24 10:54:44 2025 +0000"
      },
      "message": "ChangedFilesTest: Set project when creating test changes\n\nWhen creating a test change without specifying a project the change is\ncreated in an arbitrary project. Since the project is arbitrary tests\nthat create multiple changes cannot assume that all changes are created\nin the same project, when no project is being specified.\n\nSo far this was not a problem, since always the same arbitrary project\nhas been selected, but with change I88f26dd6a in Gerrit core this is\nchanging now. That change makes it so that every change is created in a\nnew project, if no project was specified.\n\nThis makes some tests in ChangedFilesTest fail. Fix them by setting the\nproject when creating test changes.\n\nChange-Id: Ic61a2bfc687a9081d666bc1524df7e2d41f7d9b5\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "9bf37d86596a6a5d5e3202780538265d9dc1e35a",
      "tree": "4c487702934085a1144250635e40b2c53b705789",
      "parents": [
        "3a9afd6e57e171db8081befa29f950a610275c32"
      ],
      "author": {
        "name": "Nitzan Gur-Furman",
        "email": "nitzan@google.com",
        "time": "Fri Jun 06 06:34:08 2025 -0700"
      },
      "committer": {
        "name": "Nitzan Gur-Furman",
        "email": "nitzan@google.com",
        "time": "Fri Jun 06 06:34:08 2025 -0700"
      },
      "message": "CodeOwnerResolver: Fix Javadoc for AccountCache#get following recent change\n\nThe signature change is done in I5f9cc56f4634c6bfb72b5fdc600aecec1b9ff2dc\n\nGoogle-Bug: b/414541591\nRelease-Notes: skip\nChange-Id: Iaf50aee52d322b3e2942da0015b370f3f07fedc2\n"
    },
    {
      "commit": "3a9afd6e57e171db8081befa29f950a610275c32",
      "tree": "5cb11abb401a958dcd865cb287a4c31ab890490d",
      "parents": [
        "73b1e0e3862ea8249f9ec8fdd7bcfd75b72b2c2d"
      ],
      "author": {
        "name": "Milutin Kristofic",
        "email": "milutin@google.com",
        "time": "Sun Jun 01 10:46:40 2025 +0200"
      },
      "committer": {
        "name": "Milutin Kristofic",
        "email": "milutin@google.com",
        "time": "Sun Jun 01 05:33:14 2025 -0700"
      },
      "message": "Sort files in the owners selection list\n\nThe file list presented in the code owners selection dialog was not\nsorted in any specific order. This was confusing to users because it\ndid not match the alphabetical sorting of the main file list in the\nchange view, making it difficult to find specific files.\n\nThis change sorts the file list in the owners dialog to match the\nbehavior of the main file list. It reuses the existing special path\ncomparison logic from Gerrit\u0027s UI to ensure a consistent,\nalphabetical sort order across the application.\n\nGoogle-Bug-Id: b/421256625\nRelease-Notes: The file list in the code owners selection dialog is now sorted alphabetically.\nChange-Id: I5c85508e1f0288a7d10baf910b88008ea5fdd84d\n"
    },
    {
      "commit": "73b1e0e3862ea8249f9ec8fdd7bcfd75b72b2c2d",
      "tree": "86cf84ac0c7f169f41bef4b9f1e48a22319dd398",
      "parents": [
        "c78a5203f9c94e435206e0849fe61345db21e16c"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed May 28 08:09:48 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed May 28 08:12:25 2025 +0000"
      },
      "message": "Adapt FAQ to update code-owners.config to push for review\n\nDirect pushes to refs/meta/config have been disabled at Google, so we\nshould no longer advertise this.\n\nChange-Id: I74dd509c852ca8c00fbbc581e033e1bd394fdd36\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "c78a5203f9c94e435206e0849fe61345db21e16c",
      "tree": "5fcddd61fd8076f8338dc072abab17bc610a1fc7",
      "parents": [
        "b061b546b35b32e77188f8af4700da11c70233dc"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed May 28 07:47:53 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed May 28 07:47:53 2025 +0000"
      },
      "message": "setup-guide: Recommend to disable code owners for refs/meta/config branches\n\nThe refs/meta/config branches do not contain source code, but the\nproject configuration. Usually only the project owners can make changes\nhere and requiring code owner approvals is unneeded.\n\nBug: Google b/420567912\nChange-Id: I3977e3486810ff052bcded15baff432ac4c6f9d0\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "b061b546b35b32e77188f8af4700da11c70233dc",
      "tree": "7a438c22f18ad493f33f2ddb567615809d653ec4",
      "parents": [
        "5c3483b03f73c06ece45c8454497925d0886496f"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue May 27 11:34:23 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed May 28 07:26:49 2025 +0000"
      },
      "message": "Remove step for uninstalling the find-owners plugin from setup guide\n\nThe find-owners plugin was used at Google before we had the code-owners\nplugin. All usages of the find-owners plugin have been migrated to the\ncode-owners plugin and the find-owners plugin has been removed. Hence\nthe step to uninstall the find-owners plugin is no longer needed.\n\nChange-Id: I2a1488229214f950aeecc0a8c242136da8ceb13f\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "5c3483b03f73c06ece45c8454497925d0886496f",
      "tree": "fd301a6a62a8f5f64c2e6eff4ddee460554e1c23",
      "parents": [
        "fb04a189c603bf473f3c8413a14b4c10641944c2"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed May 07 10:47:17 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed May 07 03:58:28 2025 -0700"
      },
      "message": "Fix links in REST API documentation\n\n* This is Markdown documentation, so Asciidoc links don\u0027t work.\n* The anchor was missing in the link to the \"Check Code Owner Config\n  Files\" section.\n* The link to the Check Code Owner self service didn\u0027t work as it\n  contained 2 slashes (e.g.\n  https://gerrit-review.googlesource.com//x/code-owners/check-code-owner\n  rather than\n  https://gerrit-review.googlesource.com/x/code-owners/check-code-owner).\n\nChange-Id: I3ab146d4da85b4fe12e60d447b1c520c6fc79f48\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "fb04a189c603bf473f3c8413a14b4c10641944c2",
      "tree": "645f09a95bd2bb27c1cff69b26924fdc595f1113",
      "parents": [
        "8c44ef0352fa0ab15ad6fe3d64ea967e69e7cee9"
      ],
      "author": {
        "name": "Paladox none",
        "email": "thomasmulhall410@yahoo.com",
        "time": "Thu Apr 24 08:19:47 2025 -0700"
      },
      "committer": {
        "name": "Paladox none",
        "email": "thomasmulhall410@yahoo.com",
        "time": "Thu Apr 24 08:19:56 2025 -0700"
      },
      "message": "Fix typo\n\nChange-Id: Id0d23eba1f67d13ea8c16b17ee4fd9f8bcb94937\n"
    },
    {
      "commit": "8c44ef0352fa0ab15ad6fe3d64ea967e69e7cee9",
      "tree": "f8f84ee4be2ca05074e35de1cc871dbf2037514e",
      "parents": [
        "04815f5f664e8abd41097c1c348b9a672321104c"
      ],
      "author": {
        "name": "Paladox none",
        "email": "thomasmulhall410@yahoo.com",
        "time": "Wed Apr 23 16:59:50 2025 -0700"
      },
      "committer": {
        "name": "Paladox none",
        "email": "thomasmulhall410@yahoo.com",
        "time": "Wed Apr 23 17:20:59 2025 -0700"
      },
      "message": "Migrate from karma to web-test-runner\n\nWe want to get rid of the final remnants of karma from gerrit core.\nThe recommended way to run tests is with web-test-runner.\n\nDepends-On: I4e9134e04475d7375d7a09d618892edbe0b555bc\nChange-Id: Ic708f4b0d53970c3f1ed5fb1e6a0cad97a66d284\n"
    },
    {
      "commit": "04815f5f664e8abd41097c1c348b9a672321104c",
      "tree": "a35fa74d3db962201c1e1abfd8d16804ba4bffa4",
      "parents": [
        "49016cc1cbcefbb1a6091ed994eef7a4b2ba6c97"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Mar 04 15:25:47 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Mar 04 07:49:47 2025 -0800"
      },
      "message": "Adapt to change in Gerrit core that allows admins to see everything by default\n\nChange I44d97259f in Gerrit core allows admins to see everything by\ndefault. Hence tests that verify read restrictions need to use a\nnon-admin user now.\n\nChange-Id: I0278e2be32b9980f4c1ca769bdb849f94d66ac74\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "49016cc1cbcefbb1a6091ed994eef7a4b2ba6c97",
      "tree": "4cc9aeb723569dab1b0635b2d261167e667bb45c",
      "parents": [
        "0d3b56cda53eae695421f149713d08acb511817e"
      ],
      "author": {
        "name": "Dhruv Srivastava",
        "email": "dhruvsri@google.com",
        "time": "Mon Feb 10 20:51:03 2025 +0100"
      },
      "committer": {
        "name": "Dhruv Srivastava",
        "email": "dhruvsri@google.com",
        "time": "Tue Feb 11 11:58:35 2025 +0100"
      },
      "message": "Implement isOptionEnabled for project + branch level\n\nGoogle-bug-id: b/369431612\nRelease-Notes: skip\nChange-Id: I2e99bb13235e6be6003504b135f4dba4d25b07fc\n"
    },
    {
      "commit": "0d3b56cda53eae695421f149713d08acb511817e",
      "tree": "88360ba1511ad2e64ba61e0f80cfad716a6fc1fd",
      "parents": [
        "65810ac65f4581fe7834e6c80a5008b8e6f3a518"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Feb 09 10:20:15 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Feb 10 05:36:40 2025 -0800"
      },
      "message": "Increate JVM Heap for the acceptance tests execution\n\nThe execution of CodeOwnerConfigValidatorIT requires a lot of\nJVM Heap because of the continuous restarts of Gerrit daemon with\ndifferent configuration settings and the number of tests executed\nagainst it.\n\nThe default 256MBytes is bearly enough for a test-run with multiple\nGC cycles at the end; raising the limit to 512MBytes allows more\nspace for smooth executions without GCs and less flakiness due\nto out of memory errors.\n\nChange-Id: I9b10b3406fc46c60f4a645a909d34c730b462f49\n"
    },
    {
      "commit": "65810ac65f4581fe7834e6c80a5008b8e6f3a518",
      "tree": "ff5a90563d618269a1a353dbcaae5c1013795419",
      "parents": [
        "856db3e1faca0a38dbea58d01d4e3f484c08efb5"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Feb 09 10:11:29 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Feb 10 05:36:20 2025 -0800"
      },
      "message": "Fix RepoView leak in CodeOwnerConfigValidator\n\nThe onRefOperation() operation of CodeOwnerConfigValidator\nwas creating a RepoView on-the-fly without a proper\ntry-with-resource causing the leak of a Repository object\nreference counting.\n\nExtract the RepoView creation in onRefOperation in a\nseparate variable.\n\nNOTE: ErrorProne could have spotted resources leaks in the\nfirst place, if RepoView was declared AutoCloseable and tagged\nwith @MustBeClosed. That could now be possible but it would\nrequire a lot more invasive changes in JGit and Gerrit.\n\n[1] https://errorprone.info/bugpattern/MustBeClosedChecker\n\nChange-Id: I096453aed25c3d57bafdb8c8645233c04155adfd\n"
    },
    {
      "commit": "856db3e1faca0a38dbea58d01d4e3f484c08efb5",
      "tree": "e7b3b3fd00afca7f4b5135dbc75400bda6cb79d5",
      "parents": [
        "34691f8ec40b79e52e8870a9087b471ac7028b43",
        "7800e6c98250324205aaf0d5421b1da9042861a6"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Feb 10 05:20:41 2025 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 10 05:20:41 2025 -0800"
      },
      "message": "Merge \"Return code-owners~skip-validation option only if OWNERS files are touched\""
    },
    {
      "commit": "34691f8ec40b79e52e8870a9087b471ac7028b43",
      "tree": "526346b025a71b9e0f83d26f86ed23be036efd3c",
      "parents": [
        "f1971208377cdd17768b1c29354a021a688da73a",
        "4fa7539465e9feb67f3c95810099bd1d337cc3c3"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Feb 10 01:23:11 2025 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Feb 10 01:23:11 2025 -0800"
      },
      "message": "Merge \"Adapt to change in Gerrit core\""
    },
    {
      "commit": "f1971208377cdd17768b1c29354a021a688da73a",
      "tree": "a5f7bc6557efdcd6df289a05ce5139e219fa7cd6",
      "parents": [
        "a8cbff082bfa18302ca4d99c68684451dc52d7a7",
        "d4b48489d433a678dad176a91e7dcc021f8cf13a"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Feb 07 06:28:32 2025 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 07 06:28:32 2025 -0800"
      },
      "message": "Merge \"Close CommitReceiveEvent in CodeOwnersPluginConfigValidatorTest\""
    },
    {
      "commit": "a8cbff082bfa18302ca4d99c68684451dc52d7a7",
      "tree": "f357e30e13e5987a8a0847e2e05f430e00ed2dbd",
      "parents": [
        "1147409f08e2522ee9865fff073febf444df645c",
        "42c848056bb4534a095c2531c3452d663d318afd"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Feb 07 06:28:24 2025 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 07 06:28:24 2025 -0800"
      },
      "message": "Merge \"Fix RepoView leak in CodeOwnerConfigValidator\""
    },
    {
      "commit": "7800e6c98250324205aaf0d5421b1da9042861a6",
      "tree": "d30cbc85a23dae149f2536eb1ce055eb5b91cbfe",
      "parents": [
        "4fa7539465e9feb67f3c95810099bd1d337cc3c3"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Feb 07 12:59:52 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Feb 07 13:46:07 2025 +0000"
      },
      "message": "Return code-owners~skip-validation option only if OWNERS files are touched\n\nSkipping the code owners config validation is only relevant if the\nchange contains code owner config files (e.g. OWNERS files) that can be\nvalidated. We should hide the skip option if for changes that do not\ntouch code owner config files.\n\nNote, it depends on the configuration of the code-owners plugin for\nwhich file names we need to check. This has to be taken into account\nwhen we check whether code owner config files have been touched.\n\nBug: Google b/279897514\nChange-Id: I99b816873dc75a74fec31da623ca27b79949c474\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "4fa7539465e9feb67f3c95810099bd1d337cc3c3",
      "tree": "76df4818fadbc03f10dd3fccb1f0dc0fd06dd3ba",
      "parents": [
        "1147409f08e2522ee9865fff073febf444df645c"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Feb 07 13:06:58 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Feb 07 13:44:48 2025 +0000"
      },
      "message": "Adapt to change in Gerrit core\n\nChange Id769ae946 moved PluginPushOption into another package and\nchanged the signature of the PluginPushOption.isOptionEnabled method.\n\nBug: Google b/279897514\nChange-Id: I113bea170dce3abfcecfecaff485e18f79b41dea\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "d4b48489d433a678dad176a91e7dcc021f8cf13a",
      "tree": "fc2af5b0d338611b636155657cd4e7cfe05fff81",
      "parents": [
        "42c848056bb4534a095c2531c3452d663d318afd"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Feb 07 13:13:20 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Feb 07 13:26:23 2025 +0000"
      },
      "message": "Close CommitReceiveEvent in CodeOwnersPluginConfigValidatorTest\n\nWrap the creation of CommitReceiveEvent inside a\ntry-with-resource for avoiding leaving a resource leak\nthat will eventually result into a Repository reference\ncounting leak.\n\nEven though this is not impacting the production code\nit would anyway respresent a false positive when looking\nfor Repository reference counting leaks.\n\nChange-Id: I326f2140916021d064603db12d0f19368e9a8fd3\n"
    },
    {
      "commit": "42c848056bb4534a095c2531c3452d663d318afd",
      "tree": "069b81d85accd7a048dbd4e0cc80c74285b6779b",
      "parents": [
        "de7fe329140ea99e6b791d1f6488ae68732b8b7f"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Feb 07 12:42:00 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Feb 07 13:08:06 2025 +0000"
      },
      "message": "Fix RepoView leak in CodeOwnerConfigValidator\n\nThe onPreMerge() operation of CodeOwnerConfigValidator was creating\na RepoView on-the-fly without a proper try-with-resource causing\nthe leak of a Repository object reference counting.\n\nExtract the repoView creation in a separate variable and make sure\nit is included in the outer try-with-resource everywhere it is used.\n\nNOTE: ErrorProne should have spotted resources leaks in the\nfirst place, so we should consider enabling the MustBeClosedChecker.\n\n[1] https://errorprone.info/bugpattern/MustBeClosedChecker\n\nChange-Id: I2880a4cf8b76e2be979288c996720478f98b4fba\n"
    },
    {
      "commit": "1147409f08e2522ee9865fff073febf444df645c",
      "tree": "b5a388b678d2ab34a59434447dd4babdfe9c902b",
      "parents": [
        "de7fe329140ea99e6b791d1f6488ae68732b8b7f"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Feb 07 12:54:05 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Feb 07 12:56:23 2025 +0000"
      },
      "message": "SkipCodeOwnerConfigValidationPushOptionIT: Fix a test\n\ncodeOwnersSkipOptionIsOmittedIfUserCannotSkipTheCodeOwnersValidation()\nshould test that the skip option is omitted if the user cannot skip the\ncode owners validation, but the test created a change for a disabled\nbranch so that the skip option would have been omitted also if the user\nhad the necessary permission.\n\nBug: Google b/279897514\nChange-Id: I476433b9a96873ac15321a2ee80645bd72bf9814\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "de7fe329140ea99e6b791d1f6488ae68732b8b7f",
      "tree": "2b7ebda3ffec76ba33277788054c8ef0c235a064",
      "parents": [
        "2bd2622b6fdce76a5498a37b4a596f23d4472531"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Jan 31 14:47:26 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Feb 03 07:02:55 2025 +0000"
      },
      "message": "Return code-owners~skip-validation option in GetValidationOptions response\n\nReturn the code-owners~skip-validation option only if the code owners\nfunctionality is enabled for the change and if the user is allowed to\nskip the validation.\n\nBug: Google b/279897514\nChange-Id: Ic50cc6ec1b3ab50649c3966ce8e865f438b80983\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "2bd2622b6fdce76a5498a37b4a596f23d4472531",
      "tree": "437fd74a71bc8208ee85a9cd478bb4a34744e92a",
      "parents": [
        "e31bf6f4c1e16d88f1bfe923a98fd8e878285731"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Jan 30 08:57:14 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Jan 30 08:57:32 2025 +0000"
      },
      "message": "Adapt to changes in Gerrit core\n\nChange Iebfc5301a changed the ExceptionHook interface.\n\nChange-Id: Ie62d8107db854c9bd91f25b263ba394cf7dafa2d\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "e31bf6f4c1e16d88f1bfe923a98fd8e878285731",
      "tree": "47281071b05a25a7fe7bec6c1c60c72661265b31",
      "parents": [
        "4cfa77c41ff4c268e324b26af1b2d085507381cf"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Jan 29 10:52:46 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Jan 29 10:52:46 2025 +0000"
      },
      "message": "Fix `checkCodeOwnerConfigFilesIn(...)` must be used errors\n\nThis is blocking our import at Google.\n\nChange-Id: Ic705d8dcc497231ceaa89ebe294475431950c03e\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "4cfa77c41ff4c268e324b26af1b2d085507381cf",
      "tree": "ebcdb0d68bed312e6b7b8d6b920cec9d17345179",
      "parents": [
        "37b185ee97946bed170b974b1f5ec6c1e4a1caa0"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Jan 28 12:50:12 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Jan 28 14:06:33 2025 +0000"
      },
      "message": "Add a global capability for the Check Code Owner Config Files REST endpoint\n\nWith this new capability we can allow service users to check code owner\nconfig files.\n\nBug: Google b/392106108\nChange-Id: I154e29d9678994e0660809351bda51c5723043dd\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "37b185ee97946bed170b974b1f5ec6c1e4a1caa0",
      "tree": "667b0b03c7405a911a3867beb7fbfa9fc803ab16",
      "parents": [
        "323341dd81d8197ee4acd012a6611085009b66b5"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Jan 28 13:39:05 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Jan 28 14:06:33 2025 +0000"
      },
      "message": "Adapt to changes in Gerrit core\n\nChange I82a0d881f in Gerrit core changed the error message for hidden\nprojects. Update test assertions for this error message accordingly.\n\nChange-Id: I0328b1f3f280ed5655eb99de2e15e7f83e57add4\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "323341dd81d8197ee4acd012a6611085009b66b5",
      "tree": "f6751981258a3ebe77497a615d01a3730ae288d2",
      "parents": [
        "00a30a88f2369e3a11931d218b15744c483a14a8"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Dec 06 13:58:32 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Dec 06 14:23:38 2024 +0000"
      },
      "message": "Add escaping to fix formating issue\n\nWithout the escaping \"\u003cn-digit-number\u003e\" is not shown at all.\n\"\u003c1-digit-number\u003e\" doesn\u0027t need any escaping, but for consistency and to\navoid confusion we add escaping for it as well.\n\nChange-Id: I466ed256d4c97da780d34b1096d4b517194c1f96\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "00a30a88f2369e3a11931d218b15744c483a14a8",
      "tree": "4d68117591424be28a85c5971af27b23dce7b4a3",
      "parents": [
        "004bac3c1183ef2f47f7d0c90fafafdc7aefcf52"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Sep 10 12:56:29 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Sep 10 13:09:36 2024 +0000"
      },
      "message": "Check permissions of uploader when validating imports on submit\n\nWe do validate code owner config files on upload. One validation that is\nperformed for imports is that the project/branch of the imported code\nowner config is visible to the uploader.\n\nIt\u0027s possible that this project/branch is not visible to everyone. By\nreferring to another project/branch in a code owner config file the\nuploader reveals the existence of the project/branch to everyone who can\nsee the code owner config file.\n\nIf enabled, the validation of code owner config files is also done on\nsubmit. At this point it\u0027s intended to do the exact same validation as\non upload. In particular this means that all visibility checks should be\ndone from the perspective of the uploader (and not for the submitter)\n[1].\n\nWe already did the visibility checks for the code owners for the\nuploader, but wrongly checked the visibility of projects/branches from\nwhich code owner config files are imported for the submitter. This\nchange fixes this so that visibility checks for projects/branches from\nwhich code owner config files are imported are also done for the\nuploader.\n\n[1] https://gerrit-review.googlesource.com/plugins/code-owners/Documentation/validation.html#:~:text\u003dIf%20enabled%2C%20on%20submit%20we%20repeat%20the%20exact%20same%20validation%20that%20was%20done%20on%20upload.%20This%20means%2C%20all%20visibility%20checks%20will%20be%20done%20from%20the%20perspective%20of%20the%20uploader.\n\nBug: Google b/365550280\nChange-Id: I6b1cc65f90f1fce1d9fb2930d40103390b6d10f0\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "004bac3c1183ef2f47f7d0c90fafafdc7aefcf52",
      "tree": "6a8d544798040b619d074d68d009d47541073908",
      "parents": [
        "a7f6a238d73568d5bb1cbd1f6f4a22668b0da5cc"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Sep 05 08:26:09 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Sep 05 10:35:30 2024 +0000"
      },
      "message": "Fix transitive import of global owners via per-file rule that ignores global owners\n\nExample:\n\nOWNERS:\nper-file *.md\u003dset noparent\nper-file *.md\u003dfile:/foo/OWNERS\n\n/foo/OWNERS:\nfile:/bar/OWNERS\n\n/bar/OWNERS:\ncode-owner@example.com\n\nFor a file that matches the per-file rule in \u0027OWNERS\u0027 we would expect\nthat \u0027code-owner@example.com\u0027 is a code owner. \u0027code-owner@example.com\u0027\nis a global code owner in \u0027/bar/OWNERS\u0027 but since it\u0027s imported for a\nper-file rule it becomes a per-file code owner. However what happens is\nthat we wrongly treat \u0027code-owner@example.com\u0027 as a global code owner\nand then it gets ignored due to the \"set noparent\" on the matching\nper-file rule.\n\nIn PathCodeOwners.resolveImports we already had logic to treat global\ncode owners that are imported via a per-file rule as per-file code\nowners, however this worked only for global code owners that were\ndirectly imported by a per-file rule, but not for global code owners\nthat were transitively imported by a per-file rule.\n\nThis got broken by the refactoring that was done in change I6f7723c0a,\nbut we didn\u0027t notice the breakage because we only tested this case\nwithout transitive imports (see\nPathCodeOwnersTest.perFileRuleThatIgnoresGlobalCodeOwnersCanImportGlobalCodeOwnersFromOtherFile).\n\nTo fix this we need to know for an import if any previous import in the\nimport chain was a per-file import. If yes, we should treat the imported\nglobal code owners as per-file code owners.\n\nThe check whether an import imports code owners as global code owners or\nas per-file code owners is done by\nPathCodeOwners.CodeOwnerImport#isGlobal. So far it was only looking at\nthe current import but not at the previous imports. By passing in the\nprevious import (if there is one) we can fix this.\n\nBug: Google b/363000012\nChange-Id: I7c872175fb198603f24a95819877ee1ff98651ec\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "a7f6a238d73568d5bb1cbd1f6f4a22668b0da5cc",
      "tree": "9260632a6a9a338fd59573934c02875e596e4491",
      "parents": [
        "83c497b9e3556c0a8e51cf865fc27a13171d99ae"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 26 13:27:50 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 26 13:32:12 2024 +0000"
      },
      "message": "Check Code Owner Screen: Drop \u0027/a\u0027 prefix from REST call\n\nWith the \u0027/a\u0027 prefix the request doesn\u0027t work in a browser (fails with\n\u0027400 Bad Request\u0027). Not sure how this worked when I tested this with a\nlocal Gerrit server, but it still works without the \u0027/a\u0027 prefix.\n\nBug: Google b/345161989\nChange-Id: I50b358cb0e3e5a4a9a0268f600a53c44a3ef3432\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "83c497b9e3556c0a8e51cf865fc27a13171d99ae",
      "tree": "2a715f43dcd36a10bf7a4a85e07f597ec575abc8",
      "parents": [
        "45608bf57f2fa3fccaba0948b10fc962e966d3ca"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 26 13:09:22 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 26 13:31:58 2024 +0000"
      },
      "message": "Fix file path of weblinks for code owner config files\n\nWhen creating weblinks we need to pass in the file path without any\nleading slash.\n\nBug: Google b/345161989\nChange-Id: I63981d439c4a4cff569e7a32ba7b2ee7640c243e\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "45608bf57f2fa3fccaba0948b10fc962e966d3ca",
      "tree": "f1ee7d9438918d910d77ed137b623d6fda799d0c",
      "parents": [
        "253869d91f4da4b23d4563414e8cdaaa11b7fc15"
      ],
      "author": {
        "name": "Stan Stavarachi",
        "email": "stavarachi@google.com",
        "time": "Thu Aug 22 19:57:45 2024 +0000"
      },
      "committer": {
        "name": "Stan Stavarachi",
        "email": "stavarachi@google.com",
        "time": "Thu Aug 22 19:58:54 2024 +0000"
      },
      "message": "Add test for CodeOwnerScore.IS_REVIEWER scoring\n\nChange-Id: I0b3c0a134efa98ebdf283a71f62f15e0d2761203\nBug: Google b/349187606\n"
    },
    {
      "commit": "253869d91f4da4b23d4563414e8cdaaa11b7fc15",
      "tree": "b96f620ab118ee858fc35d6ce40d9c42c5536d05",
      "parents": [
        "06ba67117456a183201390f073c7a67b04e5d9d8"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Aug 20 07:21:19 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Aug 20 08:24:17 2024 +0000"
      },
      "message": "Set page title for Check Code Owner Self Service page\n\nBug: Google b/345161989\nChange-Id: I2a4b8eff87f276bc601a371cc44425260de3da72\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "06ba67117456a183201390f073c7a67b04e5d9d8",
      "tree": "64436857adc61495d2d6a84596f58fd4aa3436ef",
      "parents": [
        "3407e2bbc99d6e1be824906745601f8412594bc2"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Aug 20 07:14:24 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Aug 20 07:14:24 2024 +0000"
      },
      "message": "OptionalResultWithMessagesSubject: Add @CanIgnoreReturnValue annotations\n\nFor methods that return the instance to allow chaining calls the return\nvalue may be ignored.\n\nNot marking these methods with the @CanIgnoreReturnValue annotation\nblock us (Google) from importing the recent code changes.\n\nChange-Id: I0f14ae17ff4f1ffa63f038f359331f2db795ebb4\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "3407e2bbc99d6e1be824906745601f8412594bc2",
      "tree": "3117b3d549683b30a95476ac7ca1dce62df197de",
      "parents": [
        "ed291c91cc66d535e2416bf9a1e5b6a2ebb52441",
        "0046696b5ce722e4b80d71489d037c681473c3c4"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 19 13:25:53 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Aug 19 13:25:53 2024 +0000"
      },
      "message": "Merge changes Ia973e3df,I331ebacf,I638ddce2,I3a2d5d9c\n\n* changes:\n  Check Code Owner screen: Show note to non-admins that debug logs are limited\n  Document Check Code Owner Self Service\n  Adapt screen to check code owners to this being a self service now\n  Allow all users to call the Check Code Owner REST endpoint\n"
    },
    {
      "commit": "0046696b5ce722e4b80d71489d037c681473c3c4",
      "tree": "973694b875964f8e3c51a83a8b4f21194ce97112",
      "parents": [
        "f5d8b5900ac3c7c5ecd3a38e3e89bca129494a4f"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 19 08:16:02 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 19 13:05:53 2024 +0000"
      },
      "message": "Check Code Owner screen: Show note to non-admins that debug logs are limited\n\nFull debug logs are only shown to administrators (users with the\n\u0027Administrate Server\u0027 capability or the \u0027Check Code Owner\u0027 capability).\nIf a user is not an admin show them a note saying that the debug logs\nare limited and that they should reach out to an admin if the\ninformation they got is not enough.\n\nBug: Google b/345161989\nChange-Id: Ia973e3df48b140e9ad300a7e10513ba626d6cc44\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "f5d8b5900ac3c7c5ecd3a38e3e89bca129494a4f",
      "tree": "264cc3096b6dcafc9b4cb04aa072c2a881f45846",
      "parents": [
        "a9111630f373d3ec820305286b8e9312fc34cbdc"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 19 06:50:02 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 19 13:01:48 2024 +0000"
      },
      "message": "Document Check Code Owner Self Service\n\nWith change I3a2d5d9cc we exposed the Check Code Owner REST endpoint as\na self service to inspect code ownerships. Update the documentation so\nthat users can find the self service.\n\nBug: Google b/345161989\nChange-Id: I331ebacf07d81582b23572adb868eeac1150c366\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "a9111630f373d3ec820305286b8e9312fc34cbdc",
      "tree": "a30ed063d11eb0849c18aa9b8acbf43f0641e426",
      "parents": [
        "e5f0ef3d2a0511600d247787b664d839db3db7f2"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Aug 16 11:14:11 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 19 12:44:56 2024 +0000"
      },
      "message": "Adapt screen to check code owners to this being a self service now\n\nWith change I25cff9f08 we opened the Check Code Owner REST endpoint for\nnormal users. Adapt the screen to check code owners to this now:\n\n* Remove the note saying that administrator permissions are needed.\n* Separate options that everyone can use from admin only options\n* Disable the input fields for admin only options if the current user is\n  not an admin\n\nBug: Google b/345161989\nChange-Id: I638ddce265afe916c3874c8432d992cb620689d8\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "ed291c91cc66d535e2416bf9a1e5b6a2ebb52441",
      "tree": "459d78b2dd9ced555ee3f40821845cb2e7283032",
      "parents": [
        "48cbfc466cdad2309e0635661484589edfcde197"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 19 08:36:03 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 19 08:36:03 2024 +0000"
      },
      "message": "Fix missing spacing in find owners documentation\n\nBefore:\nhttps://i.imgur.com/w0yOWrt.png\n\nAfter:\nhttps://i.imgur.com/eeeKwSd.png\n\nChange-Id: Ie8cb417a9795a8c127eb9f501074b2b4010a21ef\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "e5f0ef3d2a0511600d247787b664d839db3db7f2",
      "tree": "7757abf824797b5da852cd9873532ea163f62d06",
      "parents": [
        "b6955d1057fd9ae0fe5e2c8f1c97455651641404"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 14 08:41:05 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 19 08:25:26 2024 +0000"
      },
      "message": "Allow all users to call the Check Code Owner REST endpoint\n\nSo far calling the Check Code Owner REST endpoint required the caller to\nbe an admin (have the \u0027Administrate Server\u0027 capability or the \u0027Check\nCode Owner Capability\u0027). Due to this normal users couldn\u0027t debug issues\nwith OWNERS files on their own, but had to file tickets to find someone\nthat calls the REST endpoint and explains them the result. To reduce the\nticket load we are offering the Check Code Owner REST endpoint as a\nself-service now so that every user can invoke it.\n\nMost of the information that is provided by the REST endpoint is not\nsensitive and can be shown to normal users as they already have access\nto this information via other REST endpoints (via the code owner\nsuggestion they can find out if a user is a code owner, the inspected\ncode owner config files are already returned via the code owner\nsuggestion REST endpoint, whether an email is resolvable can be checked\nvia the account API, whether a user can see a change can be checked by\ntrying to add the user as a reviewer to the change, whether a user can\nvote on a change is contained in ChangeInfo when the user is a\nreviewer).\n\nThe returned debug logs however may contain information which should\nonly be shown to admins (e.g. messages that explain why a code owner\nemail is not resolvable reveal information about whether an email\nexists). This is why with change Ib28802d38 we distinguish between\nmessages that can be shown to all users vs. admins only. Now we are\nmaking use of this and return user messages for normal users and admin\nmessages for admins.\n\nThe \u0027user\u0027 option of the Check Code Owner REST endpoint checks the code\nownership of a user on behal of another user. This is something that\nonly admins should be able to do, hence we keep this disabled for normal\nusers (e.g. normal users should not be able to check code ownership on\nbehalf of an admin user as this would reveal accounts that the admin\nuser can see, but which are not visible to the calling user).\n\nSo far the Check Code Owner REST endpoint only checked the visibility of\ncode owners when a user was specified to check whether that user can see\nthe code owners (the \u0027user\u0027 option). If a user was not specified the\ncode owner visibility was not checked, since the REST endpoint could\nonly be invoked by admins this was not necessary and it was intended\nthat they could see all accounts. Now that also normal users can call\nthe REST endpoint we do check the code owner visibility when the calling\nuser is not an admin.\n\nBug: Google b/345161989\nChange-Id: I3a2d5d9cc6fde0bb1b4dd690008111ce7c311cf5\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "48cbfc466cdad2309e0635661484589edfcde197",
      "tree": "422934028f2e3cc755b53afad712e7764438c897",
      "parents": [
        "48a9cb27efd769b4fea6f43e60d2136cf2e7f419",
        "b6955d1057fd9ae0fe5e2c8f1c97455651641404"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 14 15:23:54 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 14 15:23:54 2024 +0000"
      },
      "message": "Merge changes Ib28802d3,If54a64ad,I833e9c2b,I0ecdda81,Ib654accc\n\n* changes:\n  Distinguish btw. messages that can be shown to all users vs. admins only\n  CodeOwnerResolverTest: Drop msg that is optionally expected but never occurs\n  CheckCodeOwner: Return whether parent/folder owners are ignored\n  CheckedCodeOwnerConfigFileInfoSubject: Drop \u0027assert\u0027 method prefix\n  CheckCodeOwner: Replace \u0027code_owner_config_file_paths\u0027 field\n"
    },
    {
      "commit": "b6955d1057fd9ae0fe5e2c8f1c97455651641404",
      "tree": "271cf9fa680fc52a7cf20bcc9c83ba6027c59151",
      "parents": [
        "dd0e1b86d37f009d15c628f2c196e7a61e6fee19"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Aug 13 12:44:03 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 14 14:24:00 2024 +0000"
      },
      "message": "Distinguish btw. messages that can be shown to all users vs. admins only\n\nCalling the CheckCodeOwner REST endpoint requires the caller to be an\nadmin (have the \u0027Administrate Server\u0027 capability or the \u0027Check Code\nOwner Capability\u0027). Due to this normal users cannot debug issues with\nOWNERS files on their own, but have to file tickets to find someone that\ncalls the REST endpoint and explains them the result. To reduce the\nticket load we intend to offer the CheckCodeOwner REST endpoint as a\nself-service that every user can invoke. For this we must hide all\ndebug messages that contain information that requires admin permissions.\n\nAs a first step towards offering the CheckCodeOwner REST endpoint as a\nself service we distinguish between messages that can be shown to any\ncalling user and messages that must only be shown to admin users:\n\n* Most messages can be shown to the calling user (e.g. they contain\n  information about the code owner config files that they can access\n  through other APIs).\n* Messages that explain why a code owner email is not resolvable reveal\n  information about whether an email exists or not and hence can be\n  shown only to admins (e.g. we must not reveal whether a non-visible\n  secondary email exists). Instead of the detailed message, for normal\n  users we just show a generic message that the email cannot be resolved\n  because it doesn\u0027t exist or because it is not visible.\n* Messages that explain what another user can see must only be shown to\n  admins (when we offer the CheckCodeOwner REST endpoint as a self\n  service we will not allow to specify a user for whom the evalution\n  should be done, so these message will never be triggered for normal\n  users, but to be safe we suppress them).\n\nOn API level there is no change yet: Since for now debug messages are\nonly returned for admins we always return the admin messages.\n\nBug: Google b/345161989\nChange-Id: Ib28802d38dc637dde82919f17b25014a174dbafc\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "dd0e1b86d37f009d15c628f2c196e7a61e6fee19",
      "tree": "e8e30a10dd6b9bb55806d63d17596d3f090b4acf",
      "parents": [
        "2c57f9e58432bb05397dfbc122a8e046aba11641"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Aug 13 12:10:10 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 14 14:23:49 2024 +0000"
      },
      "message": "CodeOwnerResolverTest: Drop msg that is optionally expected but never occurs\n\nThe tests uses containsAnyOf to check for 2 possible messages, but the\none message contains a spelling mistake (\u0027cannost\u0027 instead of \u0027cannot\u0027,\nonly in the test), hence we know that this cases never happens and we\ncan just drop it.\n\nChange-Id: If54a64ad4cde1a9148bf54103733f2db7c884715\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "2c57f9e58432bb05397dfbc122a8e046aba11641",
      "tree": "3986209dd8891a5f7ddf952bca6eb8e8c1361fda",
      "parents": [
        "9306d3e11ab6428296c81029841475a0db414683"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 14 12:07:55 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 14 14:23:32 2024 +0000"
      },
      "message": "CheckCodeOwner: Return whether parent/folder owners are ignored\n\nTo make debugging code ownerships easier return for the inspected code\nowner files whether parent / folder code owners are ignored.\n\nNote, internally we call folder code owners also \"global code owners\"\n(per-file code owners vs. global code owners that are defined in a code\nowner config file), but there is also the possibility to configure code\nowners globally in the code-owners.config file (code owners that apply\nglobally for all repositories and branches). Hence to avoid confusion\nbetween globally configured code owners and global code owners in a code\nowner config file, we call the first \"global code owners\" and the latter\n\"folder code owners\" in the API and in the documentation.\n\nChange-Id: I833e9c2b266a8d13e1acd15a2b13d72065e7f1e7\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "9306d3e11ab6428296c81029841475a0db414683",
      "tree": "3cee51e51a35554a281c9fcc0bb2ef8abc608263",
      "parents": [
        "c113a315c6e4ca60b98b714eb68017828c94725e"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 14 14:16:43 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 14 14:22:49 2024 +0000"
      },
      "message": "CheckedCodeOwnerConfigFileInfoSubject: Drop \u0027assert\u0027 method prefix\n\nWithout the \"assert\" prefix chained calls are more readable:\n\nassertThat(...).assignsCodeOwnershipToUser()\n\nvs.\n\nassertThat(...).assertAssignsCodeOwnershipToUser()\n\nChange-Id: I0ecdda815efea5fd2c450defc9e0d358f0ee6954\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "c113a315c6e4ca60b98b714eb68017828c94725e",
      "tree": "2e52794414ed423af99f6d6e1dbd395c23b9991d",
      "parents": [
        "fe7aaaf7c97f640834c94d170ab120a400d907df"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 12 15:19:17 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 14 13:43:51 2024 +0000"
      },
      "message": "CheckCodeOwner: Replace \u0027code_owner_config_file_paths\u0027 field\n\nThe \u0027code_owner_config_file_paths\u0027 field contained the paths of the code\nowner config files that assign code ownership to the given email for the\nspecified path. We are dropping this field now and instead return this\ninformation via a new \u0027assigns_code_ownership_to_user\u0027 field that is\nreturned for the inspected code owner config files. For this we change\nthe \u0027code_owner_configs\u0027 field that has been recently added by change\nIb3a57feac to a \u0027checked_code_owner_configs\u0027 field which contains the\ncode owner config files as CheckedCodeOwnerConfigFileInfos instead of\nCodeOwnerConfigFileInfos. CheckedCodeOwnerConfigFileInfo is a wrapper\naround CodeOwnerConfigFileInfo that also contains results of checking\nthe code owner config file, e.g. the new\n\u0027assigns_code_ownership_to_user\u0027 field.\n\nBefore this change:\n...\n\"code_owner_configs\": [\n{\n  \"project\": \"Code-Owners-Test\",\n  \"branch\": \"refs/heads/master\",\n  \"path\": \"/foo/bar/OWNERS\"\n},\n{\n  \"project\": \"Code-Owners-Test\",\n  \"branch\": \"refs/heads/master\",\n  \"path\": \"/foo/OWNERS\"\n},\n{\n  \"project\": \"Code-Owners-Test\",\n  \"branch\": \"refs/heads/master\",\n  \"path\": \"/OWNERS\"\n},\n\"code_owner_config_file_paths\": [\n  \"foo/OWNERS\"\n]\n...\n\nNow:\n...\n\"checked_code_owner_configs\": [\n{\n  \"code_owner_config\": {\n    \"project\": \"Code-Owners-Test\",\n    \"branch\": \"refs/heads/master\",\n    \"path\": \"/foo/bar/OWNERS\"\n  },\n  \"assigns_code_ownership_to_user\": false\n},\n{\n  \"code_owner_config\": {\n    \"project\": \"Code-Owners-Test\",\n    \"branch\": \"refs/heads/master\",\n    \"path\": \"/foo/OWNERS\"\n  },\n  \"assigns_code_ownership_to_user\": true\n},\n{\n  \"code_owner_config\": {\n    \"project\": \"Code-Owners-Test\",\n    \"branch\": \"refs/heads/master\",\n    \"path\": \"/OWNERS\"\n  },\n  \"assigns_code_ownership_to_user\": false\n},\n...\n\nThe new JSON is better as from the name of the old\n\u0027code_owner_config_file_paths\u0027 field it was not clear that in only\ncontained the files that assign code ownership to the user, but not as\none could think, all inspected code owner config files.\n\nAlso with the new JSON we have the possibility to return further\ninformation per code owner config file in the future (e.g. a\n\u0027are_folder_code_owners_ignored\u0027 field that informs about whether folder\ncode owners are being ignored).\n\nCode owner config files are returned in multiple places (when listing\ncode owners and when checking code ownership), but the new\n\u0027assigns_code_ownership_to_user\u0027 field should only be set when checking\ncode ownership. To avoid confusion when this field is being set we do\nnot want to add it as an optional field to CodeOwnerConfigFileInfo but\nwe rather add CheckedCodeOwnerConfigFileInfo as a wrapper for\nCodeOwnerConfigFileInfo that can also contain results of checking the\ncode owner config file. This way CodeOwnerConfigFileInfo that is\nreturned when listing code owners doesn\u0027t have the field and\nCheckCodeOwnerInfo can use CheckedCodeOwnerConfigFileInfo where this\nfield is always set.\n\nHaving this clearly seperated gets more important if we want to add\nfurther fields for check results for code owner config files in the\nfuture.\n\nOne drawback of the old \u0027code_owner_config_file_paths\u0027 field was that it\nonly considered the inspected code owner config files from the parent\ndirectories, but not the special code owner config file in\nrefs/meta/config that may declare default code owners for a repository\nE.g. for a file \u0027/foo/bar/baz.txt\u0027 we inspect the following code owner\nconfig files: \u0027/foo/bar/OWNERS\u0027, \u0027/foo/OWNERS\u0027, \u0027/OWNERS\u0027 and \u0027/OWNERS\u0027\nin \u0027refs/meta/config\u0027. The latter one was not included in the\n\u0027code_owner_config_file_paths\u0027 field if it assigned code ownership to\nthe user (because the field only contained a path, but not a branch\nname, hence \u0027/OWNERS\u0027 in the code branch couldn\u0027t be distinguished from\n\u0027/OWNERS\u0027 in \u0027refs/meta/config\u0027). With the new \u0027code_owner_configs\u0027\nfield, now \u0027checked_code_owner_configs\u0027, we no longer have this problem\nas the entries in this field have the full code owner config key\n(project, branch, path) and hence the \u0027/OWNERS\u0027 file in\n\u0027refs/meta/config\u0027 is returned there too (if it exists).\n\nStrinctly speaking dropping the \u0027code_owner_config_file_paths\u0027 field and\nchanging the \u0027code_owner_configs\u0027 field is a backwards incompatible\nchange, but since the CheckCodeOwner REST endpoint is intended to be\nused for debugging only it should be fine to break the API. I checked\nour request logs internally and in the last month there were only 9\ncalls of this REST endpoint, so it\u0027s unlikely we\u0027ll break any importany\nautomation if we drop this field.\n\nBug: Google b/345161989\nChange-Id: Ib654acccdf5fcfbbce2f6e4cf893bbf13f4d21bc\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "48a9cb27efd769b4fea6f43e60d2136cf2e7f419",
      "tree": "2e03c298aa21b9ace96e1f48d9adbe45bb5ad9f4",
      "parents": [
        "fe7aaaf7c97f640834c94d170ab120a400d907df",
        "027bcd869b9bd1e712ec1843e518b1012c8012ab"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 14 07:57:09 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 14 07:57:09 2024 +0000"
      },
      "message": "Merge \"Fix formatting issues that were introduced by recent change\""
    },
    {
      "commit": "027bcd869b9bd1e712ec1843e518b1012c8012ab",
      "tree": "d4d0e96eb44c8b3dbdf8511b108ad62545abbef5",
      "parents": [
        "67f458214c6dec62664f0dadbedfb318275c11ea"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 14 06:41:06 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 14 06:41:06 2024 +0000"
      },
      "message": "Fix formatting issues that were introduced by recent change\n\nRun google-java-format for all files touched by change I92e223d0d that\nforgot to format the files.\n\nChange-Id: I8089fe055ab5e7a6493df51373710b4b012d62e1\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "fe7aaaf7c97f640834c94d170ab120a400d907df",
      "tree": "2c75cca8b3cd31a8a8bfc01c38de1546f8158447",
      "parents": [
        "714ce79d837f4a99f219731aeefcbbe95ac3cbe1",
        "67f458214c6dec62664f0dadbedfb318275c11ea"
      ],
      "author": {
        "name": "Stan Stavarachi",
        "email": "stavarachi@google.com",
        "time": "Wed Aug 14 01:46:25 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Aug 14 01:46:25 2024 +0000"
      },
      "message": "Merge \"Add code owner scorings to CodeOwnersInfo\""
    },
    {
      "commit": "67f458214c6dec62664f0dadbedfb318275c11ea",
      "tree": "22f3ee152b46d793a7768221cd28dd2268f11040",
      "parents": [
        "7bf7837120b194ff653c4b269d9ea28ee5678df4"
      ],
      "author": {
        "name": "Stan Stavarachi",
        "email": "stavarachi@google.com",
        "time": "Wed Aug 14 01:22:12 2024 +0000"
      },
      "committer": {
        "name": "Stan Stavarachi",
        "email": "stavarachi@google.com",
        "time": "Wed Aug 14 01:23:01 2024 +0000"
      },
      "message": "Add code owner scorings to CodeOwnersInfo\n\nThis will provide the scorings that are used to order code owners in the API response.\n\n\nTesting:\nRequest:\ncurl --user admin:pass http://localhost:8080/a/projects/test/branches/master/code_owners/data\nResponse:\n{\n  \"code_owners\": [\n    {\n      \"account\": {\n        \"_account_id\": 1000000\n      },\n      \"scorings\": {\n        \"DISTANCE\": 0,\n        \"IS_EXPLICITLY_MENTIONED\": 1\n      }\n    }\n  ],\n  \"owned_by_all_users\": true,\n  \"code_owner_configs\": [\n    {\n      \"project\": \"test\",\n      \"branch\": \"refs/heads/master\",\n      \"path\": \"/data/OWNERS\"\n    },\n    {\n      \"project\": \"test\",\n      \"branch\": \"refs/heads/master\",\n      \"path\": \"/OWNERS\"\n    }\n  ]\n}\n\nChange-Id: I92e223d0de0f0d340930b8188b2b9c6f91464a8e\nBug: Google b/349187606\n"
    },
    {
      "commit": "714ce79d837f4a99f219731aeefcbbe95ac3cbe1",
      "tree": "66dd9c1a2dfdec5997d978ed1d235f6068200c4d",
      "parents": [
        "0cff414bf923ad43d45f1dfaac135c5b0175ff7d",
        "6fef0b6666a90b5fe4ac4b30848ccc65666db2ad"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Aug 13 11:49:41 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Aug 13 11:49:41 2024 +0000"
      },
      "message": "Merge \"CheckCodeOwnerIT: Add missing test assertion for code_owner_configs field\""
    },
    {
      "commit": "0cff414bf923ad43d45f1dfaac135c5b0175ff7d",
      "tree": "37c4a5688b7d3e8cb79e3198708818760a0c1311",
      "parents": [
        "038bd71842b98fc46b11cc3e906f4db52256db6f"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Aug 13 08:52:31 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Aug 13 08:54:35 2024 +0000"
      },
      "message": "PathCodeOwnersResult.Builder: Add @CanIgnoreReturnValue annotations\n\nFor methods that return the builder to allow chaining calls the return\nvalue may be ignored.\n\nNot marking these methods with the @CanIgnoreReturnValue annotation\nblock us (Google) from importing the recent code changes.\n\nChange-Id: Ie2cd800ed7e7861a8aed10418fb7d042f08185ec\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "6fef0b6666a90b5fe4ac4b30848ccc65666db2ad",
      "tree": "bd2fae77fb529e851653b2185c6c658e43909bec",
      "parents": [
        "038bd71842b98fc46b11cc3e906f4db52256db6f"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Aug 13 08:22:59 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Aug 13 08:25:03 2024 +0000"
      },
      "message": "CheckCodeOwnerIT: Add missing test assertion for code_owner_configs field\n\nThe \u0027code_owner_configs\u0027 field has been recently added by change\nIb3a57feac. For one test it missed to add an assertion for the\n\u0027code_owner_configs\u0027 field.\n\nChange-Id: I8b534cb03f14dd21a9cc3542ec7a4a7920b925d3\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "038bd71842b98fc46b11cc3e906f4db52256db6f",
      "tree": "f73e1eacf59afdf0b3336eb1b0b36236f46a8e28",
      "parents": [
        "7088891e07d8b4f7c1977ed9c9f5d00338ade31e"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 12 09:08:58 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 12 13:51:22 2024 +0000"
      },
      "message": "Simplify path code owners computation\n\nGlobal code owners (aka folder code owners) should be ignored if there\nis any matching per-file code owner set (in the code owner config that\nis being resolved or in any imported code owner config) that ignores\nglobal and parent code owners (i.e. that has \"set noparent\" set).\n\nTo achieve this we did 2 things:\n1. For the code owner config that is being evaluated we skipped global\n   imports that only import global code owners (importMode \u003d\n   GLOBAL_CODE_OWNER_SETS_ONLY) if the code owner config contained any\n   matching per-file code owner set that ignores global and parent code\n   owners (as those global code owners would be dropped by 2.).\n2. We droped global code owners sets that we had already collected when\n   we found any matching per-file code owner set that ignores global and\n   parent code owners.\n\nSince we use a builder to collect the result it\u0027s not straight-forward\nto drop global code owner sets that have already been added. For this we\nneed to build the PathCodeOwnerResult and then create a new builder that\ncopies all the fields except global code owner sets. This adds quite\nsome boilerplate code.\n\nWhile we have good test coverage for PathCodeOwners I cannot shake off\nthe feeling that there is also some edge case where dropping global code\nowners is wrongly dropping too much, but I can’t pinpoint this.\n\nIn any case the existing logic is confusing and hard to read, which is\nwhy we want to simplify this.\n\nWith this change the logic is easier to grasp now:\n1. Differentiate between global and per-file code owner sets in\n   PathCodeOwnersResult.\n2. Collect all relevant global code owner sets in PathCodeOwnersResult\n   regardless of whether they are possibly ignored.\n3. Have an ignoreGlobalCodeOwners flag in PathCodeOwnersResult that is\n   set when there is any matching per-file code owner set that ignores\n   global and parent code owners.\n4. When looking at code owner sets in PathCodeOwnerResult we simply\n   ignore global code owner set when ignoreGlobalCodeOwners has been set\n   to true.\n\nThis way we no longer need to recreate the PathCodeOwnersResult.Builder\nto drop already collected global code owner sets and the code gets\neasier to read.\n\nIn addition, since the ignored global code owners are now present in\nPathCodeOwnerResult we may inform about them when code ownership is\nbeing checked via the CheckCodeOwner REST endpoint (possible follow-up\nchange).\n\nBug: Google b/345161989\nChange-Id: I6f7723c0ad49a216c5118ffd047216a9648c438a\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "7088891e07d8b4f7c1977ed9c9f5d00338ade31e",
      "tree": "127d39335ec548de64c7754c2ef0d84891896395",
      "parents": [
        "b3d9ab2aa6ea25a74ac0529e9271713ace6dcd85"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Aug 08 06:45:03 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 12 09:40:26 2024 +0000"
      },
      "message": "PathCodeOwners: Flatten the return type (step 3/3)\n\nAdd a AutoValue builder for PathCodeOwnersResult.\n\nThis allows us to get rid of local vars to collect the result data.\n\nHaving an AutoValue builder for PathCodeOwnersResult also allows us to\nunify how results within PathCodeOwners are passed between methods. At\nthe moment the resolveImports method has a return value to return\nresolved/unresolved imports and the messages, and in addition it gets a\nCodeOwnerConfig.Builder passed in to write out relevant parts of the\nimported CodeOwnerConfig. Using 2 different approaches to return results\nis confusing. If we have an AutoValue builder for PathCodeOwnersResult\nwe can just use this builder to collect all the results.\n\nChange-Id: I69c13959dc08517d9dbc8e144d7a28b0fe388582\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "b3d9ab2aa6ea25a74ac0529e9271713ace6dcd85",
      "tree": "590a6ef6ab312bfeb3599b7e34c676c56df01753",
      "parents": [
        "15a982f84093b14bb91c5849dabc957987079339"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 07 15:23:44 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 12 09:40:17 2024 +0000"
      },
      "message": "PathCodeOwners: Flatten the return type (step 2/3)\n\nDrop usage of OptionalResultWithMessages:\n\nUsing OptionalResultWithMessages doesn\u0027t make sense since the path code\nowner computation always returns a result (i.e. the result is not\noptional).\n\nInstead include the debug messages directly into PathCodeOwnersResult.\n\nChange-Id: I11c1454d41f8a7ebae956536041bc68fe4e9b0d5\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "15a982f84093b14bb91c5849dabc957987079339",
      "tree": "329405bd093c7b0a516efbe955bb832983f04e81",
      "parents": [
        "6181ef2e0d89811328b1857bb86f0442009bb8dd"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 07 14:43:35 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 12 09:40:06 2024 +0000"
      },
      "message": "PathCodeOwners: Flatten the return type (step 1/3)\n\nCurrently the path code owner computation returns\nOptionalResultWithMessages\u003cPathCodeOwnersResult\u003e:\n\n* OptionalResultWithMessages: arbitrary result (PathCodeOwnersResult in\n  this case) plus messages\n* PathCodeOwnersResult: the resolved CodeOwnerConfig plus\n  resolved/unresolved imports (PathCodeOwners resolves a CodeOwnerConfig\n  for the path for which code owners should be computed; resolving means\n  that non-matching per-file code owner sets are dropped, imported code\n  owner configs are loaded and replaced with the parts of them which\n  should be imported, global code owner sets are dropped if any matching\n  per-file code owner set has the ignoreGlobalAndParentCodeOwners flag\n  set to true and that the the ignoreParentCodeOwners flag is set to\n  true if any matching per-file code owner set has the\n  ignoreGlobalAndParentCodeOwners flag set to true; the result is called\n  a \"resolved\" CodeOwnerConfig)\n* CodeOwnerConfig: the resolved code owner config representing the\n  actual result of the path code owner resolution (relevant code owner\n  sets and the ignoreParentCodeOwners flag)\n\nThis unnecessarily complicated return type is the result of extending\nthe path code owners computation twice. Initially we just returned the\nresolved CodeOwnerConfig, but then we added OptionalResultWithMessages\nto return debug messages and then PathCodeOwnersResult to return\nresolved/unresolved imports.\n\nTo clean this up we want to include all return data in\nPathCodeOwnersResult and then just return PathCodeOwnersResult.\n\nTo make reviewing this refactoring easier, we do this cleanup in\nmultiple steps\n\n1. [this change] Drop usage of CodeOwnerConfig to return the relevant\n   code owner sets and the ignoreParentCodeOwners flag:\n\nAdd fields for the code owner sets and the ignoreParentCodeOwners flag\ndirectly to PathCodeOwnersResult. The other fields from CodeOwnerConfig\nare not used and also users of PathCodeOwnersResult never access the\nwrapped CodeOwnerConfig directly.\n\nNote, temporarily this adds more boiler-plate code for local vars that\ncollect the result data, but we will clean this up in a later step (see\nstep 3. below).\n\n2. [follow-up change] Drop usage of OptionalResultWithMessages:\n\nUsing OptionalResultWithMessages doesn\u0027t make sense since the path code\nowner computation always returns a result (i.e. the result is not\noptional).\n\nInstead include the debug messages directly into PathCodeOwnersResult.\n\n3. [follow-up change] Add a AutoValue builder for PathCodeOwnersResult:\n\nThis allows us to get rid of local vars to collect the result data.\n\nHaving an AutoValue builder for PathCodeOwnersResult also allows us to\nunify how results within PathCodeOwners are passed between methods. At\nthe moment the resolveImports method has a return value to return\nresolved/unresolved imports and the messages, and in addition it gets a\nCodeOwnerConfig.Builder passed in to write out relevant parts of the\nimported CodeOwnerConfig. Using 2 different approaches to return results\nis confusing. If we have an AutoValue builder for PathCodeOwnersResult\nwe can just use this builder to collect all the results.\n\nChange-Id: I304e66a4eee29d79c490ba1c6013c8a1f59338ed\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "6181ef2e0d89811328b1857bb86f0442009bb8dd",
      "tree": "de7bd8c6e97fb4fec36993ad7f07c6151cae8187",
      "parents": [
        "35652d547507438dae69a54e6551e4aabf0ebf20"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Aug 07 06:07:48 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 12 09:39:47 2024 +0000"
      },
      "message": "CheckCodeOwner: Return relevant code owner config files\n\nTo make debugging of code owner config files easier return all code\nowner config files that are relevant for computing the code ownership\nwhen checking a code owner, i.e. all code owner config files which have\nbeen inspected to compute the code ownership.\n\nNote, there is already a codeOwnerConfigFilePaths field. This field\ncontains the paths of the code owner config files that assign code\nownership to the given email for the specified path. This is different\nfrom all inspected owners files. In a follow-up change we may drop the\ncodeOwnerConfigFilePaths field and instead include the information of\nwhether a code owner config file assigns code ownership to the given\nemail for the specified path into a new field inside\nCodeOwnerConfigFileInfo.\n\nBug: Google b/345161989\nChange-Id: Ib3a57feac6e9ea293eaba97640c4251fd8d558e7\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nReviewed-on: https://gerrit-review.googlesource.com/c/plugins/code-owners/+/434758\nTested-by: Zuul \u003czuul-63@gerritcodereview-ci.iam.gserviceaccount.com\u003e\nReviewed-by: Kamil Musin \u003ckamilm@google.com\u003e\n"
    },
    {
      "commit": "35652d547507438dae69a54e6551e4aabf0ebf20",
      "tree": "6bf27c30be9433c2aac2a0f6644a07da05eae1c6",
      "parents": [
        "48e36fe7ed0693de0f5ab3a866119f86357b5fa1"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Aug 09 09:59:51 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 12 06:08:32 2024 +0000"
      },
      "message": "Fix wrongly returned import when per file owner is transitively imported\n\nIf an OWNERS file A has a global import of an OWNERS file B that has a\nper-file import, then the per-file import was returned twice, once as\nexpected for OWNERS file B and once wrongly for OWNERS file A.\n\nWhen resolving imports for per-file code owner sets we must only look at\nthe per-file code owner sets from the OWNERS file that is being\nresolving and not at per-file code owner sets which have already been\nimported via global imports.\n\nChange-Id: I0ec04d121f4b1f81ca75e8f52c5e15c3a75f32b1\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nReviewed-on: https://gerrit-review.googlesource.com/c/plugins/code-owners/+/434757\nTested-by: Zuul \u003czuul-63@gerritcodereview-ci.iam.gserviceaccount.com\u003e\nReviewed-by: Kamil Musin \u003ckamilm@google.com\u003e\n"
    },
    {
      "commit": "48e36fe7ed0693de0f5ab3a866119f86357b5fa1",
      "tree": "911bdb295857a68c9415135cb63a3323765e6149",
      "parents": [
        "943b365fe9b8e1a37859ffd7e5f4c8b85d2043ea"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Aug 05 08:14:59 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Aug 06 08:57:15 2024 +0000"
      },
      "message": "Add a basic screen to invoke the Check Code Owner REST endpoint\n\nIt happens frequently that users have questions about code owners, e.g.\nwhy a certain user is or isn\u0027t a code owner of a certain file. In this\ncase admins can use the Check Code Owner REST endpoint to get insights\ninto the code owner computation.\n\nInvoking the Check Code Owner REST endpoint is a bit cumbersome though\nand hence takes more time than it should:\n\n* one needs to lookup the URL from the documentation and then assemble\n  the URL manually\n* identifiers in the URL (e.g. project names and files names) need to be\n  URL-encoded\n* to make the JSON output readable pretty-printing (pp\u003d1) should be\n  requested\n* one needs to know how to call the REST endpoint with authentication\n  (e.g. through curl or by opening the URL in the browser)\n\nTo simplify this we add a very basic screen with a form that allows to\ncall the Check Code Owner REST endpoint from the UI. This form takes\ncare of the pain-points above and also provides links to the\ndocumentation.\n\nThe new screen is available at:\n\u003cGERRIT_URL\u003e/x/code-owners/check-code-owner\n\nScreenshot: https://i.imgur.com/6CFDFpH.png\n\nThe implementation of the screen followed the example of the service\nuser creation screen from the serviceuser plugin:\nhttps://gerrit.googlesource.com/plugins/serviceuser/+/master/web/gr-serviceuser-create.ts\n\nBug: Google b/345161989\nChange-Id: I25cff9f08ee3c8eb3a11dc4cd2d262fc8be1a6e3\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nReviewed-on: https://gerrit-review.googlesource.com/c/plugins/code-owners/+/434457\nTested-by: Zuul \u003czuul-63@gerritcodereview-ci.iam.gserviceaccount.com\u003e\nReviewed-by: Kamil Musin \u003ckamilm@google.com\u003e\n"
    },
    {
      "commit": "943b365fe9b8e1a37859ffd7e5f4c8b85d2043ea",
      "tree": "89d8d0c7bb092556f885afeaa6b1626fe6b4b95b",
      "parents": [
        "f09e04137b0c8edab670bf5b4100bd25b219e7cd"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Aug 02 11:24:50 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Aug 02 11:50:02 2024 +0000"
      },
      "message": "Fix formatting issue in code owners REST API documentation\n\nTable rows must be a single line, otherwise the table is broken.\n\nSee the problem at:\nhttps://gerrit-review.git.corp.google.com/plugins/code-owners/Documentation/rest-api.html#code-owner-check-info\n\nChange-Id: I2adc91544e43083877c73d58204660d287266ebb\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nReviewed-on: https://gerrit-review.googlesource.com/c/plugins/code-owners/+/434397\nReviewed-by: Kamil Musin \u003ckamilm@google.com\u003e\nTested-by: Zuul \u003czuul-63@gerritcodereview-ci.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "f09e04137b0c8edab670bf5b4100bd25b219e7cd",
      "tree": "ea55de4fbb64d2e53c4f2c03f811c55c3b642fbd",
      "parents": [
        "9d2aab0a3a6c0b094366720acdbabcac71a5b9b0"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Aug 01 13:28:38 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Aug 02 08:27:21 2024 +0000"
      },
      "message": "Check Code Owner REST endpoint: Fix formatting of OWNERS file in debug log\n\nThere was a debug log that didn\u0027t format the OWNERS file correctly. The\ndebug log was:\n\n\"resolve code owners for /foo/bar/baz.md from code owner config\nKey{branchNameKey\u003dcom.google.gerrit.plugins.codeowners.acceptance.api.CheckCodeOwnerIT_checkCodeOwner_byAdmindefault_project,refs/heads/master,\nfolderPath\u003d/foo, fileName\u003dOptional.empty}\"\n\nNow it is:\n\n\"resolve code owners for /foo/bar/baz.md from code owner config\ncom.google.gerrit.plugins.codeowners.acceptance.api.CheckCodeOwnerIT_checkCodeOwner_byAdmindefault_project:master:/foo/OWNERS\"\n\nBug: Google b/345161989\nChange-Id: I1180962ae50791d6f81ee996a892c42a18baf491\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nReviewed-on: https://gerrit-review.googlesource.com/c/plugins/code-owners/+/434357\nReviewed-by: Kamil Musin \u003ckamilm@google.com\u003e\nTested-by: Zuul \u003czuul-63@gerritcodereview-ci.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "9d2aab0a3a6c0b094366720acdbabcac71a5b9b0",
      "tree": "b24c21b33fbbff45ad9803bfda4d286f5a890532",
      "parents": [
        "7bf7837120b194ff653c4b269d9ea28ee5678df4"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Aug 01 11:14:46 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Aug 02 07:03:37 2024 +0000"
      },
      "message": "Return web links for OWNERS files when listing code owners\n\nWhen listing code owners the response contains the code owner config\nfiles (e.g. OWNERS files) that have been inspected to gather the code\nowners. Knowing the inspected code owner config files is important if\nyou want to verify that the correct code owners have been returned or if\nyou want to understand why a certain expected code owner was not\nincluded, as in this case you want to look into these code owner config\nfiles to see which code owners and rules they define. So far, we\nreturned the project, branch and path for the code owner config files,\nwhich is sufficient to locate the code owner config files, but\nassembling the links to the code owner config files from this\ninformation is cumbersome and can take significant time, especially if\nyou need to inspect multiple code owner config files. To save this\neffort we now return file web links for the code owner config files.\nHaving file web links available makes the lookup of code owner config\nfiles much easier, as they contain the direct URLs to the code owner\nconfig files.\n\nNote that file web links are only available if they are configured.\n\nCodeOwnerConfigFileJson is the class that writes the JSON for the\nreturned code owner config files. In this class we need to set the new\nCodeOwnerConfigFileInfo.webLinks field. To create the file web links we\nneed the project, branch and path of the code owner config file, but\nalso the revision from which it was read. The revision was not available\nin CodeOwnerConfigFileJson since it only got the CodeOwnerConfig.Key as\ninput which doesn\u0027t contain the revision. To make the revision available\nwe have to provide CodeOwnerConfig instead of CodeOwnerConfig.Key.\n\nCodeOwnerConfigFileJson also gets imported code owner config files as\ninput which are formatted in the same way as the importing code owner\nconfig file. To include web links for them too CodeOwnerConfigImport\nneeds to be extended to contain CodeOwnerConfig, which contains the\nrevision, instead of only CodeOwnerConfig.Key.\n\nSince some imports can be unresolved (e.g. an import that references an\nnon-existing code owner config file) the imported CodeOwnerConfig in\nCodeOwnerConfigImport is optional (i.e. it is not set for unresolved\nimports). This means, if an import is unresolved no web links are\nreturned for it.\n\nDue to CodeOwnerConfigImport needing the imported CodeOwnerConfig for\nresolved imports now, we need to provide it in PathCodeOwners which is\nresponsible for resolving the imports and also in quite some tests.\n\nBug: Google b/345161989\nChange-Id: If7efad1ffaf456a192ccea2e09d76b19d8f3b4fa\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nReviewed-on: https://gerrit-review.googlesource.com/c/plugins/code-owners/+/434337\nReviewed-by: Kamil Musin \u003ckamilm@google.com\u003e\nTested-by: Zuul \u003czuul-63@gerritcodereview-ci.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "7bf7837120b194ff653c4b269d9ea28ee5678df4",
      "tree": "86a3b68ffd46f238bcad41f1d300dbad995eebfd",
      "parents": [
        "1bba396d25bbca8d69dc2f316389cdc67f930a02"
      ],
      "author": {
        "name": "Kamil Musin",
        "email": "kamilm@google.com",
        "time": "Wed Jul 24 12:03:31 2024 +0000"
      },
      "committer": {
        "name": "Kamil Musin",
        "email": "kamilm@google.com",
        "time": "Thu Jul 25 12:56:10 2024 +0000"
      },
      "message": "Revert \"Revert \"Adapt to change in Gerrit core that changed the ...\"\n\nRevert submission 433677-revert-of-submit-acl-improvment\n\nReason for revert: Rolling forward to implement a fix on top\n\nReverted changes: /q/submissionid:433677-revert-of-submit-acl-improvment\n\nChange-Id: Ic590b94f165434344a08ed7cc9bcbe042ee43fb6\nReviewed-on: https://gerrit-review.googlesource.com/c/plugins/code-owners/+/433957\nTested-by: Zuul \u003czuul-63@gerritcodereview-ci.iam.gserviceaccount.com\u003e\nReviewed-by: Frank Borden \u003cfrankborden@google.com\u003e\n"
    },
    {
      "commit": "1bba396d25bbca8d69dc2f316389cdc67f930a02",
      "tree": "e2c03a997f950e486a59637dd65f3c049f88323d",
      "parents": [
        "d73f23c4fc846b4e457fcacd786bbd322571b2c7"
      ],
      "author": {
        "name": "Kamil Musin",
        "email": "kamilm@google.com",
        "time": "Fri Jul 19 12:47:58 2024 +0000"
      },
      "committer": {
        "name": "Kamil Musin",
        "email": "kamilm@google.com",
        "time": "Fri Jul 19 14:04:06 2024 +0000"
      },
      "message": "Revert \"Adapt to change in Gerrit core that changed the error messages for submit\"\n\nThis reverts commit d488c5978e4b95e30e8a914def58e62452119220.\n\nReason for revert: Dependant on https://gerrit-review.git.corp.google.com/c/gerrit/+/430537\n\nChange-Id: I3dce3377569181946c25e02a99f04b5113f2d7e5\nReviewed-on: https://gerrit-review.googlesource.com/c/plugins/code-owners/+/433717\nTested-by: Zuul \u003czuul-63@gerritcodereview-ci.iam.gserviceaccount.com\u003e\nReviewed-by: Frank Borden \u003cfrankborden@google.com\u003e\n"
    },
    {
      "commit": "d73f23c4fc846b4e457fcacd786bbd322571b2c7",
      "tree": "86a3b68ffd46f238bcad41f1d300dbad995eebfd",
      "parents": [
        "05ab2424f130613194a7367398aa6cba6db98fbe"
      ],
      "author": {
        "name": "Kamil Musin",
        "email": "kamilm@google.com",
        "time": "Tue Jul 16 13:36:04 2024 +0200"
      },
      "committer": {
        "name": "Kamil Musin",
        "email": "kamilm@google.com",
        "time": "Tue Jul 16 12:10:24 2024 +0000"
      },
      "message": "Refactor existing uses of `noAwait` to use `void` operator instead.\n\nThis is currently the recommended practice to call async functions\nwithout consuming the return values at Google.\n\nChange-Id: I34fbcee0c6ea01e7019f36f72073b016a4c57cf6\nReviewed-on: https://gerrit-review.googlesource.com/c/plugins/code-owners/+/433437\nReviewed-by: Dmitrii Filippov \u003cdmfilippov@google.com\u003e\nTested-by: Zuul \u003czuul-63@gerritcodereview-ci.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "05ab2424f130613194a7367398aa6cba6db98fbe",
      "tree": "a303f323aed39ed47018d9feb6c2ba33b0cbae50",
      "parents": [
        "d488c5978e4b95e30e8a914def58e62452119220"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Jul 12 08:03:57 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Jul 12 11:01:33 2024 +0000"
      },
      "message": "Respect the suggest.skipServiceUsers config when suggesting code owners\n\nBy default Gerrit doesn\u0027t suggest service users, but this behavior can\nbe overriden by setting suggest.skipServiceUsers\u003dfalse in the gerrit\nconfig. When this setting was added the code-owners plugin was not\nadapted to respect it. Fix this now.\n\nBug: Google b/352467354\nChange-Id: I234fddf7386979e0848abd911cca9d85281e15fa\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nReviewed-on: https://gerrit-review.googlesource.com/c/plugins/code-owners/+/433118\nReviewed-by: Nitzan Gur-Furman \u003cnitzan@google.com\u003e\nTested-by: Zuul \u003czuul-63@gerritcodereview-ci.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "d488c5978e4b95e30e8a914def58e62452119220",
      "tree": "b576123ebd1e89870530c242efa793d24469202e",
      "parents": [
        "4e47cbe5964772024261d01526be4e17b8132ef6"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Jun 20 06:48:08 2024 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Jun 20 07:54:06 2024 +0000"
      },
      "message": "Adapt to change in Gerrit core that changed the error messages for submit\n\nChange Ic6dbda6de improved the error messages that are returned on\nsubmit when there are problem preventing the change from being\nsubmitted. Adapt the code-owners tests that verified these messages to\nthe new error messages.\n\nGoogle-Bug-Id: b/347935402\nChange-Id: Ib8674af844d1f6eaebfbc118d9ec179410b3ba96\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nReviewed-on: https://gerrit-review.googlesource.com/c/plugins/code-owners/+/430877\nReviewed-by: Kamil Musin \u003ckamilm@google.com\u003e\nTested-by: Zuul \u003czuul-63@gerritcodereview-ci.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "4e47cbe5964772024261d01526be4e17b8132ef6",
      "tree": "f9abacf3ed0929632cc7ac016ba02a1d9a78f29a",
      "parents": [
        "762423203fc1fe73ab66893b4ba3657488c1ffb4"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Jun 17 11:00:18 2024 +0000"
      },
      "committer": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Mon Jun 17 12:12:23 2024 +0000"
      },
      "message": "Fix usage of ChangedFilesByPatchSetCache\n\nThis caching didn\u0027t work because we created a new instance in the\ncallback that is invoked per file, rather than creating one instance and\nusing it for the whole request.\n\nNote, this cache is only relevant when sticky code owner approvals are\nenabled.\n\nChange-Id: Ic2357878227e5f1ffac99530f0584d42b7f1ea3b\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nReviewed-on: https://gerrit-review.googlesource.com/c/plugins/code-owners/+/430377\nReviewed-by: Patrick Hiesel \u003chiesel@google.com\u003e\nTested-by: Zuul \u003czuul-63@gerritcodereview-ci.iam.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "762423203fc1fe73ab66893b4ba3657488c1ffb4",
      "tree": "22bb8be33c496a70d06c11591fa07d7be029385e",
      "parents": [
        "9241c3051cab78a12e60d4aa6efaa097da25ffcf"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Jun 17 10:28:35 2024 +0000"
      },
      "committer": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Mon Jun 17 11:03:56 2024 +0000"
      },
      "message": "Fix recording of transient cache metrics\n\nThere are 2 transient caches with each two metrics, one for actual reads\nand one for cache reads. Due to a copy\u0026paste mistake we increased the\nsame metric for both transient caches on cache reads.\n\nChange-Id: I213846915eecb5e52293dd7ccd958d41e3e3934e\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nReviewed-on: https://gerrit-review.googlesource.com/c/plugins/code-owners/+/430181\nTested-by: Zuul \u003czuul-63@gerritcodereview-ci.iam.gserviceaccount.com\u003e\nReviewed-by: Patrick Hiesel \u003chiesel@google.com\u003e\n"
    },
    {
      "commit": "9241c3051cab78a12e60d4aa6efaa097da25ffcf",
      "tree": "4af51a5cc83951202e61512cba30a113d8e1f1c2",
      "parents": [
        "386c77c539b5b38eb868f470594b2242e962a371"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri May 24 06:36:53 2024 +0000"
      },
      "committer": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Fri May 24 07:36:30 2024 +0000"
      },
      "message": "Clarify that being able to approve changes doesn\u0027t make a user a code owner\n\nCode owner approvals are applied by voting on a label. Which label\ncounts as a code owner approval is configurable. Sometimes users think\nthat being able to vote on that label makes them a code owner. Having\nthis permission is not sufficient, but to be considered as a code owner\nusers must be listed as a code owner in an OWNERS file. Add a note about\nthis to the documentation.\n\nRelease-Notes: skip\nChange-Id: I39df35bb14ae81b6f6f2af69ed146a943924041d\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nReviewed-on: https://gerrit-review.googlesource.com/c/plugins/code-owners/+/426423\nTested-by: Zuul \u003czuul-63@gerritcodereview-ci.iam.gserviceaccount.com\u003e\nReviewed-by: Patrick Hiesel \u003chiesel@google.com\u003e\n"
    }
  ],
  "next": "386c77c539b5b38eb868f470594b2242e962a371"
}
