)]}'
{
  "log": [
    {
      "commit": "bfb210508e3deafa7fafff7fe918d57740b25bd5",
      "tree": "5e8958b9234b810c8218473383639ad3d3b1d274",
      "parents": [
        "d90b76f9e9283507af0231b3818d59ed0489357a"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat May 09 11:29:00 2026 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed May 13 21:06:21 2026 +0100"
      },
      "message": "Introduce AI review chat integration with Claude\n\nChange-Id: I8bc4002c6684052c4e3c8379f4e9851538d628a6\n"
    },
    {
      "commit": "d90b76f9e9283507af0231b3818d59ed0489357a",
      "tree": "3a5c3f1ea428141133b21603a340bf516b830a65",
      "parents": [
        "4f42ebb9d81687ec284db51c505e7654d569d800"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat May 09 11:25:12 2026 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed May 13 11:48:14 2026 +0100"
      },
      "message": "Introduce AI review chat integration with Gemini\n\nChange-Id: Ic4a4a9ea6cac1e845b3cbe5936c94b63b915795b\n"
    },
    {
      "commit": "4f42ebb9d81687ec284db51c505e7654d569d800",
      "tree": "89d022a25d6523bef74b33c9c9172749ba949b00",
      "parents": [
        "fdf6872dd5d042f2e4958793804bd9eb2366aa9a"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Aug 13 22:41:29 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Aug 13 22:41:29 2025 +0100"
      },
      "message": "Set track-and-disable-inactive-users v1.4\n\nChange-Id: Iadb4fc1f6bfdb806486c189170279829ffd5437a\n"
    },
    {
      "commit": "fdf6872dd5d042f2e4958793804bd9eb2366aa9a",
      "tree": "6e66a1a70d7a90459b175f57900bc0a52e22d91c",
      "parents": [
        "1f2660ac3bb7c5e79151783f31a60c51569dfb7c"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Aug 07 22:23:42 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Aug 13 14:39:57 2025 -0700"
      },
      "message": "Fix documentation formatting of users tracking script\n\nChange-Id: Ia3497fd6f6e8a156dacd97ecc746230d239bce37\n"
    },
    {
      "commit": "1f2660ac3bb7c5e79151783f31a60c51569dfb7c",
      "tree": "e56c39483748c68512da20142e12346a4435601c",
      "parents": [
        "bc2034be62dfd29eaa545fbf33a75702dcd90bfb"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Aug 07 22:05:01 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Aug 13 14:39:37 2025 -0700"
      },
      "message": "Allow using the account tracking without having to disable accounts\n\nEnable the tracking-only functionality for the accounts tracking script\nso that the Gerrit admin can purely keep track of who is using the\nplatform without having to necessarily automatically disable the\ninactive users.\n\nChange-Id: Ibc4c22235c7d9156d625f913a72fcf4936dbb339\n"
    },
    {
      "commit": "bc2034be62dfd29eaa545fbf33a75702dcd90bfb",
      "tree": "6208d9ee8f9d177855446f53d4a1ab53c1140fbd",
      "parents": [
        "8bebf83c5a89529f76480787043efd080bbbc513"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Aug 07 21:53:46 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Aug 13 14:38:57 2025 -0700"
      },
      "message": "Enable/disable the accounts tracking preload mechanism\n\nThe default behaviour of preloading all the users in All-Users into the\ntracking cache can now be disabled by configuration.\n\nThis enables a more accurate tracking of the real active users and avoid\nthe massive preload of the entire All-Users\u0027 accounts into the cache.\n\nChange-Id: Ibf6d09f7a6c772f60e48f5c75ad0b2e587f8e681\n"
    },
    {
      "commit": "8bebf83c5a89529f76480787043efd080bbbc513",
      "tree": "a19371da6dd4444a90d1893eae9f2425d78e5a41",
      "parents": [
        "2a562ac1b074793625564c5b01390d9f81cfd9c6"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Aug 07 20:18:23 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Aug 13 14:37:27 2025 -0700"
      },
      "message": "Introduce the list SSH command on accounts tracking\n\nEnable the listing of the content of the accounts tracking persistent\ncache, so that the Gerrit admin can directly display and export the full\nlist of accounts and when they connected to Gerrit.\n\nChange-Id: I6f5e51ca2bbd54d4d0d3b0a09ff9196a0e7c70c8\n"
    },
    {
      "commit": "2a562ac1b074793625564c5b01390d9f81cfd9c6",
      "tree": "0a36da089d32e56581c8a43f144757bbd954ed25",
      "parents": [
        "3226f14a5393273396c3d78f153ca03c1b393cab"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Aug 07 08:57:09 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Aug 07 14:16:54 2025 -0700"
      },
      "message": "Consider the current logged-in user for active users tracking\n\nBefore this change, the user tracked for freshening the set\nof active users was the one checked for group ownership, which\nmay or may not be the user actively using Gerrit.\n\nA user admin scanning the permissions of all users could therefore\ntrigger implicitly the including of all accounts as active, which\nwould not be the case.\n\nFetch the current thread active user and use that account id\nfor tracking the activity, rather than the account passed as\nparamemter for membership check.\n\nChange-Id: Id38e0bb5fd6f41effde9c76055c2f1daeab3a983\n"
    },
    {
      "commit": "3226f14a5393273396c3d78f153ca03c1b393cab",
      "tree": "0f560166d48ed955629ffce8e1fc33805783ebf1",
      "parents": [
        "3d3dff86eea7ac136bb47aa34b6f0201cdabd06e"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Aug 07 08:53:35 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Aug 07 14:16:42 2025 -0700"
      },
      "message": "Improve logging when the auto-disable mechanism is ignoring accounts\n\nBefore this change, accounts auto-disable mechanism was silently\nignored and account entries removed from cache.\n\nInclude an explicit logging tracing the account-id that is ignored and do\nnot remove it from cache anymore.\n\nChange-Id: I19e75dad3d74ebf161c472a85894fa1ccadecbc4\n"
    },
    {
      "commit": "3d3dff86eea7ac136bb47aa34b6f0201cdabd06e",
      "tree": "b665a88206a84710709c5abfd53c165514f0f0c2",
      "parents": [
        "bf541b492857233256d6615270a5e2668292bf64"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Aug 07 08:07:09 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Aug 07 14:16:02 2025 -0700"
      },
      "message": "Allow to exclude group of accounts from the auto-disable script\n\nIntroduce the ability to add a group of accounts in the exclusion list\nof the track-and-disable-inactive-users utility.\n\nThis allows to automatically exclude the administrators of Gerrit from\nbeing disabled accidentally and also other users that are for sure\nactive even though they have not connected recently.\n\nChange-Id: I9b75d75d5be076125ef2669d4e14573a6c4735d3\n"
    },
    {
      "commit": "bf541b492857233256d6615270a5e2668292bf64",
      "tree": "4d3e4e705a817d75f9603a65c0076e84cad9c200",
      "parents": [
        "3eab64a8b9826fe929b0a7441cf1919f6379330b"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jul 16 22:58:41 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jul 16 23:30:20 2025 +0100"
      },
      "message": "Add globalrefdb show-ref command\n\nChange-Id: I0451f9da00e5149ca3b976923cd72f0bc0beca57\n"
    },
    {
      "commit": "3eab64a8b9826fe929b0a7441cf1919f6379330b",
      "tree": "851f4040fef74f937ecf1bf55c7df0bfe27b2cb5",
      "parents": [
        "e0be02aace3a53874fda8e8370eaa28dd5386d5c"
      ],
      "author": {
        "name": "Diego Zambelli Sessona",
        "email": "diego.sessona@gmail.com",
        "time": "Fri Jan 10 13:55:56 2025 +0100"
      },
      "committer": {
        "name": "Diego Zambelli Sessona",
        "email": "diego.sessona@gmail.com",
        "time": "Wed Jan 15 10:50:56 2025 +0100"
      },
      "message": "Add `is_gc_running_per_project_\u003crepo_name\u003e` metric\n\nIntroduce a Gerrit metric to track if a GC process is running\nfor specific projects. The metric checks for the presence of a\n`gc.pid` file in the repository and ensures the file is not older\nthan the configured staleness period.\n\nBy default, the staleness period is 12 hours and can be customized\nusing the configuration:\n`plugins.repo-repack-tracker.considerGcStaleAfter`.\n\nChange-Id: Ib19541280a913eece34b96975412673c932a7370\n"
    },
    {
      "commit": "e0be02aace3a53874fda8e8370eaa28dd5386d5c",
      "tree": "275c86858e9c83dccec07df2068d86f490938b2f",
      "parents": [
        "3d2e87c71b59ef887f377fd49b4634d701bba07a"
      ],
      "author": {
        "name": "Diego Zambelli Sessona",
        "email": "diego.sessona@gmail.com",
        "time": "Tue Dec 03 21:45:11 2024 +0100"
      },
      "committer": {
        "name": "Diego Zambelli Sessona",
        "email": "diego.sessona@gmail.com",
        "time": "Wed Jan 15 10:42:43 2025 +0100"
      },
      "message": "Added plugin repo-repack-tracker\n\nAdded a groovy script plugin to check if a repack process is running\nfor a list of projects, exposing as a Gerrit metric for each project.\n\nChange-Id: I940777e5503b05d0c070bed9fd72b72402999b31\n"
    },
    {
      "commit": "3d2e87c71b59ef887f377fd49b4634d701bba07a",
      "tree": "3c00a54fad96956583a9a1de7783232eab4562b4",
      "parents": [
        "563d6bf2ab3106c8e8be8bd59823d0c0c51bb619"
      ],
      "author": {
        "name": "Diego Zambelli Sessona",
        "email": "diego.sessona@gmail.com",
        "time": "Wed Oct 02 17:19:07 2024 +0200"
      },
      "committer": {
        "name": "Diego Zambelli Sessona",
        "email": "diego.sessona@gmail.com",
        "time": "Fri Oct 25 10:02:59 2024 +0200"
      },
      "message": "Add `active_users` metric\n\nThis change exposes a new metric called `active_users`.\nThis metric indicates the number of active users; a user is considered\nactive when its inactivity period is not greater than the value\ndefined in the `cache.\"@PLUGIN@.users_cache\".maxAge`.\n\nThe metric uses the `users_cache` of the\ntrack-and-disable-inactive-users-1.3.groovy plugin to allow exposure\nof this value to the various monitoring and observability stacks.\n\nBug: Issue 370937461\nChange-Id: Iaa1a78a7435f80508eeeceb6df762f6c789a0bdc\n"
    },
    {
      "commit": "563d6bf2ab3106c8e8be8bd59823d0c0c51bb619",
      "tree": "5a1d107cc8f701890dedabcd4630a5f367671d61",
      "parents": [
        "16c138fe71f5b871becced4a7e7ccd31d81e2738"
      ],
      "author": {
        "name": "Diego Zambelli Sessona",
        "email": "diego.sessona@gmail.com",
        "time": "Wed Oct 02 16:44:01 2024 +0200"
      },
      "committer": {
        "name": "Diego Zambelli Sessona",
        "email": "diego.sessona@gmail.com",
        "time": "Thu Oct 17 09:37:40 2024 +0200"
      },
      "message": "Fix `unexpected token: \u0026\u0026` and missing parenthesis\n\nUpon loading of the plugin Gerrit was throwing an excepion because the\n\u0026\u0026 operator is not handled correctly in some cases when it starts\na new line. [1]\n\nThe logic to find all active accounts also has been fixed by adding\na parenthesis that was missing when checking if the user `isServiceUser`\nbefore adding it to the internal cache.\n\nThis prevented the loading of the plugin, introduced in change 424058.\n\n[1]: https://issues.apache.org/jira/browse/GROOVY-7218\n\nBug: Issue 370792796\nChange-Id: I88f2cf40aa6658c0a91e35f21bbadd49ffcddcfe\n"
    },
    {
      "commit": "16c138fe71f5b871becced4a7e7ccd31d81e2738",
      "tree": "5757e5e55348730d7dcd43286ee292e7a27ea4ba",
      "parents": [
        "c7f1d37f686d8e80f84fcae6195b1e8e8ba50a4b"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Jul 07 23:39:38 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jul 11 20:53:59 2024 +0000"
      },
      "message": "Adapt to the latest replication API on master\n\nThe Gerrit master branch has a separate artifacts\nfor replication and its API. Adapt the script for decoupling\nfrom the replication plugin internals and just rely on its\nexternally published API and classes.\n\nChange-Id: I60fd50ee9fef0f1fb54eaf7747ad0cd7fa835ad7\n"
    },
    {
      "commit": "c7f1d37f686d8e80f84fcae6195b1e8e8ba50a4b",
      "tree": "a3addf3a09c70546f634b30cad9304a34b82f997",
      "parents": [
        "42e02202a8e1f91ce3f047ee71180f3dc59ee42c"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed May 22 10:43:56 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed May 22 11:06:53 2024 +0100"
      },
      "message": "Remove stale packed-refs.lock files\n\nWhen a packed-refs.lock is stale for a long period of\ntime (configurable) then do not just display a warning\nand metric but also remove the lock file from the filesystem.\n\nChange-Id: Icfb24e964be5659362d4d1cde52f6042ca4a8b82\n"
    },
    {
      "commit": "42e02202a8e1f91ce3f047ee71180f3dc59ee42c",
      "tree": "28d34a870020a8caa2d17e26f32619356f4a6fd7",
      "parents": [
        "2cd74af05f0de8df009c65f70b03f2967d1f0610",
        "0f11c4b17da4e147cba595e2a3fe06d5202b6175"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue May 14 14:00:18 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 14 14:00:18 2024 +0000"
      },
      "message": "Merge changes I92dad4a4,Ia09d000c,I34974d84,I526d474a,I5827288d\n\n* changes:\n  Introduce `ignoreAccountId` setting\n  Do not automatically disable non-interactive users\n  TrackActive: Automatically disable inactive accounts\n  Rename track-active-users to track-and-disable-inactive-users\n  Track user activity in a persistent cache\n"
    },
    {
      "commit": "2cd74af05f0de8df009c65f70b03f2967d1f0610",
      "tree": "8fcabdc1dc61a436078dbba0a6587ddf677ea83c",
      "parents": [
        "ae03797b938ee9aabe84d1a298ae544e18f827b3"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Thu Jan 25 14:21:09 2024 -0800"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue May 14 13:56:27 2024 +0000"
      },
      "message": "File name needs version\n\nWithout it it\u0027s not loaded correctly, i.e. \"Gerrit print Loaded plugin\nstale-packed, version refs\" while starting up\n\nChange-Id: I92668d48905486279e014e82935ea0b5c178768f\n"
    },
    {
      "commit": "0f11c4b17da4e147cba595e2a3fe06d5202b6175",
      "tree": "9b176053bfb54a495228d58ef4f1d05c985c14e4",
      "parents": [
        "66a702bba89f2eae2b24a4422bf46c006f94b302"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon May 06 17:08:55 2024 +0200"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Mon May 13 23:18:57 2024 +0100"
      },
      "message": "Introduce `ignoreAccountId` setting\n\nAllow the Gerrit admin to specify a list of accounts that should not be\nautomatically disabled.\n\nThis prevents locking important Gerrit system accounts like the main\nadministrator.\n\nBug: Issue 338071091\nChange-Id: I92dad4a4302c1ac762e74510c59c93f3aab92059\n"
    },
    {
      "commit": "66a702bba89f2eae2b24a4422bf46c006f94b302",
      "tree": "470b2a2cb5fd4a54334180d85d0a96b48283005f",
      "parents": [
        "1d9c579b5ce86adcd2e00476db881dcfaf65f12a"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed May 01 22:26:57 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Mon May 13 23:18:56 2024 +0100"
      },
      "message": "Do not automatically disable non-interactive users\n\nThe \"Service Accounts\" (aka. non-interactive users) should not be\nautomatically disabled by the script. Those accounts are used for CI\nand other integrations and may be dormant for some time, we should not\nincrease Gerrit Admin workload by automatically disabling them. This\ncould also lead to frustration when a \"paused\" service is back online\nbut it doesn\u0027t work because their user was blocked.\n\nAdditionally, bumps the script version number to 1.1, which results in\nfile rename.\n\nBug: Issue 338071090\nChange-Id: Ia09d000c72be062b8a00fa634e3ef75c85aab3bc\n"
    },
    {
      "commit": "1d9c579b5ce86adcd2e00476db881dcfaf65f12a",
      "tree": "9a8d855f7b65e80436cfae55ac17633357946fd1",
      "parents": [
        "80a280a847b9981a58c7b9c452568d474f4f30a1"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Tue Mar 05 14:23:56 2024 +0000"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Mon May 13 23:17:57 2024 +0100"
      },
      "message": "TrackActive: Automatically disable inactive accounts\n\nBuild on top of the `track-active-users-1.0` (already renamed to\n`track-and-disable-inactive-users-1.0.groovy) script and add the\npossibility of automatically disabling inactive accounts after\na preconfigured period.\n\nThe new functionality will mark inactive accounts that are not present\nin `track-and-disable-inactive.users_cache`. The inactivity period can\nbe controlled by the `users_cache` `maxAge` configuration option.\n\nTo automatically disable users that are removed from `users_cache` we\nregister a `CacheRemovalListener` that will disable accounts as they\nare evicted. Additionally, in case of explicit removal, the entry will\nbe re-added. This is to prevent full instance lockdown when\n`users_cache` is flushed using the SSH command.\n\nTo test this feature, copy the\n`admin/track-and-disable-inactive-users-1.0.groovy` into\n`$gerrit_site/plugins` and add the following configuration to\n`$gerrit_site/etc/gerrit.config`:\n\n[cache \"track-and-disable-inactive-users.users_cache\"]\n  maxAge \u003d 1min\n\nThe `CacheRemovalListener` only fires, when the cache is updated. To\nsee any evictions, you would need at least two accounts in Gerrit and\nmake sure that one of them is constantly being used (eg. reloading the\nweb page). Eventually, you should see a log message saying that the\nother account was disabled.\n\nBug: Issue: 327730872\nChange-Id: I34974d842d6f73784d43932b587a6461eaf2ffae\n"
    },
    {
      "commit": "80a280a847b9981a58c7b9c452568d474f4f30a1",
      "tree": "58877893a34e455064e4936a9ca664d4ac69edf1",
      "parents": [
        "4fbfede24b238d4c1b577c06a431cff059f08866"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Apr 17 19:02:09 2024 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 04 18:45:28 2024 +0100"
      },
      "message": "Rename track-active-users to track-and-disable-inactive-users\n\nRemame `track-active-users.groovy` script to\n`track-and-disable-inactive-users.groovy` in anticipation of adding\ninactive users auto disabling capacity to the script.\n\nChange-Id: I526d474aa3a1f47a50f589131b481c79fda5e923\n"
    },
    {
      "commit": "4fbfede24b238d4c1b577c06a431cff059f08866",
      "tree": "a7f81058527bbce3735b4c138fe68bdf4163ca69",
      "parents": [
        "896e18e0f253450844c33eac00cf8210a0da33fb"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Fri Mar 01 17:57:05 2024 +0000"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat May 04 18:41:38 2024 +0100"
      },
      "message": "Track user activity in a persistent cache\n\nAdd a new Groovy script `track-active-users-1.0.groovy` to track user\nactivities by entering their `id` and timestamp into\n`track-active-users_cache` persistent cache.\n\nThe tracking is implemented as a side effect on a new\n`GroupBackend` implementation that handles all group `UUID`\u0027s. This way\nour backend `membershipsOf(CurrentUser)` method will be called whenever\nany group membership resolution is done. This gives us a single\nplace to get the user activities for all supported entry points (UI,\nREST, SSH, git-over-http). The impact of on the user group resolution\nshould be neglectable and should be equal to the performance of the\npersistent cache `get()` and `put()` calls. The user activity timestamp\nis stored with one-minute precision.\n\nBear in mind, that in the case of git-over-http access to public\nrepositories, even when the user provides authentication details, Gerrit\nwill not consult any of the `GroupBackend`\u0027s. This means that clones and\nfetches of publicly visible repositories will not be counted as user\nactivity.\n\nBug: Issue Issue 327730871\nChange-Id: I5827288d40bba4c6b1e7b20d9aae822db8eabc29\n"
    },
    {
      "commit": "ae03797b938ee9aabe84d1a298ae544e18f827b3",
      "tree": "815c04a41a20604b859929916799693ca83fda53",
      "parents": [
        "896e18e0f253450844c33eac00cf8210a0da33fb"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Apr 19 20:43:09 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Apr 19 20:43:09 2024 +0100"
      },
      "message": "Ignore refs/multi-site/version in globalrefdb validation\n\nChange-Id: Ifa0dcdc6c7f03b9af7969775dc09b179eca96f7f\n"
    },
    {
      "commit": "896e18e0f253450844c33eac00cf8210a0da33fb",
      "tree": "99578da2273daad83376f9944026171dab3fecf5",
      "parents": [
        "a5df739ed84b1624310fd691a276bde85ac96262"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Apr 15 23:23:28 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Apr 15 23:23:28 2024 +0100"
      },
      "message": "Adapt localrefdb script to Gerrit v3.10.0\n\nThe PluginCommandModule has a different constructor in Gerrit v3.10\ntherefore the command module fo the localrefdb script needs amending.\n\nChange-Id: Ia8d445f38b0085eeb27304f70a7c202201f37e9a\n"
    },
    {
      "commit": "a5df739ed84b1624310fd691a276bde85ac96262",
      "tree": "a5bbb64111a8d6b5dd90044e192d9fed2be6e371",
      "parents": [
        "9da6f71b93def8144061a976738d8a2f543e0e17"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Mar 06 08:53:30 2024 +0000"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Mar 06 08:53:30 2024 +0000"
      },
      "message": "Fix import formatting in replication-config-from-git\n\nRemove identation from some of the imports in\n`replication-config-from-git` file.\n\nChange-Id: I997eba5084edd64e2148d57a85b3c579b251cde6\n"
    },
    {
      "commit": "9da6f71b93def8144061a976738d8a2f543e0e17",
      "tree": "9d4f4784e416b50276c9f03dda93be8f55668636",
      "parents": [
        "fbe945ab2ad4d0c6ff94d7394dd191ee65169cd5"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Fri Mar 01 10:12:49 2024 +0000"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Mar 06 08:51:54 2024 +0000"
      },
      "message": "Implement ReplicationConfigOverrides.update()\n\nThe newly added `update(Config)` method to `ReplicationConfigOverrides`\nallows us to update the replication configuration programmatically.\n\nAdded implementation stores remotes definitions in the \"fanout\" fashion\nin the `refs/meta/replication` branch of `All-Projects` repository.\nOther configuration options will be stored in the `replication.config`\nfile in the root of the branch.\n\nIf no configuration or branch is present they will be created by the\nscript.\n\nChange-Id: Ifa744342536fc029a220833f8f59c9a15954ac65\n"
    },
    {
      "commit": "fbe945ab2ad4d0c6ff94d7394dd191ee65169cd5",
      "tree": "39f412f50daef6e9b0fb6473a866a014bb48043b",
      "parents": [
        "f4be32e8106235dc7e008c234cf67ff188b1ac57",
        "854519674e3f0ebb4e3b783b34386b13a7ae7e80"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jan 24 15:34:02 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Jan 24 15:34:02 2024 +0000"
      },
      "message": "Merge \"Custom replication config resource provider from repository\""
    },
    {
      "commit": "f4be32e8106235dc7e008c234cf67ff188b1ac57",
      "tree": "9768d1cf9db4b3043b0b75fb3b39df8f8f9f63c8",
      "parents": [
        "00337cc73f09684bbbda8becce5fd0a4f4e40af0",
        "ebb7ef7c67afc94906094cc0f68d673989e183b6"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Jan 23 18:38:19 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Jan 23 18:38:19 2024 +0000"
      },
      "message": "Merge \"Contribute packed-refs.lock staleness checker\""
    },
    {
      "commit": "ebb7ef7c67afc94906094cc0f68d673989e183b6",
      "tree": "6258ca946bdce16d5d26ca7f1f9f6b3401418f1a",
      "parents": [
        "fd21061500029e6386da2bc5716fe2a808782fc1"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Nov 18 01:24:31 2023 +0000"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Jan 23 06:04:17 2024 -0800"
      },
      "message": "Contribute packed-refs.lock staleness checker\n\nAdd a general utility that exposes the age of the packed-refs.lock\nfile as a metric\n\nThe presence of $GIT_DIR/packed-refs.lock prevents multiple\nthreads or processes from updating the packed-refs file\nconcurrently. However, if one of the threads or processes\ndies in the middle of updating the refs, the repository\npacked-refs are locked forever.\n\nThe list of projects prefixes, the frequency of the checks\nand the max age for a lock file for being considered stale is\nconfigurable as plugin setting in gerrit.config.\n\nChange-Id: Ie8714f28e1191b1ef255d1aeffa1ca6a73a6a959\n"
    },
    {
      "commit": "854519674e3f0ebb4e3b783b34386b13a7ae7e80",
      "tree": "b3a26f58cefa874bb6202dec2cf391685174656c",
      "parents": [
        "00337cc73f09684bbbda8becce5fd0a4f4e40af0"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Tue Jan 23 13:06:43 2024 +0000"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Tue Jan 23 13:06:43 2024 +0000"
      },
      "message": "Custom replication config resource provider from repository\n\nFetch the override replication config from the All-Projects\nrepository.\n\nAlso-By: Luca Milanesio \u003cluca.milanesio@gmail.com\u003e\nChange-Id: I8fd15187fe17ce280d777374e91b2e48604aa43e\n"
    },
    {
      "commit": "00337cc73f09684bbbda8becce5fd0a4f4e40af0",
      "tree": "98d931a768380c38c9020519cfb9d787aa3963cc",
      "parents": [
        "cfa3637ffd1df41e3cedc64fde19561634a41720",
        "d3e52c155470572dd802ea271d77443693752feb"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Fri Dec 22 08:41:32 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 22 08:41:32 2023 +0000"
      },
      "message": "Merge \"Correctly filter out user-edit refs\""
    },
    {
      "commit": "cfa3637ffd1df41e3cedc64fde19561634a41720",
      "tree": "381d3e803bb79f602f6e97524baaa517431d4146",
      "parents": [
        "fd21061500029e6386da2bc5716fe2a808782fc1",
        "098e2e20df53be7371025ef4f1e35d4270806ab4"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Fri Dec 22 08:41:05 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Dec 22 08:41:05 2023 +0000"
      },
      "message": "Merge \"Document latest functionalities\""
    },
    {
      "commit": "fd21061500029e6386da2bc5716fe2a808782fc1",
      "tree": "a51e9c5e9aa293572f9ba2f184ad4607dfca3e82",
      "parents": [
        "285aa7ba101c7caea81433e36bf1a34d4cd8296b",
        "be3fbabd57d0682c85402b876cecdd2733b03d5a"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Tue Oct 17 10:58:19 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Oct 17 10:58:19 2023 +0000"
      },
      "message": "Merge \"Add certificates expiration date checker\""
    },
    {
      "commit": "be3fbabd57d0682c85402b876cecdd2733b03d5a",
      "tree": "6371e715578efd8d3e893c0dfa2ce488f98eac79",
      "parents": [
        "e04925048e4f8ee568ae0ab0fafd7edde6a34500"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Fri Aug 18 14:50:58 2023 +0200"
      },
      "committer": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Tue Oct 17 12:24:49 2023 +0200"
      },
      "message": "Add certificates expiration date checker\n\nAdd groovy script plugin to check SSL certificates\nexpiry date and expose it as a Gerrit metrics.\n\nBug: Issue 296739713\nChange-Id: Ica3f78fd0b1ff31d53057e01d8c9b1a24604eec5\n"
    },
    {
      "commit": "285aa7ba101c7caea81433e36bf1a34d4cd8296b",
      "tree": "c2dd3c2cf011379f8989919d9ddebcd989af66a7",
      "parents": [
        "f343fadd00ac6d2d319c22d523eb18efbf9dc8b3"
      ],
      "author": {
        "name": "Christoforos Miliotis",
        "email": "christoforos.miliotis.dev@gmail.com",
        "time": "Tue Oct 10 18:04:53 2023 +0100"
      },
      "committer": {
        "name": "Christoforos Miliotis",
        "email": "christoforos.miliotis.dev@gmail.com",
        "time": "Thu Oct 12 16:32:00 2023 +0000"
      },
      "message": "Remove unused import\n\nChange-Id: I222130bb00877a0b043fa5c9d422241e244ca951\n"
    },
    {
      "commit": "f343fadd00ac6d2d319c22d523eb18efbf9dc8b3",
      "tree": "720c6d5f92a04b985c07b0eec727ab1211ad369a",
      "parents": [
        "146102d011ab7a6f98bc5a873480e0905de2a5fd"
      ],
      "author": {
        "name": "Christoforos Miliotis",
        "email": "christoforos.miliotis.dev@gmail.com",
        "time": "Tue Oct 10 18:00:08 2023 +0100"
      },
      "committer": {
        "name": "Christoforos Miliotis",
        "email": "christoforos.miliotis.dev@gmail.com",
        "time": "Thu Oct 12 16:31:44 2023 +0000"
      },
      "message": "Remove redundant injected dependency\n\nChange-Id: Ib8f9169e1eeeae3f24ffbd83f349c722f92b9319\n"
    },
    {
      "commit": "146102d011ab7a6f98bc5a873480e0905de2a5fd",
      "tree": "9d1008342629a5a7a9b8538bc42f9450f0c619c7",
      "parents": [
        "99e87124f354eb437c03b8ff0095a68f4bc1dc77"
      ],
      "author": {
        "name": "Christoforos Miliotis",
        "email": "christoforos.miliotis.dev@gmail.com",
        "time": "Tue Oct 10 17:52:39 2023 +0100"
      },
      "committer": {
        "name": "Christoforos Miliotis",
        "email": "christoforos.miliotis.dev@gmail.com",
        "time": "Thu Oct 12 17:28:30 2023 +0100"
      },
      "message": "Adapt warm-cache script for gerrit 3.7\n\nThe script is pretty old, looks like it was developed sometime in 2016\nbased on Gerrit 2.14 (?). As such when running it in Gerrit 3.7 some\nclasses are missing and therefore the commands will fail.\nChange the script in a way that compiles with gerrit 3.7 version\nand all exposed commands run successfully. Replace ReviewDB operations\nwith its successor where possible.\n\nChange-Id: I594a32d7e4eff6dabf1c761b6dcb9342508812f9\n"
    },
    {
      "commit": "99e87124f354eb437c03b8ff0095a68f4bc1dc77",
      "tree": "0c38fe72dbd8c37d5481089d79cb8f87cd54387c",
      "parents": [
        "e04925048e4f8ee568ae0ab0fafd7edde6a34500"
      ],
      "author": {
        "name": "Christoforos Miliotis",
        "email": "christoforos.miliotis.dev@gmail.com",
        "time": "Tue Oct 10 17:52:01 2023 +0100"
      },
      "committer": {
        "name": "Christoforos Miliotis",
        "email": "christoforos.miliotis.dev@gmail.com",
        "time": "Tue Oct 10 17:52:01 2023 +0100"
      },
      "message": "add gitignore file\n\nChange-Id: Iec743cde1242bc28b21225e52251d8553a551723\n"
    },
    {
      "commit": "d3e52c155470572dd802ea271d77443693752feb",
      "tree": "c4587ef1eba44f65b13135868abc2e1fc11f44bd",
      "parents": [
        "098e2e20df53be7371025ef4f1e35d4270806ab4"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Wed Jul 26 10:44:29 2023 -0700"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Wed Jul 26 22:01:54 2023 +0000"
      },
      "message": "Correctly filter out user-edit refs\n\nstartsWith doesn\u0027t want a regex, rather just a string.\n\nChange-Id: I4b66e501cf6dd3031c09f4007d4553426f593b33\n"
    },
    {
      "commit": "098e2e20df53be7371025ef4f1e35d4270806ab4",
      "tree": "add11a1d5db193743e112d8782a5c0efd90346a4",
      "parents": [
        "e04925048e4f8ee568ae0ab0fafd7edde6a34500"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Jul 25 14:56:05 2023 -0700"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Wed Jul 26 14:51:58 2023 -0700"
      },
      "message": "Document latest functionalities\n\nglobal-refdb update-ref and localrefdb had not been documented.\n\nChange-Id: I6c0cf34f921a0956518c2666ec43dd61644c4cd9\n"
    },
    {
      "commit": "e04925048e4f8ee568ae0ab0fafd7edde6a34500",
      "tree": "b1d8e3efaa636cf5ce97f449ea35c69c77a31a44",
      "parents": [
        "a11cc04a5aed6fd5ffd727986bc187545c28b0a5",
        "1ee7c5b21e7a9dd6db8b0ebac8bb11f9ecdebbb4"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Jul 21 22:31:06 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 21 22:31:06 2023 +0000"
      },
      "message": "Merge \"Add metric for sum of SHA1s\""
    },
    {
      "commit": "1ee7c5b21e7a9dd6db8b0ebac8bb11f9ecdebbb4",
      "tree": "8071bd583e4e423192dc034c6e9eec481a43a86a",
      "parents": [
        "74875f81b1de6c0163a53db2d9e85aeb8eb0c5b6"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Thu Jul 06 20:47:48 2023 -0700"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Fri Jul 21 15:29:28 2023 -0700"
      },
      "message": "Add metric for sum of SHA1s\n\nIt is not possible to have a metric with a non-numeric value, so we\ncalculate the numeric representation of the SHA1. However, SHA1s are\ntoo big to fit with a numeric data type, so a truncated version of the\nnumeric value is calculated.\n\nThe numerical calculation was taken from [1].\n\n[1] http://www.java2s.com/example/java-utility-method/sha1/sha1hashint-string-text-d6c0e.html\n\nChange-Id: I09bb9bda8f6e5dc655aa5b9db9bee120cc47ce51\n"
    },
    {
      "commit": "a11cc04a5aed6fd5ffd727986bc187545c28b0a5",
      "tree": "ce2b2e636d2ecb224d4503195394d573872cad7f",
      "parents": [
        "8ece43483be856ba430af8ba00d8ad412465d0b7",
        "74875f81b1de6c0163a53db2d9e85aeb8eb0c5b6"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Jul 21 22:21:22 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jul 21 22:21:22 2023 +0000"
      },
      "message": "Merge \"New script utility to extract local-refdb metrics\""
    },
    {
      "commit": "74875f81b1de6c0163a53db2d9e85aeb8eb0c5b6",
      "tree": "687815756d475bf824ecb99d2b855af4ac76c399",
      "parents": [
        "55dba57a35ad9340cd1633ae792281481fa00852"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jun 29 23:21:50 2023 +0100"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Fri Jul 21 15:18:25 2023 -0700"
      },
      "message": "New script utility to extract local-refdb metrics\n\nWhen working in a multi-node setup, having local metrics\nto compare the status of repositories across nodes is paramount\nfor getting alerts on potential misalignments.\n\nChange-Id: Icd4030f3561f1b9eb0500575d85499159e9faf3f\n"
    },
    {
      "commit": "8ece43483be856ba430af8ba00d8ad412465d0b7",
      "tree": "45921878dc0aec44c348ff56490f106843c02a74",
      "parents": [
        "55dba57a35ad9340cd1633ae792281481fa00852"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Thu Jun 22 19:24:41 2023 +0100"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Thu Jun 22 21:14:34 2023 +0100"
      },
      "message": "Optimize script to only check mutable refs\n\nChange-Id: I73800425cf49371167fc057441e83fa5ab6c88aa\n"
    },
    {
      "commit": "55dba57a35ad9340cd1633ae792281481fa00852",
      "tree": "1f26a4bc83a0b0738490eed831abb8d3826bb7e0",
      "parents": [
        "38b550a4b8af8297b23d88388f790210eee3ab17"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jun 15 23:57:22 2023 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Jun 16 22:01:33 2023 +0000"
      },
      "message": "Introduce globalrefdb update-ref command\n\nAllow the Gerrit admin to update refs on the global-refdb\nin the same way he can update refs on the local one, using\na command similar to \u0027git update-ref\u0027.\n\nThis allows to resolve split-brains situations with a\nsimple command line, without having to connect directly\nto the global-refdb implementation console backend.\n\nChange-Id: Ice02d4faa08ac3c275eb241d3a8249e46bede516\n"
    },
    {
      "commit": "38b550a4b8af8297b23d88388f790210eee3ab17",
      "tree": "9f4ad500f61c17402de03964df3942c2e9adfb99",
      "parents": [
        "df29b24f19cf5fab6847b994c1d33e6b59a1fc4d"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 06 21:35:16 2023 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jun 14 12:43:50 2023 +0000"
      },
      "message": "Display project name at the end of refdb check\n\nChange-Id: I68e3141a3eca698cc784fcde491c6c2e9201fc7e\n"
    },
    {
      "commit": "df29b24f19cf5fab6847b994c1d33e6b59a1fc4d",
      "tree": "582a5c2b0167e06aa863bb3c9ea93906bed1930e",
      "parents": [
        "1045661f25553416164e042cd69593e08e937b94"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 06 21:22:07 2023 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jun 14 12:43:18 2023 +0000"
      },
      "message": "Validate project refs vs. global-refdb in parallel\n\nChange-Id: I3ddc8c40a6fa8a4e8151294dad95881eee2d6d37\n"
    },
    {
      "commit": "1045661f25553416164e042cd69593e08e937b94",
      "tree": "a75afebbbd324d4751097e2dfe42579c71bc01b0",
      "parents": [
        "d57b02bc107d26c8806c02a9857fff7ad3c8fbf5"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 06 21:04:43 2023 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jun 14 12:42:59 2023 +0000"
      },
      "message": "Fix the global up-to-date status of a project vs global-refdb\n\nChange-Id: I5259093e43c2a5c2d2814a30a73727ce48611f91\n"
    },
    {
      "commit": "d57b02bc107d26c8806c02a9857fff7ad3c8fbf5",
      "tree": "b89219b74d9364e5ae333ffb1567ab3810edf8f4",
      "parents": [
        "dd017b8e77622fdc17323d5bcf7852407d636721"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 06 15:27:20 2023 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jun 14 13:36:41 2023 +0100"
      },
      "message": "Display globalrefdb check progress over SSH\n\nDisplay some percentage progress and ETA when checking\nthe project\u0027s refs consistency with the globalrefdb.\n\nThis is mainly done for preventing the SSH channel to\nexit for timeout.\n\nChange-Id: Ic053b6d669255f598d30d445b7b8a5a47f871e62\n"
    },
    {
      "commit": "dd017b8e77622fdc17323d5bcf7852407d636721",
      "tree": "aa9d0a411b8c1dd46d90cf4b5b7c8ed4876a819d",
      "parents": [
        "c24049262c4bb669ae11cd7e473358df38c04f1c"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jun 01 23:57:55 2023 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Jun 02 08:09:11 2023 +0100"
      },
      "message": "Add Gerrit multi-primary utilities\n\nChange-Id: I99d58dd6a1bf14edb8456b8454f287b71287e0a4\n"
    },
    {
      "commit": "c24049262c4bb669ae11cd7e473358df38c04f1c",
      "tree": "122fed7ecc22ece7ce853ce798906e8599165a11",
      "parents": [
        "c9a7ced5ffe2168f7f6813dddf7824acef1af303"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed May 23 15:53:38 2018 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed May 23 15:53:38 2018 +0100"
      },
      "message": "Remove reference to accounts_byemail cache\n\nGerrit does not have an accounts_byemail cache anymore\nsince v2.15.\n\nThere is no value in trying to warm an inexistent cache other\nthan making this script failing to load.\n\nChange-Id: Ib3575492a5ae9b09620d7b5541541583f47267b9\n"
    },
    {
      "commit": "c9a7ced5ffe2168f7f6813dddf7824acef1af303",
      "tree": "4955efdf8c5df059283bdf68ed26d31a1d288e27",
      "parents": [
        "d5c5b208030df86cf01f48176db6d3b4bf66028f",
        "f3e746d1747beb99f891e07d2462fba6d0027a1d"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Jul 18 14:23:56 2016 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Jul 18 14:23:56 2016 +0000"
      },
      "message": "Merge \"update documentation for reindexer command\""
    },
    {
      "commit": "f3e746d1747beb99f891e07d2462fba6d0027a1d",
      "tree": "fb4a9852da1335635c5a8e3d8730bfa781610fa3",
      "parents": [
        "bc085fe6982ba1ecf59581ecec4a80532ab91653"
      ],
      "author": {
        "name": "Khai Do",
        "email": "zaro0508@gmail.com",
        "time": "Fri May 20 13:06:31 2016 -0700"
      },
      "committer": {
        "name": "Khai Do",
        "email": "zaro0508@gmail.com",
        "time": "Mon Jun 20 22:34:12 2016 -0700"
      },
      "message": "update documentation for reindexer command\n\nChange-Id: I6b29d2281d3c57bf7473b5f45237dd283b4fd3a4\n"
    },
    {
      "commit": "d5c5b208030df86cf01f48176db6d3b4bf66028f",
      "tree": "9345122b9dec37c0aae2793bd43381ee053c3e44",
      "parents": [
        "9a10a2b24f4c5e7fa86eea0414e2bfb4b5a36d68"
      ],
      "author": {
        "name": "Khai Do",
        "email": "zaro0508@gmail.com",
        "time": "Fri May 20 10:02:29 2016 -0700"
      },
      "committer": {
        "name": "Khai Do",
        "email": "zaro0508@gmail.com",
        "time": "Fri May 20 14:38:26 2016 -0700"
      },
      "message": "restrict access to admin scripts\n\nOnly allow users in the Administrator group to run these commands\n\nChange-Id: Id3b2fc998f2a985e588286b6b3bbfa7e8f5bb411\n"
    },
    {
      "commit": "9a10a2b24f4c5e7fa86eea0414e2bfb4b5a36d68",
      "tree": "2aa0834bab41856f75ebd847ae9be6ee1b64d5cf",
      "parents": [
        "bc085fe6982ba1ecf59581ecec4a80532ab91653"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Mar 09 22:10:48 2016 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri May 20 17:11:19 2016 +0000"
      },
      "message": "Implement group backends cache warm-up\n\nGroup backends typically come with their own cache for saving\npreciouses roundtrips to fetch groups from remote systems.\n\nGroup lookup in LDAP may take a few seconds and on GitHub may even\ncause a blockage of API calls because of traffic overload.\n\nWarming up group caches from backends avoid floods of calls and threads\naccumulating when the server needs to be restarted during peak hours.\n\nChange-Id: Ifefcee686e18ecdb812f3eed614ffd5672d3db53\n"
    },
    {
      "commit": "bc085fe6982ba1ecf59581ecec4a80532ab91653",
      "tree": "9a04990164e8a867fa7fb378b8ba03fc555009b5",
      "parents": [
        "3e65e36e96eb07f451f731b4fc5e8ca3f71ad80b"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Mar 03 21:58:25 2016 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Mar 09 22:28:25 2016 +0000"
      },
      "message": "Implement accounts* warm-cache command\n\nScan all accounts from ReviewDb and load them by all criteria\nto populate the in-memory cache.\n\nChange-Id: I37d6fddf4ef55031f5232d760bad60b635c1da4b\n"
    },
    {
      "commit": "3e65e36e96eb07f451f731b4fc5e8ca3f71ad80b",
      "tree": "8362c3e38b44a027c429c8197dac5f41343e6502",
      "parents": [
        "bc4f8d1816f4455e4c986377a691a12fc3289ae6"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Mar 03 21:47:40 2016 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Mar 09 22:27:36 2016 +0000"
      },
      "message": "Implement groups* warm-cache command\n\nScan all groups that have permissions on all projects and triggers\nthe warm-up of all group* related caches.\n\nChange-Id: I44b53373c996462db9c42c4999786616e7e6aa8e\n"
    },
    {
      "commit": "bc4f8d1816f4455e4c986377a691a12fc3289ae6",
      "tree": "0292356525d201b708d93fda6da8c9de62cd4553",
      "parents": [
        "6374bb60f7ea35a22e11e9f86303e02c40b0c3fb"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Feb 26 22:53:52 2016 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Mar 09 22:27:05 2016 +0000"
      },
      "message": "Set Gerrit projects read-only during maintenance\n\nDuring rolling restart for Gerrit upgrades it can be useful to\nset all projects to read-only and provide a courtesy message\nwhenever a Git push is received.\n\nChange-Id: Iad586eafd40a0b4d780a48522cd45e2e4f276c36\n"
    },
    {
      "commit": "6374bb60f7ea35a22e11e9f86303e02c40b0c3fb",
      "tree": "3711e0a7c1c25f2c1f2ddbf504add99293e02681",
      "parents": [
        "806e7254a3f9dfee4b8c5155d1c616a630693405"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Mar 03 16:05:34 2016 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Mar 04 11:13:12 2016 +0000"
      },
      "message": "Factor out the stdout.println/flush pattern\n\nWhen executing the warm-cache for projects, we can factor out\nthe println and flushing of the result to avoid repetition of the\nstdout.println + stdout.flush calls.\n\nChange-Id: I64993e0533ffdd7c9bf6db7ebd7dfb157bf9eb17"
    },
    {
      "commit": "806e7254a3f9dfee4b8c5155d1c616a630693405",
      "tree": "ca2d1ef4eb5af12f7324c95db02eb8567d9b0dcc",
      "parents": [
        "e29e9ee1e481b2320c37c023a8bf18e3400f9c01"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Mar 01 20:44:15 2016 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Mar 03 08:08:02 2016 +0000"
      },
      "message": "Add cache warm-up utility\n\nNew SSH command to trigger the warm-up of Gerrit caches.\nFirst cache implemented is project lists and entries.\n\nChange-Id: I1972191a55a7bb03ee338cf8db96e40808f82736\n"
    },
    {
      "commit": "e29e9ee1e481b2320c37c023a8bf18e3400f9c01",
      "tree": "d8e6e18422eb18fb8a324174731e073a5f2f3b39",
      "parents": [
        "7a0464119203def2ab2d8785be8caaa7a4dd321c"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Mar 01 20:16:40 2016 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Mar 01 23:10:26 2016 +0000"
      },
      "message": "Add license to reindexer script\n\nChange-Id: Ic3a7141a0fd3cad9844942d0804baf38897af86e\n"
    },
    {
      "commit": "7a0464119203def2ab2d8785be8caaa7a4dd321c",
      "tree": "15468e701d67ef918135a606e77c7ada906c89c3",
      "parents": [
        "f90a4013ed19798baf7adc730743c776bde15d65"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Dec 03 17:08:56 2015 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Dec 03 17:58:20 2015 +0000"
      },
      "message": "Contribute the reindexer Groovy script to reindex on-line\n\nThe current Gerrit command to triggering the on-line reindexer\nwould not recreate the current version of the indexes.\nThe reindexer Groovy script will allow to force the reindexing\non-line and thus being able to fix the running index without\nhaving to shutdown Gerrit.\n\nChange-Id: Ic85e7f0ec7fb1537517b0c3c7911ac65681ba7bd\n"
    },
    {
      "commit": "f90a4013ed19798baf7adc730743c776bde15d65",
      "tree": "842334f8c10c4a255ee612ba6cf6f10f0a74f41b",
      "parents": [],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Dec 03 17:03:39 2015 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Dec 03 17:03:39 2015 +0000"
      },
      "message": "Initial README\n"
    }
  ]
}
