)]}'
{
  "log": [
    {
      "commit": "89a3d82795f5e3bf518250c8892323983b73ff34",
      "tree": "c22c31d1e7c152841620695e14c95dba91298435",
      "parents": [
        "b68c547d3e28d69207b6b809dcd1c678d025c94e"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Jul 25 09:38:38 2022 +0200"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Jul 25 09:38:38 2022 +0200"
      },
      "message": "Adapt calls to FileUtils#touch\n\nFileUtils#touch is changing behavior, including:\n\n- not creating parent directories when necessary\n\nThis change was proposed as a Google-internal CL and this change is\napplying it in the open source project.\n\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nChange-Id: I07dad3c3234296c12d4120ae27692ceb32ab7212\n"
    },
    {
      "commit": "b68c547d3e28d69207b6b809dcd1c678d025c94e",
      "tree": "d3ef54a06176ad92afe197aba09be9ab2083f473",
      "parents": [
        "30e4780dc7137a5da0c0eafdb330128be76d6723"
      ],
      "author": {
        "name": "Joerg Zieren",
        "email": "zieren@google.com",
        "time": "Mon Mar 07 11:47:37 2022 +0100"
      },
      "committer": {
        "name": "Joerg Zieren",
        "email": "zieren@google.com",
        "time": "Mon Mar 07 11:47:37 2022 +0100"
      },
      "message": "Fix a call site where the return value of a pure getter method is unused\n\nChange-Id: Id5ed0ebc8fd05a54cf17995607ce139d045b884a\n"
    },
    {
      "commit": "30e4780dc7137a5da0c0eafdb330128be76d6723",
      "tree": "ea048f77c017a3859ef3afe2c59ace1cc8e3d759",
      "parents": [
        "92116ec8cbdace459878acd3f3e715c7b767be9c"
      ],
      "author": {
        "name": "Gal Paikin",
        "email": "paiking@google.com",
        "time": "Thu Dec 16 12:28:12 2021 +0100"
      },
      "committer": {
        "name": "Gal Paikin",
        "email": "paiking@google.com",
        "time": "Thu Dec 16 12:28:12 2021 +0100"
      },
      "message": "Fix calls to logger\u0027s log(string)\n\nThis is in preparation for Google\u0027s PII efforts that are planned later.\n\nGoogle-Bug-Id: b/209582622\nChange-Id: I968d470b8fe924eafb2da3a888b32ca4236a5d14\n"
    },
    {
      "commit": "92116ec8cbdace459878acd3f3e715c7b767be9c",
      "tree": "d291ee98a8d7176b5291ba59df61308d25102295",
      "parents": [
        "59aaf7a4261750500cff1b4355004bebf474f682"
      ],
      "author": {
        "name": "Youssef Elghareeb",
        "email": "ghareeb@google.com",
        "time": "Wed Sep 22 16:19:48 2021 +0200"
      },
      "committer": {
        "name": "Youssef Elghareeb",
        "email": "ghareeb@google.com",
        "time": "Wed Sep 22 16:28:13 2021 +0200"
      },
      "message": "Adapt to changes in gerrit core\n\nChange I78c15e01 migrated PrologEnvironment off of PatchListCache.\nfind-owners used to reference this field which is no longer valid, hence\nfixing with this change. This field was redundant in find-owners anyway,\nso we are just removing it.\n\nWhile we are at it, cleanup some unused code in find-owners as well.\n\nChange-Id: I31d938875d857775263dc17e8e1f8b5b47f0f41d\n"
    },
    {
      "commit": "59aaf7a4261750500cff1b4355004bebf474f682",
      "tree": "d8cdda01cccbf17dd12f7ee422401e56f9b176ed",
      "parents": [
        "7a5928121e500dd01f5f7f003c97c4a20f9c05bc"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Jun 17 16:11:18 2021 +0200"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Jun 25 09:14:12 2021 +0200"
      },
      "message": "Update link to the code-owners plugin\n\nSo far the link was pointing to the code-owners plugin documentation in\nGitiles. At this place the source code of the documentation can be seen,\nbut links in it do not work there.\n\nInstead point to the hosted plugin documentation of the android host\nwhich has this plugin installed. There we have the rendered\ndocumentation and links work here.\n\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nChange-Id: Ic7620a01dcf40fbd15543f6d9f19952d512aa83d\n"
    },
    {
      "commit": "7a5928121e500dd01f5f7f003c97c4a20f9c05bc",
      "tree": "c99d8f8e6e46cc5626c03f5f8be0e2217b0e23f9",
      "parents": [
        "37efee4d389411084bbd9d94324490296f374fe0"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Jun 17 15:38:12 2021 +0200"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Jun 17 15:38:46 2021 +0200"
      },
      "message": "Add a toc file for the plugin documentation\n\nAt Google this file is required to host the plugin documentation.\n\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nChange-Id: I77ae7eab371562b89f8c7ef49b13df797aa3b123\n"
    },
    {
      "commit": "37efee4d389411084bbd9d94324490296f374fe0",
      "tree": "7a2ea017e35c9032c8691671e19ed2611c1be35e",
      "parents": [
        "d27c487472bbec8e788c64dea04890adce057d45"
      ],
      "author": {
        "name": "Youssef Elghareeb",
        "email": "ghareeb@google.com",
        "time": "Mon May 31 13:33:45 2021 +0200"
      },
      "committer": {
        "name": "Youssef Elghareeb",
        "email": "ghareeb@google.com",
        "time": "Mon May 31 12:13:15 2021 +0000"
      },
      "message": "Adapt to change in gerrit core\n\nChanging user1/2/3 to findowners1/2/3 because test ApiIT#accountTest\nfails after gerrit change I2ed6ce74 changed AccountCreator to create the\ndefault user in tests with name \"user1\".\n\nChange-Id: I70c6d983253de965eb19822512d421f07a4e8af4\n"
    },
    {
      "commit": "d27c487472bbec8e788c64dea04890adce057d45",
      "tree": "ea30711960c5703258f479658797187a8d2b7504",
      "parents": [
        "f7250e047d14658cfcb209723de9f8b0223b0012"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Apr 28 17:31:49 2021 +0200"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Apr 28 17:33:13 2021 +0200"
      },
      "message": "Add a deprecation notice\n\nThe find-owners plugin has been deprecated in favour of the code-owners\nplugin. Inform about it in the README file and on the about page.\n\nIn addition add a note on the page that explains the syntax since many\nusers still reference it to learn about the OWNERS file syntax.\n\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nChange-Id: I38f6a94337c12d56f5f85602fca3fe1b3dbc560a\n"
    },
    {
      "commit": "f7250e047d14658cfcb209723de9f8b0223b0012",
      "tree": "c4770065aea9164943fe164dfd1137b88eff4c38",
      "parents": [
        "4ec0dd04300f7e0029f03c63e54235808d895249"
      ],
      "author": {
        "name": "Dmitrii Filippov",
        "email": "dmfilippov@google.com",
        "time": "Tue Mar 09 18:58:44 2021 +0100"
      },
      "committer": {
        "name": "Dmitrii Filippov",
        "email": "dmfilippov@google.com",
        "time": "Tue Mar 09 19:00:59 2021 +0100"
      },
      "message": "Show UI only if code-owners functionality disabled for a project\n\nChange-Id: I347ac111f6658b1aa75b544c57a06df9c271b9b3\n"
    },
    {
      "commit": "4ec0dd04300f7e0029f03c63e54235808d895249",
      "tree": "5fb3054207b105cc0b09a2cc161d12a58d15589d",
      "parents": [
        "fabbbf05f30fb1bfd5c43f6065db5c6b6ffe7b31",
        "36391137305361430e66e55f643b9645a44599a5"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon Dec 28 17:15:13 2020 +0100"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon Dec 28 17:15:13 2020 +0100"
      },
      "message": "Merge branch \u0027stable-3.2\u0027\n\n* stable-3.2:\n  Adapt tests to compact JSON\n\nChange-Id: If373812592f9aee7adb387bf754df30009bed203\n"
    },
    {
      "commit": "36391137305361430e66e55f643b9645a44599a5",
      "tree": "87ed9af3bd9040aff4704b459ede51cc0a312ac4",
      "parents": [
        "5e74446714e7ce804009a035de94694c920a72bd",
        "1f02d31f659082b9081c9ce3cfade37145c7f03b"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon Dec 28 17:10:46 2020 +0100"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon Dec 28 17:10:46 2020 +0100"
      },
      "message": "Merge branch \u0027stable-3.1\u0027 into stable-3.2\n\n* change-292106:\n  Adapt tests to compact JSON\n  Revert \"Clean up BUILD rules\"\n\nChange-Id: I9062c5f84c85cdf3203f8c4c7d7a8462f276c98e\n"
    },
    {
      "commit": "1f02d31f659082b9081c9ce3cfade37145c7f03b",
      "tree": "a5e5dc8c86dfbebf9241a32c4d7bbf2f8f813370",
      "parents": [
        "3b0cfeabc2ba8588076f7069107112bd0abf4e49"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Dec 14 12:13:57 2020 +0100"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david.ostrovsky@gmail.com",
        "time": "Mon Dec 28 15:49:13 2020 +0000"
      },
      "message": "Adapt tests to compact JSON\n\nSince change I2f1cb91e9 Gerrit now always returns compact JSON. Adapt\nthe test to this.\n\nInstead of doing string assertions on the JSON the find-owners tests\nshould rather parse the JSON with GSON and then do assertions on the\nparsed objects so that the tests would not be affected by such a change.\nHowever since the find-owners plugin is deprecated (soon to be replace\nby the code-owners plugin) we don\u0027t want to invest time in rewriting\nthese tests.\n\nApiIT.getOwnersTest was already failing before, as the owner_revision\nfield was not set in the expected response. While we are here, fix this\ntoo.\n\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nChange-Id: I616b3fe74ac99fafdd986442751eb74c69c0ac5c\n(cherry picked from commit fabbbf05f30fb1bfd5c43f6065db5c6b6ffe7b31)\n"
    },
    {
      "commit": "fabbbf05f30fb1bfd5c43f6065db5c6b6ffe7b31",
      "tree": "5fb3054207b105cc0b09a2cc161d12a58d15589d",
      "parents": [
        "f967fe298757f1ce6e7825b1721d982643d7d51a"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Dec 14 12:13:57 2020 +0100"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Dec 14 12:13:57 2020 +0100"
      },
      "message": "Adapt tests to compact JSON\n\nSince change I2f1cb91e9 Gerrit now always returns compact JSON. Adapt\nthe test to this.\n\nInstead of doing string assertions on the JSON the find-owners tests\nshould rather parse the JSON with GSON and then do assertions on the\nparsed objects so that the tests would not be affected by such a change.\nHowever since the find-owners plugin is deprecated (soon to be replace\nby the code-owners plugin) we don\u0027t want to invest time in rewriting\nthese tests.\n\nApiIT.getOwnersTest was already failing before, as the owner_revision\nfield was not set in the expected response. While we are here, fix this\ntoo.\n\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nChange-Id: I616b3fe74ac99fafdd986442751eb74c69c0ac5c\n"
    },
    {
      "commit": "f967fe298757f1ce6e7825b1721d982643d7d51a",
      "tree": "766363981cd5e3944ee49c6f56972f89b4d892c7",
      "parents": [
        "9b47c45fe309e5aa78f2d8e89b3d69587f4752a4"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Tue Sep 15 17:26:19 2020 +0200"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Tue Sep 15 17:26:24 2020 +0200"
      },
      "message": "Still enable find owners even if code owners enabled\n\nChange-Id: I95bc2efed44300e5c1160da82c77b4017423d385\n"
    },
    {
      "commit": "9b47c45fe309e5aa78f2d8e89b3d69587f4752a4",
      "tree": "251ddbd2781a9e0e25de3f9065595ad504e8cde0",
      "parents": [
        "4faff4755c54fd4783ce909307e633b83b3471b1"
      ],
      "author": {
        "name": "Alice Kober-Sotzek",
        "email": "aliceks@google.com",
        "time": "Mon Aug 31 10:34:33 2020 +0200"
      },
      "committer": {
        "name": "Alice Kober-Sotzek",
        "email": "aliceks@google.com",
        "time": "Mon Aug 31 10:34:33 2020 +0200"
      },
      "message": "findowners: Fix concurrency issue in Config class\n\nThe Config class seems to be used in multi-threaded contexts (e.g. via\nCache -\u003e OwnersDb) but is not hardened for multi-threading. We noticed\nerrors in our logs complaining about concurrent modifications of\nprojectConfigMap when computeIfAbsent() is called on it. Fix that\nimmediate issue by switching to a concurrent type for the map.\n\nChange-Id: I1b3f2ae7211787974440444c12c2c703e9d39d9b\n"
    },
    {
      "commit": "4faff4755c54fd4783ce909307e633b83b3471b1",
      "tree": "21ea693cef0532abf825aa08633e893a511c09f4",
      "parents": [
        "7ff882e02a7c100f668499f5f34b971d6fa8b42b"
      ],
      "author": {
        "name": "Gary Miguel",
        "email": "garymm@google.com",
        "time": "Thu Aug 13 16:24:42 2020 -0700"
      },
      "committer": {
        "name": "Gary Miguel",
        "email": "garymm@google.com",
        "time": "Thu Aug 20 11:07:58 2020 -0700"
      },
      "message": "Use minimum required Code-Review vote in string.\n\nOn our gerrit host, Code-Review +2 is required, and users were confused\nas to why +1 was not working.\n\nBug: fuchsia:58256\nChange-Id: Iecfd073ec3cf2d19650300c3c5a59432a63764ed\n"
    },
    {
      "commit": "7ff882e02a7c100f668499f5f34b971d6fa8b42b",
      "tree": "44e9282fbf4b3695f89d6612f78f8cfe97ded4d0",
      "parents": [
        "72b9f789df11b88c46c5ee91d71e750f3db38706"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Wed Aug 12 10:24:14 2020 +0200"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Wed Aug 12 10:24:21 2020 +0200"
      },
      "message": "Move hide action logic after `showchange` event\n\nIf not waiting for `showchange`, the underneath API element may not fully initialized\nand will throw error when try to setActionHidden.\n\nChange-Id: Iaa664f5ed29e56504dd30789c42ab12a4ddcb4db\n"
    },
    {
      "commit": "72b9f789df11b88c46c5ee91d71e750f3db38706",
      "tree": "e2c900c7e10064dfc4ac75616cbdd9050718d6d6",
      "parents": [
        "9fc24b106c26945a9e6ab8da77f2d6de05647857"
      ],
      "author": {
        "name": "Gal Paikin",
        "email": "paiking@google.com",
        "time": "Wed Aug 05 14:42:40 2020 +0300"
      },
      "committer": {
        "name": "Gal Paikin",
        "email": "paiking@google.com",
        "time": "Wed Aug 05 14:42:40 2020 +0300"
      },
      "message": "Adapt to change in gerrit core\n\nThe PluginConfig class was changed in change I47bd35d50.\n\nChange-Id: I2033914b333b193b8b115a15cfe7e700b86b343c\n"
    },
    {
      "commit": "9fc24b106c26945a9e6ab8da77f2d6de05647857",
      "tree": "1c74b8581ffe75a72a2fb9a7d55c0e6f7ab06bd1",
      "parents": [
        "30456f2d8b8dbc68dcdbfb710ba3fca847a07ff4"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Mon Jul 27 17:31:32 2020 +0200"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Mon Jul 27 17:31:42 2020 +0200"
      },
      "message": "Hide the find-owners from overflow menu when code-owners enabled\n\nChange-Id: I0655969825a0a93d821df41763d864e12614d1c3\n"
    },
    {
      "commit": "30456f2d8b8dbc68dcdbfb710ba3fca847a07ff4",
      "tree": "2bd8a9c7322171d9df2ec105e0ce7a5da5c76b17",
      "parents": [
        "597d3f939ed4e1a0a656b33f5f6bb3a66694f515"
      ],
      "author": {
        "name": "Alice Kober-Sotzek",
        "email": "aliceks@google.com",
        "time": "Fri Jul 24 11:41:50 2020 +0200"
      },
      "committer": {
        "name": "Alice Kober-Sotzek",
        "email": "aliceks@google.com",
        "time": "Fri Jul 24 11:41:50 2020 +0200"
      },
      "message": "Adjust to changes in Gerrit core\n\nChange-Id: I397fc71f36039cd9e87f9f672c25539f803ee1b8\n"
    },
    {
      "commit": "597d3f939ed4e1a0a656b33f5f6bb3a66694f515",
      "tree": "1367e4bd39d73f35987cb3822aa7d76e4d071712",
      "parents": [
        "eb04758808403565de330755056751c15e213fe2",
        "96f83448e41e0facc352ecf2f6b3c3840034e47a"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Mon Jul 13 09:43:54 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 13 09:43:54 2020 +0000"
      },
      "message": "Merge \"Disable find-owners if code-owners is enabled\""
    },
    {
      "commit": "eb04758808403565de330755056751c15e213fe2",
      "tree": "1e64dc094e8b8ee902791cf3fef27ef5edcd2c8d",
      "parents": [
        "4627cf45a7975044c1ac93823fcc8388d7d93e53"
      ],
      "author": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Tue Jul 07 15:08:51 2020 +0200"
      },
      "committer": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Tue Jul 07 15:09:15 2020 +0200"
      },
      "message": "Adjust to changes in Gerrit core\n\nChange-Id: I444a0abe4d23b9c6e910cb6ff5f9895c34f7a64b\n"
    },
    {
      "commit": "96f83448e41e0facc352ecf2f6b3c3840034e47a",
      "tree": "faacaa4e0c7bc032d9d549889b0fd9402e8ba801",
      "parents": [
        "4627cf45a7975044c1ac93823fcc8388d7d93e53"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Mon Jun 15 12:35:43 2020 +0200"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Mon Jun 15 12:35:43 2020 +0200"
      },
      "message": "Disable find-owners if code-owners is enabled\n\nChange-Id: Ibaa0f3df0f1e97332e090c84e89e51e74dfa82c3\n"
    },
    {
      "commit": "4627cf45a7975044c1ac93823fcc8388d7d93e53",
      "tree": "de2bf7ffc85c5d20e78df865b3a6665d8c49dfbd",
      "parents": [
        "e293396367533f5ca6a060528116d9380459a9b6"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Fri Jun 05 09:52:51 2020 +0200"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Fri Jun 05 09:52:51 2020 +0200"
      },
      "message": "Fix rendering issue after switching to textContent\n\nReplaced all raw html with dynamically generated elements\n\nChange-Id: I863e32d37528cdc79a6b515440c340ed678635b1\n"
    },
    {
      "commit": "e293396367533f5ca6a060528116d9380459a9b6",
      "tree": "efe3e80778a4346df468453446417c0fb8508d6a",
      "parents": [
        "101b8d05a0ce0592b13c5ffcc7486bf45ec69045"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Thu Jun 04 15:08:11 2020 +0000"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Thu Jun 04 15:08:11 2020 +0000"
      },
      "message": "Revert \"Replace `innerHTML` with `textContent`\"\n\nThis reverts commit 101b8d05a0ce0592b13c5ffcc7486bf45ec69045.\n\nReason for revert: find owners actually rely on `innerHTML` for lots of its content\n\nChange-Id: I28b96b934c7ca3c2201b49e9d981cbd8dc1c79a6\n"
    },
    {
      "commit": "101b8d05a0ce0592b13c5ffcc7486bf45ec69045",
      "tree": "05ff63ed21841447c841577437f702b9651cfa93",
      "parents": [
        "c2dc910f016e2e65f59d938baf2352eb6fd8bfda"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Thu May 28 13:38:02 2020 +0200"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Thu May 28 13:38:02 2020 +0200"
      },
      "message": "Replace `innerHTML` with `textContent`\n\nChange-Id: Id14b5e4341ccd2c3068b8ac4eaf983ee784c5bf8\n"
    },
    {
      "commit": "c2dc910f016e2e65f59d938baf2352eb6fd8bfda",
      "tree": "efe3e80778a4346df468453446417c0fb8508d6a",
      "parents": [
        "0fff7ae34f4259b6bad7b5c4451bf962bc6148a1",
        "3b0cfeabc2ba8588076f7069107112bd0abf4e49"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Fri May 22 14:18:57 2020 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Fri May 22 14:18:57 2020 +0200"
      },
      "message": "Merge branch \u0027stable-3.1\u0027\n\n* stable-3.1:\n  Revert \"Clean up BUILD rules\"\n\nChange-Id: Ia4e306d577100be319f366b202b4e7e1e8f9139d\n"
    },
    {
      "commit": "3b0cfeabc2ba8588076f7069107112bd0abf4e49",
      "tree": "fa73fcf7e18bc90b128b4a99ffa782b463898b98",
      "parents": [
        "05a07fe087f45c8c8b89dd4374433a4999e56cd1"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon May 11 19:31:49 2020 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david.ostrovsky@gmail.com",
        "time": "Fri May 22 10:00:33 2020 +0000"
      },
      "message": "Revert \"Clean up BUILD rules\"\n\nReason for revert: this change pulls in the whole nine yards plugin API\nand blows up the plugin size from 100k to 50MB.\n\nThis reverts commit 6e7f0886dbc45d685f0d325b24e3e1c7373d14ba.\n\nChange-Id: Idaf27a3dbee5ec06659b5b2e6406ce9f702b3122\n"
    },
    {
      "commit": "0fff7ae34f4259b6bad7b5c4451bf962bc6148a1",
      "tree": "efe3e80778a4346df468453446417c0fb8508d6a",
      "parents": [
        "5e74446714e7ce804009a035de94694c920a72bd"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon May 11 19:31:49 2020 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Mon May 11 19:39:06 2020 +0200"
      },
      "message": "Revert \"Clean up BUILD rules\"\n\nReason for revert: this change pulls in the whole nine yards plugin API\nand blows up the plugin size from 100k to 50MB.\n\nThis reverts commit 6e7f0886dbc45d685f0d325b24e3e1c7373d14ba.\n\nChange-Id: Idaf27a3dbee5ec06659b5b2e6406ce9f702b3122\n"
    },
    {
      "commit": "5e74446714e7ce804009a035de94694c920a72bd",
      "tree": "81ae2ce80e8a9aacca575a38e134e8cbba776661",
      "parents": [
        "7cd7cd625dcb41d7c4383cc7da48a0c3b8f0e806"
      ],
      "author": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Fri Mar 06 13:12:30 2020 +0100"
      },
      "committer": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Fri Mar 06 13:19:09 2020 +0100"
      },
      "message": "Adapt to ProjectCache#get interface change\n\nChange-Id: I3dffde2a05c1ec27c8cbfdf0a2adb1d0724be147\n"
    },
    {
      "commit": "7cd7cd625dcb41d7c4383cc7da48a0c3b8f0e806",
      "tree": "73df17dd8517bf25efd245e55c8693660ba99dc7",
      "parents": [
        "5926aff1272d10c38c7af06c82b6ea272c91d1a8"
      ],
      "author": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Mon Mar 02 11:17:30 2020 +0100"
      },
      "committer": {
        "name": "Ben Rohlfs",
        "email": "brohlfs@google.com",
        "time": "Mon Mar 02 11:17:30 2020 +0100"
      },
      "message": "Fix tests following a change to AccountCreator\n\nChange-Id: Ie4eaac4646a93663574fae7860692fbca9d3031b\n"
    },
    {
      "commit": "5926aff1272d10c38c7af06c82b6ea272c91d1a8",
      "tree": "8e72181558b43cff786f2e6bdb922f95079284ac",
      "parents": [
        "73bb362fd84b2089e2625761253852cc7716a14b"
      ],
      "author": {
        "name": "Ian Wells",
        "email": "iwells@google.com",
        "time": "Thu Jan 02 11:18:11 2020 -0800"
      },
      "committer": {
        "name": "Ian Wells",
        "email": "iwells@google.com",
        "time": "Fri Jan 17 21:36:27 2020 +0000"
      },
      "message": "Cosmetic improvements\n\n* Add space between files to improve readability\n* Move \"Cancel\" and \"Apply\" buttons to the top of the popup where they\nare easier to notice\n\nScreenshot: https://imgur.com/a/rllkqGc\n\nChange-Id: I273a0bb294e10af173f5587478a1ce392c8d5bec\n"
    },
    {
      "commit": "73bb362fd84b2089e2625761253852cc7716a14b",
      "tree": "86d7d2a4471287804037dc5fb0b8460170f98666",
      "parents": [
        "05a07fe087f45c8c8b89dd4374433a4999e56cd1"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Dec 11 14:26:13 2019 +0100"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Dec 11 14:30:47 2019 +0100"
      },
      "message": "Adapt to changes in Gerrit core\n\nChange I9b577a827 changed the constructor of the Emails class.\n\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nChange-Id: Ib4b0daa71992aaedcdbb925fb80ba16188dd8b4f\n"
    },
    {
      "commit": "05a07fe087f45c8c8b89dd4374433a4999e56cd1",
      "tree": "29b0ceb10a0f16a5321c719c10315f6e10e5c361",
      "parents": [
        "27f9155c6e124ca191dc8a346c067f15bce28499"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Dec 11 12:56:53 2019 +0100"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Wed Dec 11 14:30:41 2019 +0100"
      },
      "message": "Fix documentation on how to run the tests\n\nChange Ica347c5d0 split the tests but forgot to adapt the documentation.\n\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nChange-Id: If125bf6398f8f2c4c254f71f926b80c929b56710\n"
    },
    {
      "commit": "27f9155c6e124ca191dc8a346c067f15bce28499",
      "tree": "71bd2cb7b43bf690e08695e9c357ab222a7b3dfe",
      "parents": [
        "c1e2af71bf0aecf7484e02bff1fb7a91f62cd478"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Oct 16 12:56:52 2019 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Wed Oct 16 12:56:52 2019 +0900"
      },
      "message": "Replace bazel-genfiles with bazel-bin in documentation\n\nBug: Issue 11757\nChange-Id: I2c6024e0db77a194ca9abd5049ade627cfa89035\n"
    },
    {
      "commit": "c1e2af71bf0aecf7484e02bff1fb7a91f62cd478",
      "tree": "29a60dbdcf07fc68af75453d6924afbc9372c62b",
      "parents": [
        "46674a9d47505e3bc0a9e584e178d9473c0e206c"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Thu May 30 02:17:48 2019 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Tue Oct 15 23:45:09 2019 +0200"
      },
      "message": "Rename reviewdb package to entities\n\nChange-Id: I0c20862f4b4fb2899c3387441a6d784bd2fe4621\n"
    },
    {
      "commit": "46674a9d47505e3bc0a9e584e178d9473c0e206c",
      "tree": "84a19f7e891510d7684cd2428b809861158cfad8",
      "parents": [
        "8de7e604e9c45c93c2fd653409bded9087657547",
        "9d8f478362f524d705586acb56ae2cbd9ba927d3"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david.ostrovsky@gmail.com",
        "time": "Tue Oct 15 20:33:00 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 15 20:33:00 2019 +0000"
      },
      "message": "Merge \"Format Java files with google-java-format\""
    },
    {
      "commit": "8de7e604e9c45c93c2fd653409bded9087657547",
      "tree": "f09e828c6bce458e0f58152c26878fb2a31a4de0",
      "parents": [
        "8c32b2764572dac3ee61383650b10806664973a4"
      ],
      "author": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Tue Oct 08 09:59:23 2019 +0200"
      },
      "committer": {
        "name": "Tao Zhou",
        "email": "taoalpha@google.com",
        "time": "Tue Oct 08 09:59:23 2019 +0200"
      },
      "message": "Fix for polymer 2 and remove unused methods\n\nChange-Id: Ic9706fa96ac52ad0b76d03db76f60ae4ace2414d\n"
    },
    {
      "commit": "9d8f478362f524d705586acb56ae2cbd9ba927d3",
      "tree": "736afe9b1270cc2569f735fca3980b77422e292c",
      "parents": [
        "8c32b2764572dac3ee61383650b10806664973a4"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Thu Oct 03 20:52:20 2019 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Thu Oct 03 20:52:20 2019 +0200"
      },
      "message": "Format Java files with google-java-format\n\nChange-Id: I4125519a20cab99fbca6c9aa255d2b19fd7ecd3a\n"
    },
    {
      "commit": "8c32b2764572dac3ee61383650b10806664973a4",
      "tree": "e9426de72390be7b7a667c0e73351384659b91e8",
      "parents": [
        "d280d24fb997cb4550793ca5588ce9ae00bfd1ae"
      ],
      "author": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Thu Sep 26 09:39:37 2019 +0200"
      },
      "committer": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Thu Sep 26 09:42:20 2019 +0200"
      },
      "message": "Adapt to AccountState being an AutoValue\n\nChange-Id: Ief1999fd9e271cbd4d5c174ccf2906fcc4b48d98\n"
    },
    {
      "commit": "d280d24fb997cb4550793ca5588ce9ae00bfd1ae",
      "tree": "05f873bb74f235ebcd20da27b4ef54e9f5234a69",
      "parents": [
        "a1cc3915268d04a734e3583df93e1453a6df81f8"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Fri Jul 12 17:30:39 2019 -0400"
      },
      "committer": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue Sep 10 04:12:36 2019 -0400"
      },
      "message": "improve gitiles browsing\n\nChange-Id: If7800ed8456d6e6a372619a742bb6d28d0eb82e7\n"
    },
    {
      "commit": "a1cc3915268d04a734e3583df93e1453a6df81f8",
      "tree": "3cd8f2afe0c6e0d09233a7ad9e1267232c434e89",
      "parents": [
        "6b18a3deb1a76671adf3d2ff470e71cc9cc8291a",
        "4e9816eb67b954e9a1999993a87f6f0f62cd70ed"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Sep 04 21:52:05 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 04 21:52:05 2019 +0000"
      },
      "message": "Merge \"Suppress warnings with suggested coding patterns.\""
    },
    {
      "commit": "6b18a3deb1a76671adf3d2ff470e71cc9cc8291a",
      "tree": "dbea92846c1a5b9d67e894c159dce8619ec92271",
      "parents": [
        "e77c77c883b1bb8d01f1614ef4db66bfb03855a2",
        "42747be1d82a89db19bc85fb0c77a5dda7e27399"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Sep 04 21:51:52 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Sep 04 21:51:52 2019 +0000"
      },
      "message": "Merge \"Fix Java coding style warnings.\""
    },
    {
      "commit": "e77c77c883b1bb8d01f1614ef4db66bfb03855a2",
      "tree": "978f1efbe8e4f81f7cb39972cae7e864f7a7ef27",
      "parents": [
        "a4fe26f494ca77e93b58478e322f6dbbc99f6f22"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Sep 04 00:52:20 2019 -0400"
      },
      "committer": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Sep 04 17:18:09 2019 +0000"
      },
      "message": "Declare static methods and final members.\n\n* To suppress some Java coding style warnings.\n\nChange-Id: I3c663f3baf108bf693afa3cfd0570e4eeb1ec9c4\n"
    },
    {
      "commit": "4e9816eb67b954e9a1999993a87f6f0f62cd70ed",
      "tree": "a2e31655798a2d09659ec6624568a0dce2fa15a7",
      "parents": [
        "a4fe26f494ca77e93b58478e322f6dbbc99f6f22"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Sep 04 00:55:55 2019 -0400"
      },
      "committer": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Sep 04 17:17:57 2019 +0000"
      },
      "message": "Suppress warnings with suggested coding patterns.\n\n* Use computeIfAbsent instead of check and put into a map.\n* Use Ascii.equalsIgnoreCase instead of s.equalsInoreCase.\n* Declare private Util() to disallow instance.\n\nChange-Id: I4d09ccf567b461207d7a27506e028e17a4319bfd\n"
    },
    {
      "commit": "42747be1d82a89db19bc85fb0c77a5dda7e27399",
      "tree": "1b86f631dbf6669a10947a83cd57c3a6f636562c",
      "parents": [
        "a4fe26f494ca77e93b58478e322f6dbbc99f6f22"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Sep 04 01:11:17 2019 -0400"
      },
      "committer": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Sep 04 17:17:48 2019 +0000"
      },
      "message": "Fix Java coding style warnings.\n\n* Use boolean instead of Boolean.\n* Call add() and check result instead of contains() and add().\n* Call Paths.get(dir, file) instead of Paths.get(file_path).\n\nChange-Id: I26a40b24614d8fab4f8e0776dcde4cb1c7d1af4d\n"
    },
    {
      "commit": "a4fe26f494ca77e93b58478e322f6dbbc99f6f22",
      "tree": "156610153d0bcccee9dae65948760c9f2ce87820",
      "parents": [
        "f9383eb49d20443f28baeb0f7dcf97494967713f"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Sep 04 00:47:42 2019 -0400"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Sep 04 00:47:42 2019 -0400"
      },
      "message": "Do not declare unchecked StorageException.\n\n* To suppress some Java coding style warnings.\n\nChange-Id: I7cdcec512f760c9af1b82370ee88b4684f7982c3\n"
    },
    {
      "commit": "f9383eb49d20443f28baeb0f7dcf97494967713f",
      "tree": "8e63cb9166ab3bbbf8054932040ff76ede03d63b",
      "parents": [
        "f59ef6565e9c914d405e78738ea3799598b8b556"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Aug 21 18:30:43 2019 -0400"
      },
      "committer": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Aug 30 18:30:09 2019 +0000"
      },
      "message": "Use BaseConfig instead of raw PluginConfig.\n\n* Pass to the Config class more Gerrit environment variables,\n  including AccountCache, PatchListCache, Emails,\n  to have more environment-dependent interpretation\n  of config key values in the future.\n* Use BaseConfig in Config instead of raw PluginConfig\n  to allow future extension with more dynamic key values.\n* Simplify Checker methods; remove redundant exception specifications.\n\nChange-Id: I50b274aa7220f566288194a8fd219336536f0ac8\n"
    },
    {
      "commit": "f59ef6565e9c914d405e78738ea3799598b8b556",
      "tree": "20bb6f04a7c65332c1ad1b3c6cecc4d9f2cb9776",
      "parents": [
        "33f7d4ea1315b10aa1f91d0c67cc839257e7bc42"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Aug 21 20:28:56 2019 -0400"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Aug 21 20:28:56 2019 -0400"
      },
      "message": "Enhance filteredJson to clean up JSON strings.\n\n* Simplify test code in IncludeIT and future ConfigIT.\n\nChange-Id: Idf0dfde91c468e795e4be0b7d44fa95516ee6708\n"
    },
    {
      "commit": "33f7d4ea1315b10aa1f91d0c67cc839257e7bc42",
      "tree": "372dc397982789ca3a69172db866a05b9463bda0",
      "parents": [
        "aa96c0d1328a3d4cdc57d37b4cb77a325e539e28"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Aug 14 18:02:30 2019 -0400"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Aug 21 13:01:37 2019 -0400"
      },
      "message": "Update config document.\n\n* Add TOC for this long document.\n* Clarify global vs project variables.\n* Simplify Prolog examples.\n* Remove obsolete variable: alwaysShowButton\n\nChange-Id: Ic0ff7e2df341efd94b00fa1e0793cf1584172e53\n"
    },
    {
      "commit": "aa96c0d1328a3d4cdc57d37b4cb77a325e539e28",
      "tree": "514715c7c9df0b9124327f6fa7a2960cdebe6006",
      "parents": [
        "fa167df9a1cd3cb669d80da55bb7ccec910d210d"
      ],
      "author": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Tue Aug 13 12:41:48 2019 +0200"
      },
      "committer": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Tue Aug 13 10:58:55 2019 +0000"
      },
      "message": "Write cache stats to info log (fine) when value is requested\n\nThe cache used in FindOwners is problematic from a system and code\nhealth perspective. It caches state keyed by GitRepositoryManager (a\nservice object) and keeps a lot of mutable state that can lead to races\nor hard to debug issues.\n\nThe cache is very short-lived (30s for most instances), so we want to\nknow if we can just remove it. Unfortunately, the whole plugin doesn\u0027t\nuse the Injector correctly, so we can\u0027t just inject a MetricMaker. We\ncould make the PrologEnvironment expose a MetricMaker, but this seems\nlike a one-off use case that is better treated with a simpler solution.\n\nTherefore, this commit just logs cache stats at fine whenever a value is\naccessed.\n\nChange-Id: Ib1620dbb1b22b2c8ad5991b6ab0b54e40063a3ee\n"
    },
    {
      "commit": "fa167df9a1cd3cb669d80da55bb7ccec910d210d",
      "tree": "241a75963fa4492c22061893062c4508ad29d922",
      "parents": [
        "a0eb5f5cf82222c37266f30c8bdab38516db43b0"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Aug 06 15:03:36 2019 -0400"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Aug 09 12:52:32 2019 -0400"
      },
      "message": "Clarify and cleanup Config variables and functions.\n\n* Clarify gerrit.config and project.config parameters.\n  * \"alwaysShowButton\" is obsolete, assumed true now.\n  * Include all parameters to REST API returned JSON object;\n    fix expected test output in ApiIT.java.\n  * Explain all parameters in rest-api.md.\n* Minimize repeated calls to create PluginConfig:\n  * Change Action, Cache, Checker, OwnersDb, FindOwners to reuse\n    Config instead of creating it from PluginConfigFactory.\n  * Save one gerritConfig in Config and Cache projectConfig in Config.\n  * Add/simplify unit test interface functions.\n* Coding style improvements:\n  * Use Duration.ofSeconds instead of TimeUnit.SECONDS.\n\nChange-Id: If27b7ae0e0f59f434ec2d536e1b08af0857708e0\n"
    },
    {
      "commit": "a0eb5f5cf82222c37266f30c8bdab38516db43b0",
      "tree": "f83701f12bd640158618797c801bc36c6d185838",
      "parents": [
        "8c2d391f8d4fdae943199f14e0c30134bc4f302a",
        "6e7f0886dbc45d685f0d325b24e3e1c7373d14ba"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Aug 08 20:01:22 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Aug 08 20:01:22 2019 +0000"
      },
      "message": "Merge \"Clean up BUILD rules\""
    },
    {
      "commit": "8c2d391f8d4fdae943199f14e0c30134bc4f302a",
      "tree": "36a2e5971d894b2ee7c1f4a38176e91a120497ea",
      "parents": [
        "dcb7357220c2a58693a3d1bb278f2bdf3db53ea3"
      ],
      "author": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Wed Jul 24 13:40:06 2019 +0200"
      },
      "committer": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Wed Jul 24 18:46:03 2019 +0200"
      },
      "message": "Adapt to Account being an AutoValue\n\nChange-Id: I1adde8dcd026fdcfee154be1efd6f82bfab8fa83\n"
    },
    {
      "commit": "6e7f0886dbc45d685f0d325b24e3e1c7373d14ba",
      "tree": "a3468b77f3d4f8be10a2c4e5b9c53897d0d3f4af",
      "parents": [
        "dcb7357220c2a58693a3d1bb278f2bdf3db53ea3"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Jul 18 14:10:45 2019 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Jul 18 14:10:45 2019 -0700"
      },
      "message": "Clean up BUILD rules\n\n* Use \"_\" instead of \"-\" in target names to match the more common\n  naming style, except the plugin name find-owners.\n* Use shard_count\u003d4 to speed up findowners_IT_tests.\n* Use FIND_OWNERS_*_{SRCS,DEPS} to factor out lists\n  of source and dependent files.\n* Inline the use of PLUGIN_DEPS and MODULE.\n* No need of tags.\n\nChange-Id: I50d348191b5910c6f3343bdd0229b1e381e8741e\n"
    },
    {
      "commit": "dcb7357220c2a58693a3d1bb278f2bdf3db53ea3",
      "tree": "4aa2fab44f717de671b7fbcf8741282b11032eaa",
      "parents": [
        "c5ce973be71d7f75c3baba6ce7f7b404ccdedbec"
      ],
      "author": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue Jun 11 16:18:38 2019 -0400"
      },
      "committer": {
        "name": "Mike Frysinger",
        "email": "vapier@google.com",
        "time": "Tue Jun 11 16:20:57 2019 -0400"
      },
      "message": "change \"column\" to \"colon\"\n\nSeems like it was just a thinko here as there is no such thing as\na \"column character\", and all the syntax is parsing colons.\n\nChange-Id: Ib5fd1c96f66a95fbec323f44033b9cf777eb11aa\n"
    },
    {
      "commit": "c5ce973be71d7f75c3baba6ce7f7b404ccdedbec",
      "tree": "861a700c4fb70523af713eaabe79d93cf9b41c5c",
      "parents": [
        "d7dfd91c45faeba3d3ea9642fd5e7a67d87a405c"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Jun 06 16:27:49 2019 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Jun 06 18:03:34 2019 -0700"
      },
      "message": "Allow checkers to read all OWNERS files\n\n* Fix problem of some submit checkers that might submit a change\n  without full owner info/approval.\n* GetOwners API and UI Action still obey the read permission.\n* Log more messages when a project or file cannot be read.\n* Check and log errors when owner preferred email is null.\n\nChange-Id: Id3d39fd11f8f24db8ff703d803dffbf6bcbfa2d7\n"
    },
    {
      "commit": "d7dfd91c45faeba3d3ea9642fd5e7a67d87a405c",
      "tree": "42f3d246a160904b5d37e25caf32e326ef05b716",
      "parents": [
        "ea12b9b7f6d31a3d55ff879579a72ab15ccee572"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue May 28 12:35:07 2019 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed May 29 15:11:33 2019 -0700"
      },
      "message": "Check read permission in getRepoFile\n\n* Inject PermissionBackend to all API entry points and\n  pass it to hasReadAccess.\n* Add new ACL read tests in IncludeIT and OwnersValidatorIT;\n  share code in FindOwners.\n* Improve readability in IncludeIT and ParserTest.\n\nChange-Id: Ia10601eb00980b62f08c240b91da81ee0c38d0df\n"
    },
    {
      "commit": "ea12b9b7f6d31a3d55ff879579a72ab15ccee572",
      "tree": "b46054c77441bebca1f8b1383488dcb1bcacf279",
      "parents": [
        "38ef3093dc60187417845ff409a6c43f38d49d14"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed May 15 11:40:13 2019 +0200"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed May 15 11:52:17 2019 +0200"
      },
      "message": "Push down AbstractDaemonTest#projectOperations\n\nChange-Id: I88e8f2074de1493c6c3688c45f20c8b0b05042e3\n"
    },
    {
      "commit": "38ef3093dc60187417845ff409a6c43f38d49d14",
      "tree": "998f11b46835653808d10ae09d8b6c3fa70f8596",
      "parents": [
        "3fedd04e71f8f0c622ffe55ea42984862ec2c856"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed May 15 10:55:40 2019 +0200"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed May 15 11:51:02 2019 +0200"
      },
      "message": "Inline AbstractDaemonTest#getRemoteHead\n\nChange-Id: I1ba0c16085d7bb1999c00f8d6ee5a27e8e2e661e\n"
    },
    {
      "commit": "3fedd04e71f8f0c622ffe55ea42984862ec2c856",
      "tree": "5b551012b68f1a757b1fd219bcda74c6cb11abea",
      "parents": [
        "f967ae2d0326cc7a0724b8041c229f1c9ba60dae"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed May 01 09:16:16 2019 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Tue May 07 13:05:35 2019 -0700"
      },
      "message": "Adapt to PatchSetApproval refactoring\n\nChange-Id: I6b50646e11e01d1c7aaffa9669ddde66627cfb7f\n"
    },
    {
      "commit": "f967ae2d0326cc7a0724b8041c229f1c9ba60dae",
      "tree": "b233508348ae5e67b613f4a6d4de2912ef8abb99",
      "parents": [
        "9b158abcb3cc2ca0f0e44daa08738aa28dc77b75"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Thu Apr 25 10:34:35 2019 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Tue May 07 13:04:37 2019 -0700"
      },
      "message": "Adapt to new PatchSet method names\n\nChange-Id: I5c3a9015f928e5d0eec3463dded9b8f4569ce5cf\n"
    },
    {
      "commit": "9b158abcb3cc2ca0f0e44daa08738aa28dc77b75",
      "tree": "fd6bed5f1c90a02e2b3b52bf08a140bac9173147",
      "parents": [
        "b027e1b394239fcfdaaaf964829274ee8709ad3d"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Thu May 02 13:50:20 2019 +0200"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Thu May 02 13:50:20 2019 +0200"
      },
      "message": "Migrate from assertThat(foo).named(\"foo\") to assertWithMessage(\"foo\").that(foo).\n\nChange-Id: Ie7ec4cee6ffffabe9fb42b888098ff563ab239da\n"
    },
    {
      "commit": "b027e1b394239fcfdaaaf964829274ee8709ad3d",
      "tree": "5cba99699442bf634bcc03b1f9b4a5b4b79fd7f2",
      "parents": [
        "cedfe4e6ee8a98196c8f4d3da8af5c23b4ed6907"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Tue Apr 23 13:55:15 2019 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Tue Apr 23 13:55:15 2019 -0700"
      },
      "message": "Adapt to BranchNameKey refactoring\n\nChange-Id: I5a2df924d230b419643ac6916603c52269b047b6\n"
    },
    {
      "commit": "cedfe4e6ee8a98196c8f4d3da8af5c23b4ed6907",
      "tree": "d073796eba3d93ca5691988ef083ad12fa064cc0",
      "parents": [
        "f1a7ae8059dea25ce4e0f55aebb579f793ec8352"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Fri Apr 19 09:14:17 2019 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Mon Apr 22 15:34:14 2019 -0700"
      },
      "message": "Adapt to Project.NameKey refactoring\n\nChange-Id: Id3ab7e0041c56588f8954c1e66cfda9a58fe242f\n"
    },
    {
      "commit": "f1a7ae8059dea25ce4e0f55aebb579f793ec8352",
      "tree": "9a7d3d044d0d9f23ed6fce9fe0464783e542a769",
      "parents": [
        "b1e2ba380bf613cda7f810fe92694d7b3da915e4"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Apr 17 15:54:00 2019 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Mon Apr 22 15:32:56 2019 -0700"
      },
      "message": "Adapt to Branch.NameKey refactoring\n\nChange-Id: Icd3a8163def35143e5d926d026673703e4b0f9b0\n"
    },
    {
      "commit": "b1e2ba380bf613cda7f810fe92694d7b3da915e4",
      "tree": "e09a43cbe42b58ed31fd8d25a23b267990895eb1",
      "parents": [
        "34d10ba0ee260d4645819d13c5c6390040405330"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Apr 17 13:58:18 2019 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Mon Apr 22 15:32:03 2019 -0700"
      },
      "message": "Adapt to Account.Id refactoring\n\nChange-Id: Ia15392516add4c173b9822812d181dc09cb15616\n"
    },
    {
      "commit": "34d10ba0ee260d4645819d13c5c6390040405330",
      "tree": "fec6514e3d345594eb923c6b8af526f1de727d01",
      "parents": [
        "cea43cf4b65370af1df1f682f8fe95fa108ddb99"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 22 13:20:50 2019 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 22 13:20:50 2019 +0900"
      },
      "message": "Remove declarations of unthrown IOException\n\nChange-Id: I820c55ef258a1129dadb4d3f800eb7bd59804330\n"
    },
    {
      "commit": "cea43cf4b65370af1df1f682f8fe95fa108ddb99",
      "tree": "baf61ccb189617dfc4c3fae0c37671af1fc57d3c",
      "parents": [
        "f32e6d4abe54b7f26b568bc8b30f782ddff55ec2"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Apr 17 09:00:06 2019 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Apr 17 16:59:41 2019 -0700"
      },
      "message": "Adapt to ChangeData signature changes\n\nChange-Id: Ic2cc265c935f32d2a8d0b46509ea46c482fc6642\n"
    },
    {
      "commit": "f32e6d4abe54b7f26b568bc8b30f782ddff55ec2",
      "tree": "157fd230780ab73cfeddf842fe236813e846a48e",
      "parents": [
        "ce6932a72d88b444f302fb13616171f51b2d55b1"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Apr 17 08:41:17 2019 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Apr 17 16:58:42 2019 -0700"
      },
      "message": "Adapt to new StorageException class name and package\n\nChange-Id: I75cd47a6189c5cff2ca7e8ee92ef678abb8fe44d\n"
    },
    {
      "commit": "ce6932a72d88b444f302fb13616171f51b2d55b1",
      "tree": "220d6e734c4c74d66ab4a78cc7a5306e81ab38a0",
      "parents": [
        "848d949e8bbb5c817cc7b7a0ca724155ba13ac0b"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:33:46 2019 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:33:48 2019 +0900"
      },
      "message": "Remove redundant semicolons\n\nChange-Id: I1320541d6ee1d8b1939623a7cdc7119fd3789e7e\n"
    },
    {
      "commit": "848d949e8bbb5c817cc7b7a0ca724155ba13ac0b",
      "tree": "1110563937321268c18f303a530cbc2e2e4fd977",
      "parents": [
        "51754ed9a70863aa7e08cfaca2f0a934203b932a"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 10:23:37 2019 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:33:48 2019 +0900"
      },
      "message": "Format with google-java-format 1.7\n\nChange-Id: I2c0caa26bd4a6b28ae1a60037863fff2742984d1\n"
    },
    {
      "commit": "51754ed9a70863aa7e08cfaca2f0a934203b932a",
      "tree": "661e838d3f2a38edde7324fad46d657e279fd9f5",
      "parents": [
        "06ab05a8540787a9218c85b314f9a4599d146e6b"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Fri Apr 12 07:44:10 2019 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Fri Apr 12 07:44:10 2019 -0700"
      },
      "message": "Adapt to new TestAccount methods\n\nChange-Id: Ife1cc98574a97e51e925e8b12721e4bdd75c1125\n"
    },
    {
      "commit": "06ab05a8540787a9218c85b314f9a4599d146e6b",
      "tree": "fa9c11ff462de9b20eda40d4ef8faba063920f85",
      "parents": [
        "659ba4143d34e49619ebe379e3e2fcacb65cbd1e"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Mar 15 11:39:10 2019 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Apr 04 15:58:57 2019 -0700"
      },
      "message": "Check included files in OwnersValidator\n\n* OwnersValidator now checks included files of any name\n  that could be in a given CL or the repository.\n  * Previously only changed files of the name \"OWNERS\" or specified\n    ownersFileName are checked.\n  * Included files are looked up in a commit\u0027s changed file list first,\n    then in the repository.\n  * Included files in a different CL to be submitted together are\n    not checked yet.\n  * Use inner class OwnersValidator.Checker to keep all data\n    during validation check of one commit event.\n  * Use qualified names like p1:d1/f1.txt in error messages when\n    source file f1.txt is not in the same repository.\n* OwnersValidatorTest is renamed to OwnersValidatorIT\n  and inherits from LightweightPluginDaemonTest\n  to create files in multiple repositories.\n\nChange-Id: If693e31048045f36633fd9f61d7afc9ee489b052\n"
    },
    {
      "commit": "659ba4143d34e49619ebe379e3e2fcacb65cbd1e",
      "tree": "f937cf8831df8146d7bf53301d54b5802208f0c8",
      "parents": [
        "698089960d452a5d82de873a8fbc9d8bd9d63971"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Mar 06 11:56:05 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Mar 18 12:28:57 2019 -0700"
      },
      "message": "Simplify tests and split FindOwnersIT tests\n\n* Split fast JUnit tests from slow IT tests.\n* Factor out TestWatcher code into its own Watcher class.\n* Change newProject default to return simple project names\n  under All-Projects.\n* Split FindOwnersIT tests into 5 smaller *IT.java files.\n\nChange-Id: Ica347c5d06e36b52b5c301e891d0837844d666aa\n"
    },
    {
      "commit": "698089960d452a5d82de873a8fbc9d8bd9d63971",
      "tree": "c9869de124fe43d28c3e35dda9589097b0bc2754",
      "parents": [
        "08c4ca69b72d60ff7552e22fc8c23eedad474184"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Mar 15 11:37:49 2019 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Mar 15 11:37:49 2019 -0700"
      },
      "message": "Implement \"file:...\" statement and directive\n\n* See semantics and examples in updated syntax.md.\n* Add new feature:\n  * Accept new file: statement/directive in OwnersValidator.java\n    but still not checking the content of included files.\n  * Parser.FILE_DIRECTIVE defined as one pattern used in per-file.\n  * Add Parser.IncludeStack to keep track of included project:file.\n  * Factor out Parser.includeFile to handle all \"include\" and \"file:\"\n    statements or directives.\n* Reduce repeated inclusion and parsing:\n  * Keep readFiles in OwnersDb to read one repository file only once.\n  * Add Parser.savedResults to avoid parsing a file multiple times.\n* Improve log and error messages:\n  * Shorten log message: () for empty content, (...) for non-empty.\n  * Keep Parser warnings and errors as sets to avoid duplication.\n    Sort all unique warnings and errors before dump to logger.\n  * Rename parseLine:skip messages to\n    parseLine:errorRecursion and parseLine:useSaved\n* Add documents and tests:\n  * Add more JavaDoc comments to Parser.java.\n  * Update syntax.md to include \"file:\" statement and directive.\n  * Add test cases in FindOwnersIT, ParserTest, OwnersValidatorTest.\n  * Reduce dependency on myProjectName\n\nChange-Id: I235bbdd70ecaded4b20767eac0abbe27e6061b01\n"
    },
    {
      "commit": "08c4ca69b72d60ff7552e22fc8c23eedad474184",
      "tree": "bed65c541905a49255d24d39d7b9f9cdf4d18b44",
      "parents": [
        "33c3d0511a81a5fd6deccff040f235f7a7454a45",
        "9e82b93e43e72c2bc6b86543682494a9cb3879c0"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Mar 12 02:52:45 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Mar 12 02:52:45 2019 +0000"
      },
      "message": "Merge \"Add TestWatcher to log starting/finished messages\""
    },
    {
      "commit": "33c3d0511a81a5fd6deccff040f235f7a7454a45",
      "tree": "20ccd15c77ccf470ab650b57eabba11913d2d1c8",
      "parents": [
        "9e0dfb6af509ec7adeec815037886a8c2f66b824"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Mar 06 14:41:13 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Mar 11 17:38:55 2019 -0700"
      },
      "message": "Close popup window when leaving a page\n\nChange-Id: I70cc9033edd971fc4fefd1416448c22814f91478\n"
    },
    {
      "commit": "9e82b93e43e72c2bc6b86543682494a9cb3879c0",
      "tree": "4a4d63d6253ae19b4f073957c8057f8526d6cc6b",
      "parents": [
        "9e0dfb6af509ec7adeec815037886a8c2f66b824"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Mar 11 10:05:29 2019 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Mar 11 11:45:12 2019 -0700"
      },
      "message": "Add TestWatcher to log starting/finished messages\n\n* Make the test log files easier to read.\n\nChange-Id: I5700c2286c3da5456e569ae1664d8a5e775fbf0c\n"
    },
    {
      "commit": "9e0dfb6af509ec7adeec815037886a8c2f66b824",
      "tree": "e3eb366a02fcba6e80fb87bb5e3c3c3c41f15de5",
      "parents": [
        "1870b4d1f47810b5240a1d8a9a0866e05511890d",
        "ebea6ea05605d9b4d55dfc07bc31ffdfc98536f8"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Mar 06 17:45:17 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 06 17:45:17 2019 +0000"
      },
      "message": "Merge \"Fix a few minor bugs.\""
    },
    {
      "commit": "1870b4d1f47810b5240a1d8a9a0866e05511890d",
      "tree": "ad0c2855ba4bf230e9497c847ba8f1576dcf3112",
      "parents": [
        "efdee3cf405f190bb4664edc75e409ace8367b9a",
        "691abf56880937a6062e9182bdb0dabe85812dea"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Mar 06 17:40:56 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Mar 06 17:40:56 2019 +0000"
      },
      "message": "Merge \"Add a link to syntax.md after error messages\""
    },
    {
      "commit": "ebea6ea05605d9b4d55dfc07bc31ffdfc98536f8",
      "tree": "ad9245e615ad1a128e772a06b7eaf0aa8a647cde",
      "parents": [
        "8ec3632e62bc519dd5842e2c86925d27538b751b"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Mar 05 16:09:06 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Mar 05 16:09:06 2019 -0800"
      },
      "message": "Fix a few minor bugs.\n\n* Change to split source lines with \"\\\\R\".\n  When split with \"\\\\R+\" empty lines were skipped.\n* Reduce logger output size, no need to dump full exception call stacks.\n* Check null repoManager pointer before use; avoid exception in unit tests.\n\nChange-Id: Id4fa4d445eee4f16619f46052dd3139b2461d6bb\n"
    },
    {
      "commit": "efdee3cf405f190bb4664edc75e409ace8367b9a",
      "tree": "41ecd7ff440f9477b55fb4e040ab763b6e058343",
      "parents": [
        "8ec3632e62bc519dd5842e2c86925d27538b751b"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Mon Feb 25 11:55:13 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Feb 28 10:48:11 2019 -0800"
      },
      "message": "Add per-file set noparent and more tests\n\n* Implement new \"per-file \u003cglobs\u003e \u003d set noparent\" statement.\n  * Update syntax.md with better explanations and examples.\n  * Remove duplicated syntax comment in Parser.java.\n  * Semantics of \"per-file \u003cglobs\u003e \u003d \u003cowner-email-list\u003e\" is changed.\n    Files matching the \u003cglobs\u003e now inherit global non-per-file owners\n    unless \"per-file \u003cglobs\u003e \u003d set noparent\" is used.\n  * For example, to assign only jj@g.com as the owner of *.java files:\n      per-file *.java \u003d jj@g.com\n      per-file *.java \u003d set noparent\n* Fix error in Parser.Result.append; add test case.\n* Add more tests in ParserTest, FindOwnersIT, OwnersValidatorTest.\n\nChange-Id: I43a306bc9af85badc40b44507d4b2d021888ecd4\n"
    },
    {
      "commit": "8ec3632e62bc519dd5842e2c86925d27538b751b",
      "tree": "2759243f94d9a981f80f36dcff3941db1491111b",
      "parents": [
        "e8351d775513b69eb55ccfb42e9b2328ee479b9a"
      ],
      "author": {
        "name": "brohlfs",
        "email": "brohlfs@google.com",
        "time": "Thu Feb 28 11:51:50 2019 +0100"
      },
      "committer": {
        "name": "brohlfs",
        "email": "brohlfs@google.com",
        "time": "Thu Feb 28 11:52:51 2019 +0100"
      },
      "message": "Fix \u0027event is not defined\u0027 exception in onClick handler\n\nChange-Id: If1bb8c68a373b4104cb8c3ac638357a5092e8237\n"
    },
    {
      "commit": "691abf56880937a6062e9182bdb0dabe85812dea",
      "tree": "27cef00fa3a5bf808e07f5b3036374f7a2276ba8",
      "parents": [
        "e8351d775513b69eb55ccfb42e9b2328ee479b9a"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Feb 27 10:20:11 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Feb 27 10:20:11 2019 -0800"
      },
      "message": "Add a link to syntax.md after error messages\n\n* Example error messages from the upload validator:\n    remote: ERROR: commit ...: syntax: OWNERS:3: ...\n    remote: ERROR: commit ...: ignored: OWNERS:5: ...\n    remote: ERROR: commit ...: unknown: xyz@g.com at OWNERS:2\n    remote: ERROR: commit ...: See OWNERS file syntax document\n    at https://gerrit.googlesource.com/.../syntax.md\n\nChange-Id: I8f58e0237a5de542a82176187ea72e5ffd0cbee8\n"
    },
    {
      "commit": "e8351d775513b69eb55ccfb42e9b2328ee479b9a",
      "tree": "c312f37d8dc33590612f7f5f572d8125dd9fe9a5",
      "parents": [
        "faba88e529a521e75de91a2fd39d475202789a14"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Feb 26 15:04:20 2019 -0800"
      },
      "committer": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Feb 27 17:47:36 2019 +0000"
      },
      "message": "Stop using deprecated Gerrit REST API.\n\n* Suppress console warning messages about\n  deprecated REST API and onAction.\n  * The Gerrit REST api were deprecated for more than a year in\n    https://gerrit-review.googlesource.com/c/gerrit/+/137131\n  * Replace Gerrit.get() with self.restApi().get(),\n    and the same for post() and delete().\n  * No longer support old obsolete GWT UI.\n* Explicitly use upper case for the [FIND OWNERS] action label.\n* Catch and pop up alert message when a reviewer cannot\n  be deleted. This happens when the action is invoked\n  by someone not the owner of a CL.\n\n\nChange-Id: I064970f51cee7e2c0ec714e1249659a0a82c6c60\n"
    },
    {
      "commit": "faba88e529a521e75de91a2fd39d475202789a14",
      "tree": "194cd86e7fa2a43683a6d6383a8c05c8bfc5c25d",
      "parents": [
        "f33ea6519b9a048287be01091852d9ea7f1a32e9",
        "929b532deda6f85acc0eca16c190111ddd93fbfe"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Sat Feb 23 00:16:09 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Feb 23 00:16:09 2019 +0000"
      },
      "message": "Merge \"Add more unit tests for Util.java\""
    },
    {
      "commit": "929b532deda6f85acc0eca16c190111ddd93fbfe",
      "tree": "915d6ae0ec4b5e32b4f615008677505a16a986c1",
      "parents": [
        "2490017be81875074ccc7e755e6fc85209724d3f"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Feb 22 10:27:36 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Feb 22 10:41:11 2019 -0800"
      },
      "message": "Add more unit tests for Util.java\n\n* Add new addAllToMap and factor out addKeyToMap.\n\nChange-Id: I0654ff50b53cfc7539794a750f1d082cf63a9e68\n"
    },
    {
      "commit": "f33ea6519b9a048287be01091852d9ea7f1a32e9",
      "tree": "494ac7a7492cb9d99843718b2ae7da30c731a15a",
      "parents": [
        "2490017be81875074ccc7e755e6fc85209724d3f"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Feb 22 09:47:39 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Feb 22 09:50:40 2019 -0800"
      },
      "message": "Add \"include\" case to OwnersValidatorTest\n\nChange-Id: I97aac1cdb64fa4dd55e962f132f411762995157e\n"
    },
    {
      "commit": "2490017be81875074ccc7e755e6fc85209724d3f",
      "tree": "ef203a31237e9782ad4a790c914353b3c7b26382",
      "parents": [
        "9fc2157602065e7918d9217ed17ad418e0c36b66"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Feb 12 12:29:43 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue Feb 19 15:13:37 2019 -0800"
      },
      "message": "[FIND OWNERS] shows enhanced file-to-owner lists\n\n* OwnersDb now includes \"*\" as owner email\n  in \u0027file2owners\u0027 and \u0027owners\u0027.\n* [FIND OWNERS] shows up to 5 sections of file-to-owner lists:\n  (1) Files with owners but no owner is in the Reviewers list\n  (2) Files with owners but no Code-Review vote from an owner\n  (3) Files with owners but can be approved by anyone (*)\n  (4) Files with +1 or +2 Code-Review vote from owners\n  (5) Files without any named owner\n  Section (1) (2) (4) include files with named owners.\n  Section (3) is new and could be displayed alone,\n  for files with both named and \"*\" owners.\n  Section (5) is new and includes only files without named owner.\n  Section (5) is suppressed if there is no other section nor \"*\" owner.\n* Show file-to-owner lists even for CLs with\n  \"Exempt-From-Owner-Approval:\" tag.\n  Move the check of isExemptedFromOwnerApproval() from\n  showFindOwnersResults into updateDivContent.\n* Use JavaScript enum style for GROUP_TYPE.\n\nChange-Id: Id7b0538efdfbe93a7cd514ebaf32c027c4dd7f63\n"
    },
    {
      "commit": "9fc2157602065e7918d9217ed17ad418e0c36b66",
      "tree": "47b7bfc81a39de5b9b6cb7242963978ed47ffa5c",
      "parents": [
        "83063de45d81615cea27a751a62a408ced9b2fdf"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Feb 07 10:02:56 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Feb 07 16:25:23 2019 -0800"
      },
      "message": "Improve .md file format\n\n* Fix typo, indentation, links, `code` font, etc.\n* Minor rephrasing and ordering changes.\n\nChange-Id: I0895fc275e5129e863685d113fca0cdf660e8923\n"
    },
    {
      "commit": "83063de45d81615cea27a751a62a408ced9b2fdf",
      "tree": "c797efed7fdf462f9778c7355f954fab076f2208",
      "parents": [
        "0036927549e6f26ca8b630e461db9708f506f6cd"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Jan 31 10:31:53 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Feb 01 18:46:46 2019 -0800"
      },
      "message": "Use StoredValues.PLUGIN_CONFIG_FACTORY\n\n* Construct a Config object for each request to read latest\n  configuration, instead of using static variables and functions.\n  * Config parameters are retrieved from injected pluginConfigFactory\n    or StoredValues.PLUGIN_CONFIG_FACTORY.\n  * Use Config.PLUGIN_NAME as fixed plugin name; no more injected name.\n  * Use config.getDefaultOwnersFileName to find configured file name.\n  * Cache, OwnersDb, and Checker store and pass a PluginConfigFactory.\n* One Cache per GitRepositoryManager.\n  * Use repositoryManager instead of branch name for dbCache key.\n* Coding style improvements:\n  * Use private final for members only assigned in constructors.\n  * Remove unnecessary setup code in PredicagteModule\n  * Move overloaded findApproval functions to be next to each other.\n  * Use simpler functions owner2Paths.size().\n\nChange-Id: I68bfb879a5a6ab4d89562b8b45b0a73b713dd587\n"
    },
    {
      "commit": "0036927549e6f26ca8b630e461db9708f506f6cd",
      "tree": "505e69666d0d0159037573baba5e2fd5944f3ed3",
      "parents": [
        "bdb73ccbb347d788e35ca2519057611d159b23dd",
        "3a2cf777b1c9c41a128fbcd96d5bf7f7cca703e8"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Feb 01 01:18:13 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 01 01:18:13 2019 +0000"
      },
      "message": "Merge \"Use better assertThat check methods\""
    },
    {
      "commit": "bdb73ccbb347d788e35ca2519057611d159b23dd",
      "tree": "61c2a5b7a28fe47b21e5465f88547ff686bf448d",
      "parents": [
        "4f307d0c09308f611d5dec832acd49811c1809b6",
        "2b0dabe805a08933b73d68644bfa0855c1fcc846"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Fri Feb 01 01:18:07 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Feb 01 01:18:07 2019 +0000"
      },
      "message": "Merge \"Clean up Validator code\""
    },
    {
      "commit": "4f307d0c09308f611d5dec832acd49811c1809b6",
      "tree": "35846c10d41e6d7abdbc43723cce409ec44ca550",
      "parents": [
        "43cdab47af14a1f95309abc0c9cccc1dc87d8588",
        "f38e94d7bd437e115e5606cc00bd69e3387c3446"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Jan 31 23:55:20 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 31 23:55:20 2019 +0000"
      },
      "message": "Merge \"Improve logged message and Java coding style\""
    },
    {
      "commit": "43cdab47af14a1f95309abc0c9cccc1dc87d8588",
      "tree": "edbe16055e8d6283f4225e6d490ead60679b04ae",
      "parents": [
        "cbea0f72c138026eca0cdedae2e6b0886b4899ef",
        "8b0a975368071a4299b48c3e4f67cdc78ae1e690"
      ],
      "author": {
        "name": "Chih-hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Jan 31 23:55:17 2019 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Jan 31 23:55:17 2019 +0000"
      },
      "message": "Merge \"Add projectInheritanceTest and refactor code\""
    },
    {
      "commit": "cbea0f72c138026eca0cdedae2e6b0886b4899ef",
      "tree": "cc57cc5fae90188439bb813f7cd1eb6581a2f075",
      "parents": [
        "493e6ea5cb1fd59687c3f4937be1b5657cd09a03"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Jan 30 22:35:10 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Thu Jan 31 15:50:01 2019 -0800"
      },
      "message": "Add a real world plugin configuration example\n\nChange-Id: I558429c434172c804c4a3db48106461bb57062c5\n"
    },
    {
      "commit": "f38e94d7bd437e115e5606cc00bd69e3387c3446",
      "tree": "61aedd6fcb7fa80c753bcdbf6227b696eff544ae",
      "parents": [
        "493e6ea5cb1fd59687c3f4937be1b5657cd09a03"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Jan 30 18:33:30 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Jan 30 18:33:30 2019 -0800"
      },
      "message": "Improve logged message and Java coding style\n\n* Fix error in wrong OWNERS_FILE_NAME log message.\n* Add projectName to missing root owners file message.\n\nChange-Id: I511343f9706540a330a215f3e4feb4b2f4c2b0b4\n"
    },
    {
      "commit": "2b0dabe805a08933b73d68644bfa0855c1fcc846",
      "tree": "cb50d0301d23cc8e915e05b7c66ec01dbdfa8ffb",
      "parents": [
        "493e6ea5cb1fd59687c3f4937be1b5657cd09a03"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Jan 30 18:30:43 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Jan 30 18:30:43 2019 -0800"
      },
      "message": "Clean up Validator code\n\n* Use more efficient ArrayList instead of LinkedList.\n* Remove redundant parentheses.\n* Move overloaded makeCommit functions next to each other.\n\nChange-Id: I445c190cab48a34f2f7d6fdb0d6d539389acbaf7\n"
    },
    {
      "commit": "3a2cf777b1c9c41a128fbcd96d5bf7f7cca703e8",
      "tree": "23210f260b2cf3db158d1381aa5c113b008cb1fc",
      "parents": [
        "493e6ea5cb1fd59687c3f4937be1b5657cd09a03"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Jan 30 18:29:04 2019 -0800"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Wed Jan 30 18:29:04 2019 -0800"
      },
      "message": "Use better assertThat check methods\n\n* Remove unnecessary setUp code.\n\nChange-Id: I6a27b6c8cc57020f4a13c3efd089602cdf9f90dc\n"
    }
  ],
  "next": "8b0a975368071a4299b48c3e4f67cdc78ae1e690"
}
