)]}'
{
  "log": [
    {
      "commit": "2c47668e9e166db5d94df8c1f915b956942e9c9d",
      "tree": "3024bc94b5ea488e609d8528ab65ab68ca091d7e",
      "parents": [
        "20eacd4c8afaa0efe62476c25a796abae787421d"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Dec 08 15:13:52 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Mon Dec 08 15:13:52 2025 +0000"
      },
      "message": "SuperManifestRefUpdatedListener: Do not return 500 via Response.withStatusCode\n\nREST endpoints should throw an exception to indicate an internal server\nerror. RestApiServlet takes care to catch the exception and to return a\n\u0027500 Internal Server Error\u0027 response for it.\n\nReturning 500 via Response.withStatusCode also works but messes up the\nerror metric. If no exception is thrown, then we can\u0027t log an exception\nas the cause in the error metric and we fall back to using \"_none\" as\nthe cause (hard-coded in RestApiServlet). \"_none\" is not helpful, hence\nfix the metric by throwing an exception, rather than returning a 500\nresponse code with Response.withStatusCode.\n\nChange-Id: Ic479a221985bf5d936fc88def24837d343c73dd5\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "20eacd4c8afaa0efe62476c25a796abae787421d",
      "tree": "fea5eddff818779dab0836f7c6a7cd8b43ba018f",
      "parents": [
        "79f211dc63b408f154212308da81b86819262986"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Jun 12 15:45:49 2025 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Jun 12 15:48:59 2025 +0000"
      },
      "message": "Exclude tests from Git repository object counting and leaks check\n\nThis check is unreliable and is causing data race issues. These tests\nare for testing the supermanifest plugin. Checking repository object\ncounting and leaks is unrelated, hence disable this.\n\nRelease-Notes: skip\nBug: Google b/396827990\nChange-Id: Ie2ea19f0130178114c6914467c47bbf98e288bdd\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "79f211dc63b408f154212308da81b86819262986",
      "tree": "f68992586ca58fd6eee4ccfc75606b13effac0c0",
      "parents": [
        "436f78a04964118e4d8c51f42714088fc60c351f"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Nov 12 14:57:20 2024 -0800"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Nov 12 15:03:02 2024 -0800"
      },
      "message": "RepoUpdater: allow to set recordRemoteBranch via config\n\nThe RepoCommand has a recordRemoteBranch option, but it is not read\nfrom the configuration (it is always set to true). The \"branch\"\nattribute controls also the autoupdate of submodules and in some\nbranches we want to disable that.\n\nRead the value from the conf and pass it to the RepoUpdater. Default\nto true to keep the current behavior.\n\nChange-Id: I728853f69bf3c21c882b3eae17e4eeb7b2cc3621\n"
    },
    {
      "commit": "436f78a04964118e4d8c51f42714088fc60c351f",
      "tree": "2291977a911b20e9be235f8a28bc1e2028b9cb5e",
      "parents": [
        "367e9c8f759aadd447f829d1d9a354513da53b50"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Wed May 24 10:32:49 2023 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Fri Jun 16 13:49:34 2023 -0700"
      },
      "message": "ConfigEntry: support glob destination branches\n\nConf only allows a 1:1 mapping or a *:* mapping between manifest and\nsuperproject branches. In setups with one manifest repo feeding\nmultiple superproject, this produces long and error-prone\nconfigurations, with many entries and long exclude lists.\n\nSupport glob destinations in the conf, e.g.\n[superproject \"superproject:refs/heads/*-release\"]\nor\n[superproject \"superproject:refs/heads/a-*-dev\"]\n\nChange-Id: Ia1cec87f6db221b7a321941e59421c2972714c56\n"
    },
    {
      "commit": "367e9c8f759aadd447f829d1d9a354513da53b50",
      "tree": "2795e381c6fc3275101f802204ca3944b0877d83",
      "parents": [
        "2550fd8d687ba4bd55b95d8cf577af1045c84913"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Jun 02 11:29:41 2023 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Jun 02 11:32:40 2023 +0000"
      },
      "message": "RepoUpdater: Convert ConcurrentRefUpdateException into LockFailureException\n\nCalling the RepoCommand may fail with a ConcurrentRefUpdateException\nthat represents a LOCK_FAILURE. Convert this exception into a\nLockFailureException so that our auto-retrying logic for LOCK_FAILURES\ncan recognize the LOCK_FAILURE and retry the operation, instead of\nfailing immediately.\n\nExample stacktrace:\nupdate for foo/manifest:*:default.xml (Repo) \u003d\u003e foo/superproject:* (ref refs/heads/main) failed: org.eclipse.jgit.api.errors.ConcurrentRefUpdateException: Cannot lock refs/heads/main. Ensure that no other process has an open file handle on the lock file refs/heads/main.lock, then you may delete the lock file and retry.. RefUpdate return code was: LOCK_FAILURE\n\tat org.eclipse.jgit.gitrepo.BareSuperprojectWriter.commitTreeOnCurrentTip(BareSuperprojectWriter.java:311)\n\tat org.eclipse.jgit.gitrepo.BareSuperprojectWriter.write(BareSuperprojectWriter.java:141)\n\tat org.eclipse.jgit.gitrepo.RepoCommand.call(RepoCommand.java:573)\n\tat com.googlesource.gerrit.plugins.supermanifest.RepoUpdater.update(RepoUpdater.java:74)\n\tat com.googlesource.gerrit.plugins.supermanifest.SuperManifestRefUpdatedListener.updateForConfig(SuperManifestRefUpdatedListener.java:424)\n\tat com.googlesource.gerrit.plugins.supermanifest.SuperManifestRefUpdatedListener.onGitReferenceUpdated(SuperManifestRefUpdatedListener.java:314)\n\nFollow the example of change I2ff60b01a in gerrit core.\n\nChange-Id: I46be2ee251bfef9dee4ea65c3f689415095501dd\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "2550fd8d687ba4bd55b95d8cf577af1045c84913",
      "tree": "ddd0be496dbde9521ad3901e6b6cbe8003a33b1f",
      "parents": [
        "2fa99562045a8863ee7a49e71d36f36419ac88a4"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Wed May 24 11:34:18 2023 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue May 30 15:28:11 2023 -0700"
      },
      "message": "ConfigEntry: consolidate calculating the actual destination branch\n\nJiri and Repo updaters have the logic to handle the \u0027*\u0027 in the\ndestination to calculate the actual destination branch to write.\n\nConsolidate that in the ConfigEntry. This simplifies introducing the\nsupport for ref patterns in later changes.\n\nChange-Id: Iec6f72225e2e560335c0c30f23e39c86a2dde232\n"
    },
    {
      "commit": "2fa99562045a8863ee7a49e71d36f36419ac88a4",
      "tree": "c4b3d5f24c9d22456fc15dc92aa0061002c1b9da",
      "parents": [
        "61be8678e6be23a93dd6854c1283e144c32a0865"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue May 23 15:48:48 2023 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue May 30 15:28:03 2023 -0700"
      },
      "message": "ConfigEntry: Move source matching to the ConfigEntry\n\nAll the information to decide if the incoming project/ref matches a\nconf is in the conf entry, keep the matching there.\n\nThis makes easier to add globs to choose branches in a\nfollowing change.\n\nChange-Id: I0ebbd7da3691b545dc6cda0bdc517a9f40cf2d37\n"
    },
    {
      "commit": "61be8678e6be23a93dd6854c1283e144c32a0865",
      "tree": "7fef4582de3a882009d65347147c4e020afde673",
      "parents": [
        "4ffcbb81874a1805a708523da4effff74e366fe2"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue May 30 11:07:19 2023 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue May 30 11:30:02 2023 +0000"
      },
      "message": "SuperManifestRefUpdatedListener: Remove unneeded caching of config\n\nSuperManifestRefUpdatedListener caches the supermanifest configuration\nthat is read from the All-Projects project. Since\nSuperManifestRefUpdatedListener is a singleton it must take care to\nupdate the cached configuration whenever the configuration in the\nrepository is updated. At the moment the plugin does this when a\nGitReferenceUpdated event for refs/meta/config in All-Projects is\nreceived, but it misses updates that happen behind Gerrit\u0027s back. For\nupdates that go through Gerrit the invalidation of the cached entries in\nSuperManifestRefUpdatedListener should work, but also here we observe\nthat sometimes this doesn\u0027t work and then the plugin uses a stale\nconfiguration.\n\nCaching the config in SuperManifestRefUpdatedListener is not needed, as\nall config files are already cached in the project cache. So the\nsupermanifest plugin can just always retrieve it from there. Entries in\nthe project cache have the SHA1 of the refs/meta/config branch in the\nkey so that the cache entries are automatically refreshed when the SHA1\nof refs/meta/config has changed (even behind Gerrit\u0027s back).\n\nWith this change we are dropping the config caching in\nSuperManifestRefUpdatedListener since it is error-prone and instead we\nalways read the supermanifest configuration via\ncfgFactory.getProjectPluginConfig whenever it is needed. This way we\nshould no longer see staleness issues with this config.\n\nWhile we are here, also improve some error message and variable names.\n\nBug: Google b/241001040\nChange-Id: I894f819e011b68b2dff9406995182881f6592998\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "4ffcbb81874a1805a708523da4effff74e366fe2",
      "tree": "2bb9b29d509ca6de24db09a71ab049c8fbc89f23",
      "parents": [
        "256814e61a7969219f2dece636b5c284e8322326"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue May 30 10:20:51 2023 +0000"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue May 30 10:24:20 2023 +0000"
      },
      "message": "Fix instructions how to build the plugin with external dependencies\n\n* The file that needs to be overridden is external_plugin_deps.bzl\n  (not external_plugins_deps.bzl)\n* The symbolic link plugins/external_plugin_deps.bzl must point to\n  supermanifest/external_plugin_deps.bzl (not\n  plugins/supermanifest/external_plugin_deps.bzl because this will\n  resolve to plugins/plugins/supermanifest/external_plugin_deps.bzl\n  which doesn\u0027t exist).\n\nChange-Id: Ie1fced59dd0c6027388f0aba96b74f91a27ab63f\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\n"
    },
    {
      "commit": "256814e61a7969219f2dece636b5c284e8322326",
      "tree": "d8da878b94304dc976214b3d4cd26d573314565b",
      "parents": [
        "f2a7059f30a702ebab460c9e64b1d518d2dfb796"
      ],
      "author": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Wed Mar 15 13:10:23 2023 +0100"
      },
      "committer": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Wed Mar 15 13:11:02 2023 +0100"
      },
      "message": "Adapt to new DownloadScheme interface\n\nChange-Id: Ib0a07446adf2e69fdfcbd847a5645fece80c6eda\n"
    },
    {
      "commit": "f2a7059f30a702ebab460c9e64b1d518d2dfb796",
      "tree": "ddf6983c7519e8bfab30bfa3890e74cf3c9b2154",
      "parents": [
        "527de7db85022516524db28c5d721d3345a5ce0a"
      ],
      "author": {
        "name": "Dmitrii Filippov",
        "email": "dmfilippov@google.com",
        "time": "Tue Feb 14 22:05:34 2023 +0100"
      },
      "committer": {
        "name": "Dmitrii Filippov",
        "email": "dmfilippov@google.com",
        "time": "Tue Feb 14 22:06:30 2023 +0100"
      },
      "message": "Wrap ref updates in the correct RefUpdateContext.\n\nBug: Google b/261005032\nRelease-Notes: skip\nForward-Compatible: checked\nChange-Id: I70fb668ee71889bed80bcdc5647ae7cd65fb0238\n"
    },
    {
      "commit": "527de7db85022516524db28c5d721d3345a5ce0a",
      "tree": "cffd2fb202aefe9c79f6da0769ce585866817505",
      "parents": [
        "baf511f79b6c6742d4a6398b9368468561b07518"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Wed Aug 10 14:51:26 2022 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Mon Aug 29 08:17:47 2022 -0700"
      },
      "message": "Support exclusion of ref patterns\n\nCurrently the plugin can only exclude individual refs. Support excluding\nref patterns for cases like automation creating refs/heads/auto-\u003cuuid\u003e\nrefs in the manifest repository.\n\nDefine the patterns on a git-style (only one \u0027*\u0027 in the name). It is\nconsistent with other patterns in the conf and allows us to use the\nRefSpec class for the matching.\n\nChange-Id: I2de497ec2d276604230cf2430812a3776a27b58a\n"
    },
    {
      "commit": "baf511f79b6c6742d4a6398b9368468561b07518",
      "tree": "9e898dc0788b36bef226ae627dcca21ba3617a08",
      "parents": [
        "43f34386809b815fb0373d6319d779fce6b6a07d"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Aug 09 23:39:37 2022 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Aug 09 23:39:37 2022 -0700"
      },
      "message": "ConfigEntry: Trim whitespaces on exclude entries\n\nIt is natural to add whitespaces after commas in the exclude list.\nTrim the result of splitting the entry, so later when we compare the\nrefs we get the expected results.\n\nChange-Id: I8e49ae482665aa0f456944b5454561e682b84a43\n"
    },
    {
      "commit": "43f34386809b815fb0373d6319d779fce6b6a07d",
      "tree": "5834c870fe179cf21c86c52d98ef25251dffbcf3",
      "parents": [
        "3fc1ca73b4d4cc745d4fd76dd6e4affd99bd92e4"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Jun 02 12:03:19 2022 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Jun 02 12:03:19 2022 -0700"
      },
      "message": "Documentation: update example conf for \"mirror all branches\"\n\nDoc is suggesting \u003crepo\u003e:* to mirror all manifest branches, but\nin the code we require \u003crepo\u003e:refs/heads/*.\n\nUpdate documentation so example and text use the refs/heads/*\n\nChange-Id: Iacd78ec9bc92c59a17e39e03638b9f5920f577d3\n"
    },
    {
      "commit": "3fc1ca73b4d4cc745d4fd76dd6e4affd99bd92e4",
      "tree": "09c3dd5ea6c629c8c13b148c0b829ebabfe98dca",
      "parents": [
        "2750830500366c59d6cd2630e0fb7746e5c5a276"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Mon Apr 04 12:45:03 2022 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Mon Apr 04 12:45:03 2022 -0700"
      },
      "message": "SuperManifestRefUpdateListener: add whitespace for styling\n\nAutomated fix by java formatter\n\nChange-Id: Iebd4e4dd4e8ad33ebd0dbe3ffde6abf225f647e5\n"
    },
    {
      "commit": "2750830500366c59d6cd2630e0fb7746e5c5a276",
      "tree": "e78e656d6a66db3be5e0a33693060ecef32b0ae3",
      "parents": [
        "1c927d3ff894654b8bb13991f13ee202f7b7d377"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Mon Apr 04 11:39:48 2022 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Mon Apr 04 12:44:55 2022 -0700"
      },
      "message": "RepoUpdater: Make field final, remove #toString()\n\nMinor style changes suggested by internal tools.\n\nChange-Id: I0c9022da4f16e57c50d4b63fb95e8d2acecdfeaf\n"
    },
    {
      "commit": "1c927d3ff894654b8bb13991f13ee202f7b7d377",
      "tree": "92412c08e68e595f6f80a7bae764a9a1998de407",
      "parents": [
        "fb1f2fb8201f81c20115c917ddb91207db1afb91"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Feb 01 16:05:20 2022 -0800"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Mon Apr 04 17:38:42 2022 +0000"
      },
      "message": "RepoUpdater: store in destination the source manifest revision\n\nRight now it is not possible to know the specific revision of a manifest\nthat defined the destination repository. This is problematic for\ndebugging and to detect mismatches e.g. when the manifest is updated but\nthe translation to superproject failed.\n\nWrite to the destination repository a \".supermanifest\" file with the\nrepo, reference and commit-id of the source manifest used.\n\nAlternatives considered to write the source repo/ref/hash:\n\n  * .gitattributes of the .gitmodules file. Some updates in the manifest\n    don\u0027t touch the .gitmodules (e.g. a linkfile change), so it can fall\n    out of sync.\n\n  * commit message. Caller would need to follow the commit history to\n    find the latest modification by repo command. This is not helpful\n    e.g. for build bots that want to get the value in one call.\n\nThis requires the RepoCommand#addToDestination method introduced in JGit\n6.1\n\nChange-Id: Iad66199d40828143f4764421247714b6f0625233\n"
    },
    {
      "commit": "fb1f2fb8201f81c20115c917ddb91207db1afb91",
      "tree": "680b54b4c994d6e404d4c85e3308d1ca2856fde6",
      "parents": [
        "2a49f655b4a87fd4c0840a867c1c8d2720a7d288"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Mar 15 16:59:31 2022 +0100"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Tue Mar 15 16:59:55 2022 +0100"
      },
      "message": "Use Flogger for writing logs\n\nUsing Flogger for logging is consistent with Gerrit core. Also Flogger\nhas a fluent API that is less error-prone and easier to read.\n\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nChange-Id: I606a7f39a7969dcacb5dbf4dc195c088629c311a\n"
    },
    {
      "commit": "2a49f655b4a87fd4c0840a867c1c8d2720a7d288",
      "tree": "a47377c2c51bc33e3892d7b749d4c5560bfea147",
      "parents": [
        "62f1d7143218c9a6084c135b71d5d2dd8501a2af"
      ],
      "author": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Fri Jan 28 11:52:06 2022 +0100"
      },
      "committer": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Fri Jan 28 11:40:47 2022 +0000"
      },
      "message": "Short-circuit logic for NoteDb updates\n\nChange-Id: Ifab161d7b90185e1e60a5421817042cae95c87f8\n"
    },
    {
      "commit": "62f1d7143218c9a6084c135b71d5d2dd8501a2af",
      "tree": "75895f0c52309aa71c5c9f530fd575bc5810ed33",
      "parents": [
        "46d29f83ed66750a871881280a85ae4ad3427104"
      ],
      "author": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Fri Jan 28 11:24:33 2022 +0100"
      },
      "committer": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Fri Jan 28 11:39:53 2022 +0000"
      },
      "message": "Fix bottleneck in GitRefUpdatedListener\n\nThe supermanifest plugin listens on Git ref updates using a class marked as\n@Singleton. This means any and all updates to the Git storage will go\nthrough this class. The actual method that handles these updates was\nmarked synchronized to prevent shared access to a non-thread safe\nconfig.\n\nThis turns out to be a central bottleneck in Gerrit: All git updates\nhave to go through this method. If the supermanifest plugin is configured\nto do work (i.e. update manifest entries for other repos), that work is\nactually quite slow (5s and sometimes above). This makes it so that updates\non the Gerrit server get to a grinding halt and get all queued up on this\nsynchronized block.\n\nIn this commit, we rework the mutable config to be immutable, remove\nthe synchronized block and swap it for an AtomicReference. With that,\nthe machinery is still thread safe, but doesn\u0027t lock up anymore.\n\nWhile at it, we swap a call to ProjectIndex#evictAndReindex for\nProjectIndex#evict. We just want to read a fresh project config\nfrom disk. Eviction is sufficient for that.\n\nChange-Id: I89ffce984d7f4c32dda72dff9e55a5c4c108ee7d\n"
    },
    {
      "commit": "46d29f83ed66750a871881280a85ae4ad3427104",
      "tree": "70ca37c52a34bdb890f161d63aafd3bbacf2df03",
      "parents": [
        "d2e8d12a231a7a54689e5a06266fb113c6f157e6"
      ],
      "author": {
        "name": "Marija Savtchouk",
        "email": "mariasavtchouk@google.com",
        "time": "Thu Jan 13 12:14:04 2022 +0000"
      },
      "committer": {
        "name": "Marija Savtchouk",
        "email": "mariasavtchouk@google.com",
        "time": "Thu Jan 13 12:14:45 2022 +0000"
      },
      "message": "Adopt plugin to ProjectCache.evict rename\n\nThe rename was introduced by I946e8df456424de52f694cdcf6456b77d452ae4c\nwhich causes the projects not being reindexed on cache evictions.\n\nChange-Id: I80da7953901eb67902b87d5b7a7b9d0825278024\n"
    },
    {
      "commit": "d2e8d12a231a7a54689e5a06266fb113c6f157e6",
      "tree": "b82ac9e1c88eaaf54d992532b9ac40effac9a598",
      "parents": [
        "964d45630087d65cb1bb6389411dc5a9cba2545d"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Oct 07 12:30:17 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Oct 07 12:33:18 2021 -0700"
      },
      "message": "BUILD: Add dependency to commons-lang3\n\nPrevious change migrated the code to commons lang v3. The build\ncomplains: \"Using ...lang3.StringUtils from an indirect dependency\".\n\nAdd commons-lang3 as dependency to the plugin in the BUILD.\n\nChange-Id: I41af8f9cdba34d4995b545f3d282a2854d687c34\n"
    },
    {
      "commit": "964d45630087d65cb1bb6389411dc5a9cba2545d",
      "tree": "7dc860e04868e41e78e33c8d04ae06bb590b4f43",
      "parents": [
        "39d4b01fcc62f5152fa29f00ecbaab49ef358bcc"
      ],
      "author": {
        "name": "Youssef Elghareeb",
        "email": "ghareeb@google.com",
        "time": "Tue Oct 05 18:39:38 2021 +0200"
      },
      "committer": {
        "name": "Youssef Elghareeb",
        "email": "ghareeb@google.com",
        "time": "Tue Oct 05 18:39:38 2021 +0200"
      },
      "message": "supermanifest: Migrate to commons lang v3\n\nChange-Id: If96d7f6745669f521d8637477f1513ac565e98ba\n"
    },
    {
      "commit": "39d4b01fcc62f5152fa29f00ecbaab49ef358bcc",
      "tree": "82f832b6d46af3cc84eef109c2e49abbe79c8cc2",
      "parents": [
        "8aa570a105fcc2aea89a53e64327347ff30e45bb"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Wed Sep 15 12:49:40 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Wed Sep 15 12:49:40 2021 -0700"
      },
      "message": "Take into account that config read could fail on start()\n\nIf there is a problem reading All-Projects when the plugin is started,\nthe plugin configuration is null and this can cause a\nNullPointerException later.\n\nConsider a null config \"no configs\" when finding relevant entries. In\nthe REST call, return a 500 with an appropiate message.\n\nChange-Id: Iff503f74ffcff25b160c46486909e4ee367475c9\n"
    },
    {
      "commit": "8aa570a105fcc2aea89a53e64327347ff30e45bb",
      "tree": "4e786794133e51b30489bca307cbc0d031e116bb",
      "parents": [
        "e6b65d99220bb4e5ba1d3f2c320c110485da8c25"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Sep 14 13:31:18 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Sep 14 13:31:18 2021 -0700"
      },
      "message": "SuperManifestRefUpdatedListener: Update metric description\n\nSuggested in previous change.\n\nChange-Id: I66fc281bb9dee321fc80c51991f9e2d52525c403\n"
    },
    {
      "commit": "e6b65d99220bb4e5ba1d3f2c320c110485da8c25",
      "tree": "f8620a7ede504e94c638e1cd446a9abfe4b05625",
      "parents": [
        "098b92533ee77881caa069776c0b21e04be529f2"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Sep 02 10:58:30 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Sep 14 16:51:24 2021 +0000"
      },
      "message": "Measure time taken to process a manifest\n\nMeasure time taken to parse the manifest, read all gitlinks and commit\nto the superproject.\n\nThis gives us an idea on how long is it taking now and helps to track\nregressions/improvements if we tweak with RepoCommand or the repo\nopener.\n\nChange-Id: Ia78acf37612ce5df0da28d6e6065544d196a3d17\n"
    },
    {
      "commit": "098b92533ee77881caa069776c0b21e04be529f2",
      "tree": "f0e21688b82eb0275d4c35cf443fada78dc54ddb",
      "parents": [
        "0f55f5a12b7c906dc9760c84c51a03dfc8d9b113"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Sep 02 11:29:03 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Sep 02 14:26:15 2021 -0700"
      },
      "message": "JiriUpdater: Do not set branch for SHA1\n\nIn pinned manifest, the ref is a SHA1. Current code is writing \"branch \u003d\n\u003cSHA1\u003e\" that is not a valid value. Furthermore, tags are not valid\nvalues for the branch field.\n\nWrite the branch field only for non-tags. Tags go to the \"ref\" field\n(RepoCommand does this).\n\nChange-Id: Id89d8a4c1dd6d9dc3327fc3f60a6b7c7a324b0a5\n"
    },
    {
      "commit": "0f55f5a12b7c906dc9760c84c51a03dfc8d9b113",
      "tree": "d18e0368dd8259ed8587b0610b8e87e6903b9b33",
      "parents": [
        "8c93be556687f1bbc471d59e6a5f0297bde8f5f1"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Wed Sep 01 15:20:18 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Sep 02 08:12:25 2021 -0700"
      },
      "message": "REST endpoint: Give a more descriptive response\n\nA request to the plugin returns \"204 No content\" on success, and a\ngeneric 500 on any error without any more details. Provide the caller\nwith more information, so they know what happened and if they should\nretry.\n\nNew responses:\n* A noop call (no projects to update) returns \"204 No content\"\n* A successfull update returns \"200 OK\"\n* A problem in conf is a \"412 Precondition Failure\"\n* An exception return 500 (as before) but now with an error message.\n\nChange-Id: I453b3a674cb252b79d02b65d5255675a1d7dd291\n"
    },
    {
      "commit": "8c93be556687f1bbc471d59e6a5f0297bde8f5f1",
      "tree": "dde4b602474d8fa3451d7a50c521f047058d94a3",
      "parents": [
        "591cb535edac04cf119b6c67a8c2845cb7796ae0"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Wed Sep 01 12:07:51 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Wed Sep 01 14:59:44 2021 -0700"
      },
      "message": "SuperManifestRefUpdatedListener: inline the update method\n\nThe update() method has a boolean parameter to let the exceptions pass\nthrough or not. This makes the exception handling unnecessarily\ndifficult to read. The method is only called from two places (with the\nparam set as true and false on each).\n\nInline the #update() method to the callers. This moves the exception\nhandling to the same level for both paths (REST call/plugin call) and\nmakes clearer what happens on exceptions: the REST call let the\nexception go and stops, the plugin still tries with remaning confs.\n\nChange-Id: I17933da33437dea4cbbe179b1ef4b6ffeb0655cf\n"
    },
    {
      "commit": "591cb535edac04cf119b6c67a8c2845cb7796ae0",
      "tree": "d2ba83ed844a97328ad36aac388c60fa115298b4",
      "parents": [
        "161f564d81e04a00a834dedbf7eec071f69635cc"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Mon Jun 28 17:38:05 2021 -0700"
      },
      "committer": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Mon Jun 28 18:54:58 2021 -0700"
      },
      "message": "Count other superproject update errors\n\nIn particular, this counts instances of GitAPIException, which often\noccur with ConcurrentRefUpdateException as their cause.\n\nA followup change can get rid of this custom error reporting metric\nand use something more centralized instead.\n\nChange-Id: Ieed1c018f66e069789ae76e819dd40921a54c40c\n"
    },
    {
      "commit": "161f564d81e04a00a834dedbf7eec071f69635cc",
      "tree": "b88b2c39b15ffbf128199a836e5920de72677069",
      "parents": [
        "62b6d5cb089d3183ae9daf7be2766557cc970e29"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Mon Jun 28 17:20:27 2021 -0700"
      },
      "committer": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Mon Jun 28 18:54:53 2021 -0700"
      },
      "message": "Don\u0027t swallow lock failures\n\nRe-throw lock failures after setting status to reflect them. Otherwise\nit is difficult to track down their cause in logs.\n\nChange-Id: Ib49a42391fd615474eb61558f6399d0f98e1ec59\n"
    },
    {
      "commit": "62b6d5cb089d3183ae9daf7be2766557cc970e29",
      "tree": "0a0146e7a630cfd57f4eca13e5ead7687ec87135",
      "parents": [
        "3127dc93250da90c810f307d9013005ca684b43e"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Jun 17 16:05:38 2021 +0200"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Thu Jun 17 16:05:38 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: I4258408283a2e29bcbca8e32b16fb423fb35afb7\n"
    },
    {
      "commit": "3127dc93250da90c810f307d9013005ca684b43e",
      "tree": "8c67970ddcba59dc12a745045829e74534007a90",
      "parents": [
        "f51887dc21774d7fbd79a7eeef5534844fcba94a"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Wed May 26 09:22:06 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Wed May 26 09:22:06 2021 -0700"
      },
      "message": "Move the metric to the listener class\n\nWe don\u0027t need the extra singleton around it for initialization.\n\nChange-Id: I5b6b977ae51bdaa661463c4d0f8e6f0bf884a8eb\n"
    },
    {
      "commit": "f51887dc21774d7fbd79a7eeef5534844fcba94a",
      "tree": "753b60cf71546290f621e6836d9b5d7a5aac746f",
      "parents": [
        "2b8161c7d01af273e82c4408bdad685c4483525e"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Fri May 21 15:44:00 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue May 25 14:15:31 2021 -0700"
      },
      "message": "Count lock-failures when updating the superproject\n\nIf the repository changed while the commit is being prepared, the update\nfails with a \"lock failure\". Supermanifest doesn\u0027t retry it, so we only\nknow about it when a user reports missing submodules.\n\nAdd a metric to see how frequently this happens.\n\nChange-Id: I12caf237388e606745a530ad4ca8f7742ce4ef6a\n"
    },
    {
      "commit": "2b8161c7d01af273e82c4408bdad685c4483525e",
      "tree": "e6005aa675197437aac867cb5a213a84feef15d1",
      "parents": [
        "fb2553dffcfa0af435f2639ed68837398c3a6e0d"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Apr 08 17:51:59 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Apr 08 17:51:59 2021 -0700"
      },
      "message": "SuperManifestRepoManager: Take the path if the URL is not canonical\n\nIn some cases the canonical URL doesn\u0027t match with the repo URL and\nrelying on the path returns the right result (at the risk of opening the\nwrong repo if the host is different).\n\nThis was the behaviour before and the change broke some existing\nmanifest projects.\n\nRevert to this (wrong) behavior until we can have a proper cross-host\nimplementation.\n\nChange-Id: Id1f95c88d2f3383fbb0801c65253fa1dcb0b878d\n"
    },
    {
      "commit": "fb2553dffcfa0af435f2639ed68837398c3a6e0d",
      "tree": "a99fcde2fd0493baa5c97df93e011a76042dcccf",
      "parents": [
        "76855e28d9afd628c3ad9a873aa23c70c213a3c7"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Apr 06 17:21:00 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Apr 06 17:21:00 2021 -0700"
      },
      "message": "ConfigEntry: Make constructor public\n\nNow is part of the SuperManifestRepoManager API and tests for\nimplementations need the constructor.\n\nChange-Id: I405cf32a543602d29631dd19b8166758aaf25088\n"
    },
    {
      "commit": "76855e28d9afd628c3ad9a873aa23c70c213a3c7",
      "tree": "8f5d6a4a7c2ea82bc43f9b9d84e668e7ae4970d9",
      "parents": [
        "b362d92a122b1e413a01e63e8f886cc7695c1a27"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Apr 01 08:28:42 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Apr 01 08:31:48 2021 -0700"
      },
      "message": "Fix java style suggestions\n\nUse withCause() in the logger\nSpecify charset when building a string from bytes\nAdd summary fragment in new javadoc\n\nChange-Id: I3e44aed4732fbdaadf051e63737fe8817dd90866\n"
    },
    {
      "commit": "b362d92a122b1e413a01e63e8f886cc7695c1a27",
      "tree": "34bdc13880b731c4d00d7cb492cde7bd7307cb64",
      "parents": [
        "37e750ee831992df0b9047b0156b2edce1e34fb7"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Apr 01 08:07:08 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Apr 01 08:19:04 2021 -0700"
      },
      "message": "Various fixes for ErrorProne warnings\n\nAdd @FormatMethod/@FormatString in log wrappers\nAdd @RunWith(Junit4.class) to all tests\nUse correct branches in test (the test was testing the wrong thing!)\n\nChange-Id: Iaa17ba1f5c1618b87a2281d9bf4d4b93d617d56c\n"
    },
    {
      "commit": "37e750ee831992df0b9047b0156b2edce1e34fb7",
      "tree": "f4485340c41dd47c3ecf307aa74d70b5621a41d7",
      "parents": [
        "5a2936eb51767b7f0f3372aab37e2270e09d15d1"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Wed Mar 31 15:05:16 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Wed Mar 31 15:05:16 2021 -0700"
      },
      "message": "external_plugin_deps.bzl: pass buildifier and add module comment\n\nFix buildifier warnings.\n\nChange-Id: Ic7332745576c480eaa8dad308a39d1265226822c\n"
    },
    {
      "commit": "5a2936eb51767b7f0f3372aab37e2270e09d15d1",
      "tree": "575246d6415d8aeccc54863f425a6dd85d123620",
      "parents": [
        "df86d52323ba79548d246afc1c07f4f3ff768e47"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Mar 30 17:48:49 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Mar 30 17:48:49 2021 -0700"
      },
      "message": "GerritSuperManifestRepoManager: Add comment for unused parameter\n\nThis was mentioned in the review of the parent change:\nhttps://gerrit-review.googlesource.com/c/plugins/supermanifest/+/301085\n\nChange-Id: Id796c6f920113959222bf018085d57b5af4ebbfd\n"
    },
    {
      "commit": "df86d52323ba79548d246afc1c07f4f3ff768e47",
      "tree": "95857ac7b539b9e58972bfa4cffdbe0128c919c5",
      "parents": [
        "173a8798376d9f63da2bbaa0b1933eea60d4ac1c"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Fri Mar 19 13:44:55 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Mar 30 08:59:07 2021 -0700"
      },
      "message": "Inject the SuperManifestRepoManager\n\nWhen a manifest contains a project in a second host, the manifest parser\ngenerates a correct .gitmodules but when reading the SHA1, the\nSuperManifestRepoManager returns \u003cthis-host\u003e/project. In some cases this\nproduces an inconsistent superproject: the .gitmodules points to a repo\nbut the SHA1 in the gitlink doesn\u0027t exist there.\n\nInject the implementation of the SuperManifestRepoManager. Providers can\noffer an implementation that reads correctly cross-host if their backend\nsupports it.\n\nChange-Id: I88187f883b59b7b9e7428963865b790ec8e87ca3\n"
    },
    {
      "commit": "173a8798376d9f63da2bbaa0b1933eea60d4ac1c",
      "tree": "ce10f4078376d45976a58b4887e05df49c350711",
      "parents": [
        "3ffb17385ab6210dc950f03a668379fc27878065"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Fri Mar 19 13:22:25 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Mar 30 08:59:07 2021 -0700"
      },
      "message": "Extract opening repos to its own class\n\nMove opening the repos (with caching and translating URL -\u003e repoName) to\nits own class.\n\nProviders can offer different implementations adjusted to\ntheir backends, and supporting e.g. cross-host reading. The injection\ncode comes in follow up changes.\n\nChange-Id: I9f346e6733bd35170a2a94a27d7acbd6390679bf\n"
    },
    {
      "commit": "3ffb17385ab6210dc950f03a668379fc27878065",
      "tree": "48dcada20b820e1d2289ae6d53b67025cfceeb8a",
      "parents": [
        "2da90e2524c4607cd75a6adb83a2d763f96f6185"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Fri Mar 19 12:06:23 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Mar 30 08:59:03 2021 -0700"
      },
      "message": "Simplify the URI/repoName handling\n\nThe methods in the GerritRemoteReader can receive URIs or repoNames\n(a host-relative name of the project). The handling of the URIs is\ninconsistent: sha1() takes the path before calling openRepository()\nwhile readFileWithMode() passes through the whole URL. This is wrong\ne.g. for external URLs. An outter host URL can open the wrong repo in\nsha1() and nothing in readFileWithMode().\n\nMake internal methods to open by URI or name. The public methods\nmust decide what to invoke. This makes clear what is coming and gives a\nunique place for the URI -\u003e repoName translation.\n\nThis also paves the way to plug a repository opener that supports\ncross-host URLs.\n\nChange-Id: Ia2a925764bb9c3305a434240d44873b31c6e0c75\n"
    },
    {
      "commit": "2da90e2524c4607cd75a6adb83a2d763f96f6185",
      "tree": "ceb2eca9cb55c7159c8ec29df6ecf9f1f91c642e",
      "parents": [
        "d64a60a854424510ff965f455a4d7ba5856d5fb1"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Mar 18 17:38:06 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Mar 30 08:57:17 2021 -0700"
      },
      "message": "Partially revert making GerritRemoteReader injectable\n\nFor a cross-host implementation, it is enough to wrap\nGitRepositoryManager, no need to expose GerritRemoteReader.\n\nMaking GerritRemoteReader static still make sense and will help later to\nplug a different repository manager.\n\nChange-Id: I63417c12c8e8d8043f52dbaa4661c5028f43925d\n"
    },
    {
      "commit": "d64a60a854424510ff965f455a4d7ba5856d5fb1",
      "tree": "90c727423d4229170aa463847bd2db7c85f27c76",
      "parents": [
        "895ba01e31d98ed944caef4a99dd7f135cd8ad7b"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Mon Mar 29 16:08:52 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Mar 30 08:18:15 2021 -0700"
      },
      "message": "Config: add \"exclude\" option to the \"copy all\" case\n\nThere is no intermediate state between \"copy all\" or \"copy one\". It is\ncommon to want to copy \"all branches except a, b and c\".\n\nAdd a \"exclude\" option to the \"copy all\" config, so specific branches\ncan be ignored.\n\nChange-Id: I40e222825ecc715f3ed62afd247534258d9e581b\n"
    },
    {
      "commit": "895ba01e31d98ed944caef4a99dd7f135cd8ad7b",
      "tree": "f5188a7111aa610653bf3524c99a0b67d1c388a1",
      "parents": [
        "130d6795dae6a2b73a0d4b08b9987e8924a023ab"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Mon Mar 29 17:46:15 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Mon Mar 29 17:46:15 2021 -0700"
      },
      "message": "Add also jaxb runtime\n\nAdding the API made the project compile but the tests were still\nfailing. Tests were missing the implementation classes.\n\nAdd those missing classes. Now jiri tests pass.\n\nChange-Id: Idb31d061a18237f9b1524c0d2d438f27a28e6881\n"
    },
    {
      "commit": "130d6795dae6a2b73a0d4b08b9987e8924a023ab",
      "tree": "879283e8f8fad3f393bfaf21d6c3a04a9fd6d151",
      "parents": [
        "8bfa12b63124fac78496030e8c5647a6ee887533"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Mar 25 11:04:05 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Thu Mar 25 11:04:05 2021 -0700"
      },
      "message": "Add jaxb-api as external dependency\n\nCompilation is broken because it cannot find classes like\njavax.xml.bind.XmlAttribute (JAXB). It seems JAXB was removed in java\n11. Add it as external dependency.\n\nThis makes the plugin compile. Unit tests seems to be broken, but that\nis a different issue.\n\nChange-Id: Id3980064461b1e789967a148fc5c6f52db070f2f\n"
    },
    {
      "commit": "8bfa12b63124fac78496030e8c5647a6ee887533",
      "tree": "b370109246937e9844aff47885d4f2eb78ec3dcb",
      "parents": [
        "91f2c8cb366e21c20544f531be710fdfa5eb3afb"
      ],
      "author": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Mon Mar 15 13:21:24 2021 -0700"
      },
      "committer": {
        "name": "Ivan Frade",
        "email": "ifrade@google.com",
        "time": "Tue Mar 16 08:46:01 2021 -0700"
      },
      "message": "Inject GerritRemoteReader instance\n\nWhen a manifest contains a project in a second host, the manifest parser\ngenerates a correct .gitmodules but the GerritRemoteReader ignores the\nhost and tries to read the sha1 of the submodule from \u003cthis\nhost\u003e/\u003cproject\u003e. In some cases this produces an inconsistent\nsuperproject: the .gitmodules points to a repo but the SHA1 in the\ngitlink doesn\u0027t exist there.\n\nCross-host is a feature of the backend, the default implementation\nshould not count on it.\n\nMake the GerritRemoteReader injectable, so providers can use a\ncross-host implementation if supported in their platform.\n\nChange-Id: I0475348373dd3c6c750ced864728c07c82b831b5\n"
    },
    {
      "commit": "91f2c8cb366e21c20544f531be710fdfa5eb3afb",
      "tree": "cc5fd006de2cc90faf6472688926794ab997a644",
      "parents": [
        "939ba522572d1161c6c6aee161e4aca3e128386e"
      ],
      "author": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Fri May 29 10:10:35 2020 +0200"
      },
      "committer": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Fri May 29 11:05:59 2020 +0200"
      },
      "message": "Evict All-Projects after before reading it in a GitRefUpdate\n\nThe work on the project cache has surfaced an interesting\nbug. Before this rework, the project cache was disabled in\ntests, meaning every call to it would reload from disk.\nNow, it is enabled.\n\nThis broke the SuperManifest tests because the plugin\nlistens to GitRefUpdated events on All-Projects,\nrefs/meta/config and keeps an internal state of parsed\nconfigs. GitRefUpdated hooks are called before\nReceiveCommit evicts the project cache in #postUpdate.\n\nThis commit adds a band-aid to evict All-Projects before\nreading the confing. This will only be triggered on\nconfig updates to All-Projects. It means evicting\nAll-Projects twice on update.\n\nChange-Id: I34def3f65bbead56462836e553ae03a0b4c79fa8\n"
    },
    {
      "commit": "939ba522572d1161c6c6aee161e4aca3e128386e",
      "tree": "fa49811eccff7664e8b9b7d7acfbac1f849fd30a",
      "parents": [
        "a36f65aa13cf8317bc54d912966729eba3476b39"
      ],
      "author": {
        "name": "Gal Paikin",
        "email": "paiking@google.com",
        "time": "Thu Nov 28 18:54:38 2019 +0100"
      },
      "committer": {
        "name": "Gal Paikin",
        "email": "paiking@google.com",
        "time": "Tue Dec 03 16:13:08 2019 +0100"
      },
      "message": "Extract duplicate code\n\nSome code was duplicated to many tests functions. This change put that\ncode into the setup function.\n\nChange-Id: I7aadd87c6e8c8180b62df1f06e3b3fbf31983f50\n"
    },
    {
      "commit": "a36f65aa13cf8317bc54d912966729eba3476b39",
      "tree": "060d47122104943e6d27c2a59a9a18c96fa55434",
      "parents": [
        "d7d04ec9b6dbdb4341c9043679dd794241b4ae44"
      ],
      "author": {
        "name": "Gal Paikin",
        "email": "paiking@google.com",
        "time": "Wed Nov 27 15:26:47 2019 +0100"
      },
      "committer": {
        "name": "Gal Paikin",
        "email": "paiking@google.com",
        "time": "Fri Nov 29 10:51:04 2019 +0100"
      },
      "message": "repo.ref expects ref but gets sha1\n\nUse repo.resolve() rather than repo.ref() which accepts hex sha1s.\n\nNow, manifests that include copyfile directives will be copied to\nthe appropriate destinations even if the repositories are pinned to SHA1\nrevisions.\n\nChange-Id: Iaee9db3bbe33f1a1340d94a68ffdd93bdd6489c7\n"
    },
    {
      "commit": "d7d04ec9b6dbdb4341c9043679dd794241b4ae44",
      "tree": "49e04c1223317eba9049b66e254d3d06b1faafc8",
      "parents": [
        "1a487be38596b778c23f0fad2b633cea50e24f75"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Thu May 30 02:30:53 2019 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Tue Oct 15 23:50:54 2019 +0200"
      },
      "message": "Rename reviewdb package to entities\n\nChange-Id: I75fbf183c882b6a1c41a7cc35a34350df383e111\n"
    },
    {
      "commit": "1a487be38596b778c23f0fad2b633cea50e24f75",
      "tree": "f8401310935a4856d09af2337eeef5fbc5eadaf6",
      "parents": [
        "52fe46c7037ef39969e37e3bf4b96933048d1ea0"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Thu May 30 10:52:21 2019 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david.ostrovsky@gmail.com",
        "time": "Sun Oct 06 15:05:55 2019 +0000"
      },
      "message": "Don\u0027t import Id/Key/NameKey directly\n\nFound all instances matching this regular expression:\n\n  git grep -E \"^import.*client.*\\.(Id|Key|NameKey);$\"\n\nChange-Id: If5da7630d1ad8018c4cb277d0773842aef5499e5\n"
    },
    {
      "commit": "52fe46c7037ef39969e37e3bf4b96933048d1ea0",
      "tree": "8ebed1fafa4922066b04d88b8b5532870c5a702e",
      "parents": [
        "af6e86ce0648d17b302d08a64d6db9eda1b435d6"
      ],
      "author": {
        "name": "Alice Kober-Sotzek",
        "email": "aliceks@google.com",
        "time": "Fri Jul 12 10:11:21 2019 +0200"
      },
      "committer": {
        "name": "Alice Kober-Sotzek",
        "email": "aliceks@google.com",
        "time": "Fri Jul 12 10:11:21 2019 +0200"
      },
      "message": "Migrate off the overload of StandardSubjectBuilder.fail(..)\n\nThe overload was removed from Truth and hence we get a compile error\nnow. Instead of just plainly migrating to the recommended replacement\nassertWithMessage(..).fail(), improve the assertion by using a better\nway to express it in Truth.\n\nChange-Id: I156f4cb67baa5f9f1888fc83bfb46875556c0dfd\n"
    },
    {
      "commit": "af6e86ce0648d17b302d08a64d6db9eda1b435d6",
      "tree": "0adb38d0920274325c56423502bb7ad04b82f037",
      "parents": [
        "837220bb54ff7d6255956e8029e3a010f0079d98"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Fri May 24 10:04:12 2019 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Fri May 24 10:04:12 2019 +0900"
      },
      "message": "Stop using deprecated AbstractDaemonTest#fail\n\nMigrate to the new GerritJUnit#assertThrows where testing for expected\nexceptions, and inline Truth\u0027s assert_().fail() otherwise.\n\nChange-Id: I6a055d4d0eca0e1a1acd47ea6bbcf0aca2c472a8\n"
    },
    {
      "commit": "837220bb54ff7d6255956e8029e3a010f0079d98",
      "tree": "7a37f2c2e42d27348c73c855198d23f91eef18e7",
      "parents": [
        "dbe09dbd77fc68bf153bb9bcadfa1ae16e276ffc"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Fri Apr 19 09:14:19 2019 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Fri Apr 19 09:16:50 2019 -0700"
      },
      "message": "Adapt to Project.NameKey refactoring\n\nChange-Id: I3556b1e8b1bcfa5486f4e6bb34eac374c09a4a16\n"
    },
    {
      "commit": "dbe09dbd77fc68bf153bb9bcadfa1ae16e276ffc",
      "tree": "7b9d3ccb50e9c1c8b3232632b168f302c347e531",
      "parents": [
        "6eb33823830be71a8274abe5a776ed5a9865425f"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Wed Apr 17 15:54:02 2019 -0700"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Thu Apr 18 08:18:41 2019 -0700"
      },
      "message": "Adapt to Branch.NameKey refactoring\n\nChange-Id: I619f3dfa67cb2cf1bcd68dc071c548aa2de11c5f\n"
    },
    {
      "commit": "6eb33823830be71a8274abe5a776ed5a9865425f",
      "tree": "8444ed6c6bb4082b24d7d8c1174d1ac0f1d2ce95",
      "parents": [
        "889b33396ee5eb8ba83d2f203338a90c6418fdf5"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Tue Apr 16 08:30:30 2019 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Tue Apr 16 08:30:30 2019 +0900"
      },
      "message": "JiriUpdater: Add missing cases in switch on RefUpdate.Result\n\nChange-Id: I3f2fe5a2a51799ed9e7f64f19a8b6bed4be7b43b\n"
    },
    {
      "commit": "889b33396ee5eb8ba83d2f203338a90c6418fdf5",
      "tree": "42d71ac91ec68114060ab96b06b3c348c7424a41",
      "parents": [
        "a8add1f8162c2755f331c09767f65cc22bbcb340"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:44:30 2019 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:44:30 2019 +0900"
      },
      "message": "RepoUdater: remove unused canonicalWebUrl from constructor\n\nChange-Id: I57c0ff63e7017362abd2839130035c31be48223f\n"
    },
    {
      "commit": "a8add1f8162c2755f331c09767f65cc22bbcb340",
      "tree": "40c3a48e1bdb15582f0de54ef958ce0d2788a99b",
      "parents": [
        "a22083f9a2f4896bd508b1dc4acdf841ddc9772c"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:42:01 2019 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:42:01 2019 +0900"
      },
      "message": "JiriProjects.Project: Implement hashCode method\n\nSince the class implements the equals method, it should also\nimplement the hashCode method.\n\nChange-Id: I5ca90ab517f3b3ce2bb425bb019a7ae1a023a336\n"
    },
    {
      "commit": "a22083f9a2f4896bd508b1dc4acdf841ddc9772c",
      "tree": "f062e2735d1ddc41cc464a3dc60f2b4798ccbbf6",
      "parents": [
        "5b721a27d1001eb92e14d7d54205260795294ed5"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:38:00 2019 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:38:00 2019 +0900"
      },
      "message": "Add missing serialVersionUID\n\nChange-Id: If32ae8cd265ad87299b9ffce341de8f685f74984\n"
    },
    {
      "commit": "5b721a27d1001eb92e14d7d54205260795294ed5",
      "tree": "e889c7475230dac0173705b9705ed279f02bb505",
      "parents": [
        "0f2cc73ac30aea90950d14e63bbeedcd5a0b25e4"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:25:23 2019 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:25:23 2019 +0900"
      },
      "message": "Stop using JGit\u0027s deprecated Repository#peel method\n\nChange-Id: I36347c8f55dea11ae0c582854927cce66cfb2953\n"
    },
    {
      "commit": "0f2cc73ac30aea90950d14e63bbeedcd5a0b25e4",
      "tree": "dff6a45eda0921a5a077d75316a1f68344e5012e",
      "parents": [
        "62dddce6cce8e1eb5407adad89914f4f49a4eedc"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:23:59 2019 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:23:59 2019 +0900"
      },
      "message": "Stop using JGit\u0027s deprecated Constants.CHARACTER_ENCODING\n\nChange-Id: Ie73e25142c89881b0335cfe90e3d649b2bd488b6\n"
    },
    {
      "commit": "62dddce6cce8e1eb5407adad89914f4f49a4eedc",
      "tree": "37b6b51ba750d95ff7fd37012a9c68b123f35c41",
      "parents": [
        "c9ba3a4a314c3d3e7574547caa2b74e1796b328d"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:19:47 2019 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:19:47 2019 +0900"
      },
      "message": "Remove redundant type arguments\n\nChange-Id: Idde43715a3b776867418ba9089d6caca5eb5ec8d\n"
    },
    {
      "commit": "c9ba3a4a314c3d3e7574547caa2b74e1796b328d",
      "tree": "317cca8b70ba077669847e2a9c09ea047c6cd1e7",
      "parents": [
        "8caba98865f14ea4e88217f0da591d8a67e2a391"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Fri Apr 12 07:44:47 2019 -0700"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 11:10:19 2019 +0900"
      },
      "message": "Adapt to new TestAccount methods\n\nChange-Id: Iffe38402c36f3c22d3580bb27502aa4ee4ee92a8\n"
    },
    {
      "commit": "8caba98865f14ea4e88217f0da591d8a67e2a391",
      "tree": "56d03e3c502736530374d249c27d75cd4e784edf",
      "parents": [
        "f04f378103c3acb4077735ecd5f639d17d22eab5"
      ],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 10:21:55 2019 +0900"
      },
      "committer": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Mon Apr 15 10:21:55 2019 +0900"
      },
      "message": "Format with google-java-format 1.7\n\nChange-Id: I2f8dcbd8e74e9662823cdd3d3a6738a052cb288b\n"
    },
    {
      "commit": "f04f378103c3acb4077735ecd5f639d17d22eab5",
      "tree": "860f79c303374d74f247505f6f4626936135f2a8",
      "parents": [
        "aeadbf42e8601f25b4d751bc64de8f7bc5e262c0"
      ],
      "author": {
        "name": "Haowei Wu",
        "email": "haowei@google.com",
        "time": "Wed Jan 02 15:53:11 2019 -0800"
      },
      "committer": {
        "name": "Haowei Wu",
        "email": "haowei@google.com",
        "time": "Wed Jan 09 15:00:24 2019 -0800"
      },
      "message": "Fix a bug that causing JiriUpdater treating remote project as local\n\nBefore this patch, JiriUpdater determines whether a repo is within\nlocal gerrit by opening a local repo with the same name. This\nbehavior is causing issues if a remote repo has the same name as a\nlocal repo. This patch fixed this issue by matching the hostnames\nof gerrit server and repo url.\n\nChange-Id: I0c6ff995a6b7f1b3af0b55ec872cbc87f1059bb3\n"
    },
    {
      "commit": "aeadbf42e8601f25b4d751bc64de8f7bc5e262c0",
      "tree": "92c823ac2e0cb6d5d85a5a3be8568858d32c7932",
      "parents": [
        "9f681db10537b0fe04f493d26f203ea0d3b84bd3"
      ],
      "author": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Dec 14 12:01:35 2018 +0100"
      },
      "committer": {
        "name": "Edwin Kempin",
        "email": "ekempin@google.com",
        "time": "Fri Dec 14 12:02:10 2018 +0100"
      },
      "message": "Adapt to changed PushOneCommit.Factory method signatures\n\nSigned-off-by: Edwin Kempin \u003cekempin@google.com\u003e\nChange-Id: I3625e9e3d1daff0f71220c4d3f5c8369e15bfe1e\n"
    },
    {
      "commit": "9f681db10537b0fe04f493d26f203ea0d3b84bd3",
      "tree": "fe68544cc8d45e220c28f7c4798f97e0f02bacbd",
      "parents": [
        "c0841c77f427468e338cf181502a73b3d95e99f7"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Wed Oct 31 18:15:38 2018 -0700"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Mon Dec 10 17:34:05 2018 +0000"
      },
      "message": "Update JGit\n\nPiperOrigin-RevId: 219569400\nChange-Id: I97404b554c06a238eaa2dce5ece806d0bd74ce5e\n"
    },
    {
      "commit": "c0841c77f427468e338cf181502a73b3d95e99f7",
      "tree": "bad17c5f5969067a3daadfc2fb249776627369da",
      "parents": [
        "fdfcc5f915000d9956898e1082415df881c6db2c"
      ],
      "author": {
        "name": "Alice Kober-Sotzek",
        "email": "aliceks@google.com",
        "time": "Tue Dec 04 18:36:59 2018 +0100"
      },
      "committer": {
        "name": "Alice Kober-Sotzek",
        "email": "aliceks@google.com",
        "time": "Tue Dec 04 18:36:59 2018 +0100"
      },
      "message": "Use ProjectOperations instead of removed method of core Gerrit\n\nMost of the tests probably don\u0027t need a specific name for the created\nrepository. Keep those names for the moment to ease migration to\nProjectOperations.\n\nChange-Id: I971338ab1eb6b6bd78fdec9ed723e2ddf4d0ca59\n"
    },
    {
      "commit": "fdfcc5f915000d9956898e1082415df881c6db2c",
      "tree": "056611eb080f3eee0fe0d47cdef4841c05020ff7",
      "parents": [
        "456aa2f82dc77485bbb97f856a65fa215a61a183"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Tue Nov 20 15:43:09 2018 +0100"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Tue Nov 20 15:43:16 2018 +0100"
      },
      "message": "Use ProjectOperations in SuperManifestModule tests.\n\nChange-Id: I400e61d0eefb7e870caa89119d7f24508d564af9\n"
    },
    {
      "commit": "456aa2f82dc77485bbb97f856a65fa215a61a183",
      "tree": "404346336e90b2a6104de34f0bfbec5a27263e33",
      "parents": [
        "66f1496a9d9f05054722693cf36ce3ea6f12b6ef"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Wed Sep 26 15:27:00 2018 +0200"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Wed Sep 26 15:27:19 2018 +0200"
      },
      "message": "Fix relativeFetch test.\n\nIt\u0027s unclear how this ever got broken.\n\nChange-Id: I4da6d73c216433911193afd3f4564845d0e11b64\n"
    },
    {
      "commit": "66f1496a9d9f05054722693cf36ce3ea6f12b6ef",
      "tree": "cbeffe6dcd7a50b567bc5d6106ee9fca23f208f4",
      "parents": [
        "faecce8c5d57f54ae9362e99897460f7f8439ea7"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Wed Sep 26 14:03:39 2018 +0200"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Wed Sep 26 13:06:29 2018 +0000"
      },
      "message": "Avoid using Flogger\u0027s log(msg, Object) for calls with Object[] argument.\n\nThe log(String, Object) overload would output a toString representation\nof the Object[] array.\n\nChange-Id: Ice0b5f79df7923754734dfe380c75d141bed1842\n"
    },
    {
      "commit": "faecce8c5d57f54ae9362e99897460f7f8439ea7",
      "tree": "176c4a09eafd1971381d017956907bdb441213ef",
      "parents": [
        "458184b40d0598369cb30d03a81ef7bb2cc904c3"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Mon Aug 20 13:35:34 2018 +0200"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Mon Aug 20 13:35:34 2018 +0200"
      },
      "message": "Correct documentation for manual trigger\n\nChange-Id: I03cf133045bfef131f315b707178798a82dabc00\n"
    },
    {
      "commit": "458184b40d0598369cb30d03a81ef7bb2cc904c3",
      "tree": "03587ed48b4f3786d22dc201127cf9d5b2e256f6",
      "parents": [
        "b54bf314bb093e46fd98afdbc35767656ef6d607"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Wed Jul 18 15:33:58 2018 +0200"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Thu Jul 19 11:59:09 2018 +0000"
      },
      "message": "Run google-java-format\n\nChange-Id: Icaed6e46e82ff1357ace2812dd723586563a18f4\n"
    },
    {
      "commit": "b54bf314bb093e46fd98afdbc35767656ef6d607",
      "tree": "13ba743d49ac097e07b65c63b5c2233a8b54566d",
      "parents": [
        "b9f8d919eae60aed0b25789454e637deef5ca82c"
      ],
      "author": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Tue Jul 17 20:26:49 2018 -0700"
      },
      "committer": {
        "name": "Jonathan Nieder",
        "email": "jrn@google.com",
        "time": "Tue Jul 17 20:26:49 2018 -0700"
      },
      "message": "Allow specifying which groups to subscribe to\n\nJGit\u0027s RepoCommand defaults to tracking groups all,-notdefault.  Most\nusers of this plugin are likely to want to track all groups instead,\nso provide a knob to allow requesting that.\n\nIf the value `all` proves overwhelmingly popular in practice, then it\ncan be made the default in JGit and this setting could be removed.\n\nChange-Id: Ibddb5fdbaa9d57e6bce12affd39e14c73ee481e5\nReported-by: Jeff Gaston \u003cjeffrygaston@google.com\u003e\n"
    },
    {
      "commit": "b9f8d919eae60aed0b25789454e637deef5ca82c",
      "tree": "b898cdd115d10f679423738d58ac5899e18a9ad1",
      "parents": [
        "f9e94997b1344b9c2642643e55cca6ee9a594514"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Wed Jul 11 13:15:20 2018 +0200"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Wed Jul 11 13:15:20 2018 +0200"
      },
      "message": "Use flogger in supermanifest\n\nChange-Id: I6292efb2be0ed9e37361e52541c3f2a1eec4f365\n"
    },
    {
      "commit": "f9e94997b1344b9c2642643e55cca6ee9a594514",
      "tree": "93e428ef916f28e32eecea74f64aea5a1d0f278c",
      "parents": [
        "1d4708c4a122f952a108a0b1b608e34c029477b8"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Wed Jul 11 12:58:29 2018 +0200"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Wed Jul 11 13:08:05 2018 +0200"
      },
      "message": "Use updated timestamp for server identity.\n\nThis fixes a bug with timestamps being fixed to startup of the Gerrit\nserver.\n\nChange-Id: I3e94ff1acc4091427e6a2fcbc94a385630d10ed7\n"
    },
    {
      "commit": "1d4708c4a122f952a108a0b1b608e34c029477b8",
      "tree": "0cab3f01bdd335cdba5bf8e0a3417635863eb242",
      "parents": [
        "ac2f6b7bed421c5c2175a44a5d8c4979122f61c7"
      ],
      "author": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Tue Mar 27 18:09:07 2018 +0200"
      },
      "committer": {
        "name": "Patrick Hiesel",
        "email": "hiesel@google.com",
        "time": "Tue Mar 27 18:09:49 2018 +0200"
      },
      "message": "Adapt to new PermissionBackend interface\n\nChange-Id: I4c1eeba68c447790f0bd24a495b8bfe66e9364a2\n"
    },
    {
      "commit": "ac2f6b7bed421c5c2175a44a5d8c4979122f61c7",
      "tree": "1e280420e5c8e12c16494483666cd96238a7a919",
      "parents": [
        "fb488a6b01f2efca991b80ff50c9732433691242"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Thu Feb 08 13:55:32 2018 +0100"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Thu Feb 08 14:49:15 2018 +0100"
      },
      "message": "Remove default info for loading configuration\n\nIt causes log spam, and problems can be resolved through the manual\ntrigger.\n\nChange-Id: Ifb4803caf81d2129f8eb90d7e75183b994f41f07\n"
    },
    {
      "commit": "fb488a6b01f2efca991b80ff50c9732433691242",
      "tree": "b1c896844e2729769396c8ebd6000d0f41eda728",
      "parents": [
        "e0852fa0da8ae3f57adc8f4a3fc3acd0da73b573"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Thu Feb 08 13:55:32 2018 +0100"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Thu Feb 08 14:06:30 2018 +0100"
      },
      "message": "Add log message for manual trigger of supermanifest\n\nChange-Id: I71e4e154ca77702d533532e4c6feb147467a0148\n"
    },
    {
      "commit": "e0852fa0da8ae3f57adc8f4a3fc3acd0da73b573",
      "tree": "45bc21f38a52055d56f2d8309705514cfb63dec0",
      "parents": [
        "424275bce4ab2fee76b6c6646cb8e5d0f520a63e"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Thu Jan 25 16:32:56 2018 +0100"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Mon Jan 29 11:54:11 2018 +0100"
      },
      "message": "Move resources about too\n\nMake README.md point to my prodigial pre-existing documentation.\n\nChange-Id: I5d51c35e1fc063434fa25d6b115f25eaa8842659\n"
    },
    {
      "commit": "424275bce4ab2fee76b6c6646cb8e5d0f520a63e",
      "tree": "31f5e4efb9db80e5c145ea0d3d830973ee8b0df3",
      "parents": [
        "1be0313effadec197f766ae74ea3f8d2cb46df48"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Tue Jan 23 12:50:09 2018 +0100"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Wed Jan 24 17:55:41 2018 +0100"
      },
      "message": "Don\u0027t dump stack trace if the startup fails\n\nThis makes test logs less distracting.\n\nChange-Id: Iad08a9c59234b0830c58288decb6dfd44159cad9\n"
    },
    {
      "commit": "1be0313effadec197f766ae74ea3f8d2cb46df48",
      "tree": "543aedc826be81b961d76b231af923e895b8263f",
      "parents": [
        "7773e5d91317fe0cee045c149481a3ded6e3535f"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Mon Jan 22 16:15:19 2018 +0100"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Wed Jan 24 17:52:55 2018 +0100"
      },
      "message": "Add some documentation\n\nChange-Id: Ic03d8825c07f948b4069c841232d7f6bff29b874\n"
    },
    {
      "commit": "7773e5d91317fe0cee045c149481a3ded6e3535f",
      "tree": "91d976114fdc240199c1255795e3fe6faa98bd89",
      "parents": [
        "f0c3940d50ff4f564aa15e415e0b4c04ca338687"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Mon Jan 22 16:02:56 2018 +0100"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Mon Jan 22 16:02:56 2018 +0100"
      },
      "message": "Remove src/{main,test} directories\n\nChange-Id: Ic84e8d082b4c16a6c46944ffd51fd90cd2fe66b4\n"
    },
    {
      "commit": "f0c3940d50ff4f564aa15e415e0b4c04ca338687",
      "tree": "fbad6dbf42da9d6005c5337933f907d069004fd1",
      "parents": [
        "d20b78faaf674b88fbd0ef20acd3c3a9653c1cac"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Tue Nov 28 17:00:49 2017 +0100"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Tue Nov 28 17:02:30 2017 +0100"
      },
      "message": "Handle raw SHA1s when set as the revision field in a project\n\nThese are ignored by JGit if ignoreRemoteFailures\u003d\u003dtrue.\n\nChange-Id: If5a11a5457a706585f90a121e83cb1ab76fda03d\n"
    },
    {
      "commit": "d20b78faaf674b88fbd0ef20acd3c3a9653c1cac",
      "tree": "5fe3cf46c4eaa095f9f72bb3957536baf64f9bab",
      "parents": [
        "f85d1df3d152a66a08e79718390a5cd9a4e2a1ff"
      ],
      "author": {
        "name": "Ankur Mittal",
        "email": "anmittal@google.com",
        "time": "Wed Oct 18 14:29:47 2017 -0700"
      },
      "committer": {
        "name": "Ankur Mittal",
        "email": "anmittal@google.com",
        "time": "Thu Nov 09 14:10:41 2017 -0800"
      },
      "message": "Support import tag in jiri manifest\n\nChange-Id: I73b0d87300824698d9f96853956d8b4c40a46387\n"
    },
    {
      "commit": "f85d1df3d152a66a08e79718390a5cd9a4e2a1ff",
      "tree": "81458695fc22b61ed1bfd7d8fe7428698af3a0f5",
      "parents": [
        "e1d7c8f1780403ce3a50e4b6d85bb92937d881d9"
      ],
      "author": {
        "name": "Alice Kober-Sotzek",
        "email": "aliceks@google.com",
        "time": "Mon Nov 06 16:11:50 2017 +0100"
      },
      "committer": {
        "name": "Alice Kober-Sotzek",
        "email": "aliceks@google.com",
        "time": "Mon Nov 06 16:13:55 2017 +0100"
      },
      "message": "Adapt to new core BUILD files\n\nThe rules //gerrit-acceptance-framework:lib and //gerrit-plugin-api:lib\ndon\u0027t exist anymore and are replaced by\n//java/com/google/gerrit/acceptance:lib and //plugins:plugin-lib.\n\nThe rest of the modifications are just formatting corrections caused\nby an auto-formatter.\n\nChange-Id: Ica94e72206b6bc5ee84a14c21b0e1df46a73625e\n"
    },
    {
      "commit": "e1d7c8f1780403ce3a50e4b6d85bb92937d881d9",
      "tree": "1b8c985f64b9b1d0e4562a196520149315ae016b",
      "parents": [
        "dd8d65a5d9e8862d8f5c6b5569179eacfe4ac92c"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Mon Oct 30 10:42:17 2017 -0400"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Mon Oct 30 10:42:17 2017 -0400"
      },
      "message": "Remove unused static import of Assert.fail\n\nThe code is now referring to the inherited fail method, so this import\nis now unused. Unfortunately, google-java-format can\u0027t detect this case.\n\nChange-Id: I0af350c5a9beb709ac4c7051a8687b355a380432\n"
    },
    {
      "commit": "dd8d65a5d9e8862d8f5c6b5569179eacfe4ac92c",
      "tree": "fa5f5dc0054aa5d7207d4cef808a778ee15108ec",
      "parents": [
        "aa0f39a9742bb20c02992abe7d287505ded2cff7"
      ],
      "author": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Mon Oct 30 10:34:01 2017 -0400"
      },
      "committer": {
        "name": "Dave Borowitz",
        "email": "dborowitz@google.com",
        "time": "Mon Oct 30 10:36:57 2017 -0400"
      },
      "message": "Add more \"throws Exception\" clauses in tests\n\nGerrit\u0027s AbstractDaemonTest grew a fail() method, which is basically the\nsame as the existing Assert.fail, except it throws Exception.\n\nChange-Id: I149515c0a69f6d33eb8a32bb188eab930c3656b5\n"
    },
    {
      "commit": "aa0f39a9742bb20c02992abe7d287505ded2cff7",
      "tree": "bc78c4e6de6172fc19c90640fe9ccc9f6364cbd7",
      "parents": [
        "e599d7d5dbb51c278f94d2ba92a983e108b55505"
      ],
      "author": {
        "name": "Ankur Mittal",
        "email": "anmittal@google.com",
        "time": "Wed Oct 18 15:25:49 2017 -0700"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Tue Oct 24 15:11:08 2017 +0000"
      },
      "message": "Fix commit date and time for jiri\n\nChange-Id: Ifc7fc6ece1ca9c88283bde753a71c123cbd6feb5\n"
    },
    {
      "commit": "e599d7d5dbb51c278f94d2ba92a983e108b55505",
      "tree": "062ea5c34e9573b91d06d00cba71f01533798087",
      "parents": [
        "7dd588e8916339c185fd2ee5953c00516b5da94d"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Mon Oct 16 16:14:21 2017 +0200"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Mon Oct 16 16:14:41 2017 +0200"
      },
      "message": "support ignoreRemoteFailures in the SuperManifest plugin.\n\nChange-Id: I8d555af2df98feef346ac8823b8c39809124e718\n"
    },
    {
      "commit": "7dd588e8916339c185fd2ee5953c00516b5da94d",
      "tree": "a43cfc8af7336bb22a86eeaea8e343a180e278c7",
      "parents": [
        "913e1bd67f89b38a68711a06a05f7cf4673df197"
      ],
      "author": {
        "name": "Ankur Mittal",
        "email": "anmittal@google.com",
        "time": "Wed Oct 11 14:56:31 2017 -0700"
      },
      "committer": {
        "name": "Ankur Mittal",
        "email": "anmittal@google.com",
        "time": "Thu Oct 12 11:42:02 2017 -0700"
      },
      "message": "make repo urls relative for jiri supermanifest\n\nChange-Id: I03f2cd61a34a6f9ac518fc2ac095c59aa0e79f21\n"
    },
    {
      "commit": "913e1bd67f89b38a68711a06a05f7cf4673df197",
      "tree": "41a4532c147f9b7bb31fba0f46962a294a4894e7",
      "parents": [
        "68f9156a3db69bdd22485f5283f00844bc29fad9"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Wed Sep 06 15:27:08 2017 +0200"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Wed Sep 06 15:27:08 2017 +0200"
      },
      "message": "Fix java formatting\n\nChange-Id: If98f199ab44ffa2af2739986d3779e39991d949f\n"
    },
    {
      "commit": "68f9156a3db69bdd22485f5283f00844bc29fad9",
      "tree": "e64e0bca02f4beb47068fc8329a2efcfdccc66d3",
      "parents": [
        "cbb74383202afaca02fd624c007d5aa68a9cb27a"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Mon Sep 04 15:44:38 2017 +0200"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Tue Sep 05 16:08:38 2017 +0200"
      },
      "message": "Hookup a REST API handler to allow manual triggers of SuperManifest.\n\nThis allows for the initial population of a superproject, and recovery\nfor failed runs.\n\nChange-Id: I9b650b6b7729d268b54828c89136e8d40b8d2993\n"
    },
    {
      "commit": "cbb74383202afaca02fd624c007d5aa68a9cb27a",
      "tree": "87d96bba35523fc82bc042599fb475d28e7de329",
      "parents": [
        "2e5e334dd2ca7dc285b8c685f16a5ce3a66c46cc"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Mon Sep 04 13:51:39 2017 +0200"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Tue Sep 05 13:16:01 2017 +0200"
      },
      "message": "Make exception types explicit\n\nChange-Id: I0067a842ccb3748a33956e245307bf659c8c28ec\n"
    },
    {
      "commit": "2e5e334dd2ca7dc285b8c685f16a5ce3a66c46cc",
      "tree": "e7d646653ac301b991fe7054d52d132caa0bbcc5",
      "parents": [
        "35aedb2bd8a0d5e5add64ae48e8619a09acc82b4"
      ],
      "author": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Tue Aug 22 19:47:48 2017 -0700"
      },
      "committer": {
        "name": "Shawn Pearce",
        "email": "sop@google.com",
        "time": "Tue Aug 22 19:55:56 2017 -0700"
      },
      "message": "JiriManifest: disable entity external inclusion\n\nIt is not safe to permit inclusion of external entities automatically\nwhen parsing XML.  Disable this feature of the XML parser.\n\nChange-Id: I7b23d85b22b114bd2be08a7745d76ddb766caf5a\n"
    },
    {
      "commit": "35aedb2bd8a0d5e5add64ae48e8619a09acc82b4",
      "tree": "f236ae136263de0279695b9e0000132a4bd1017f",
      "parents": [
        "9058f90a5e0ce3833b7b1b0da6af549b42921f8a"
      ],
      "author": {
        "name": "Ankur Mittal",
        "email": "anmittal@google.com",
        "time": "Wed Jul 26 11:37:37 2017 -0700"
      },
      "committer": {
        "name": "Ankur Mittal",
        "email": "anmittal@google.com",
        "time": "Thu Aug 10 15:20:56 2017 -0700"
      },
      "message": "Add support for jiri manifest\n\nChange-Id: I8b1a2c63e472b15253939df15617ef362919a064\n"
    },
    {
      "commit": "9058f90a5e0ce3833b7b1b0da6af549b42921f8a",
      "tree": "c3d82e4a67a1aee7753ef2232b68cc7edb8597c8",
      "parents": [
        "959a0e70daa94f7cf76cb27970bb1d7b45e03da2"
      ],
      "author": {
        "name": "Ankur Mittal",
        "email": "anmittal@google.com",
        "time": "Tue Jul 25 16:32:01 2017 -0700"
      },
      "committer": {
        "name": "Ankur Mittal",
        "email": "anmittal@google.com",
        "time": "Wed Aug 02 10:49:30 2017 -0700"
      },
      "message": "Abstract away update method to support more tools\n\nAbstract away update method inside an interface so that other tools\nsimilar to repo can be supported.\n\nChange-Id: I4964e0f9f89b4a02ce1cd7bb2cdcffb6cf24f585\n"
    },
    {
      "commit": "959a0e70daa94f7cf76cb27970bb1d7b45e03da2",
      "tree": "5f3c7c47f968b3a08bff90e161e32817020e95ff",
      "parents": [
        "b85c5009c80251d6b8afec61b5b9cddefebbf557"
      ],
      "author": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Tue Jun 13 18:13:54 2017 +0200"
      },
      "committer": {
        "name": "Han-Wen Nienhuys",
        "email": "hanwen@google.com",
        "time": "Tue Jun 13 18:13:54 2017 +0200"
      },
      "message": "Optimize StringBuilder usage.\n\nChange-Id: I84c2a9823e7db0036b596f535d2c8573a38224bf\n"
    }
  ],
  "next": "b85c5009c80251d6b8afec61b5b9cddefebbf557"
}
