)]}'
{
  "log": [
    {
      "commit": "83b287e927bd92be5b0a4b7b2a19220dbb75a9fe",
      "tree": "6d5598ff5027000a604d2b3e6844e06c62179ac3",
      "parents": [
        "bf47703ec3989127eb9d7ffcad73d72bbca263a8"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Oct 03 09:28:33 2025 -0700"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Oct 03 09:29:23 2025 -0700"
      },
      "message": "Add deprecation notice\n\nChange-Id: If3a46a52fae4ff81434197b4977b9a5ded5682b2\n"
    },
    {
      "commit": "bf47703ec3989127eb9d7ffcad73d72bbca263a8",
      "tree": "8645bb919f34989c8257d1cdc7a5b799637f7075",
      "parents": [
        "3ef5daf74468e954bb833f50a38db37b373e6b13"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Wed Jul 02 08:05:41 2025 +0200"
      },
      "committer": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Jul 03 21:04:25 2025 +0200"
      },
      "message": "Remove duplicated code from collectors\n\nIntroduce `AbstractMetricsCollector` that reduces the duplicated code\nof submitting metrics calculations to executor but more importantly to\nensure consistency in the `*metricsCollectionTime` metric calculation.\n\nChange-Id: I8f7216d461b8b48429a54b48e34f8481d1838342\n"
    },
    {
      "commit": "3ef5daf74468e954bb833f50a38db37b373e6b13",
      "tree": "0278b283fc448535114848d804b25550355ce059",
      "parents": [
        "5760ad41a879ed4c628c40c5ccdd5fad1736294a"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Jul 03 20:47:46 2025 +0200"
      },
      "committer": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Jul 03 20:47:46 2025 +0200"
      },
      "message": "Remove unused `getMetricsCollectorName` function\n\nRemove `getMetricsCollectorName` from the `MetricsCollector` as it is\nnot used.\n\nChange-Id: I1be871afcb9470326ca2f5ee808be9e865083237\n"
    },
    {
      "commit": "5760ad41a879ed4c628c40c5ccdd5fad1736294a",
      "tree": "6829d241bdaddccedb96c111c060dc26140f2512",
      "parents": [
        "4c3eca2e9c88daaad98f3eeb6593361e1edadf15"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Wed Jul 02 08:16:32 2025 +0200"
      },
      "committer": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Jul 03 20:45:04 2025 +0200"
      },
      "message": "Fix typo in `numberOfFiles` metric description\n\nChange-Id: I25bc41974981e150f35f84dae29654dab383969e\n"
    },
    {
      "commit": "4c3eca2e9c88daaad98f3eeb6593361e1edadf15",
      "tree": "68798b16dac42d808360716a1b0da940f132173d",
      "parents": [
        "a55869f1dc747078fc21344c14817c466a4e35fb"
      ],
      "author": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Wed Jul 02 07:45:38 2025 +0200"
      },
      "committer": {
        "name": "Jacek Centkowski",
        "email": "geminica.programs@gmail.com",
        "time": "Thu Jul 03 07:09:01 2025 +0200"
      },
      "message": "Introduce the `*metricscollectiontime` meta metrics\n\nThe git repo metrics plugin, in order to spare system\u0027s resources,\ntypically collects metrics periodically and then serves them from cache.\nEach group of metrics (git, fs, refs) is collected independently and\nalso requires different amount of time for collection.\nThe change introduces `[git|fs|refs]metricscollectiontime` meta metrics\n(in millis) to indicate when was the last time that particular group of\nmetrics was collected. Note that metrics are populated upon successful\ncollection.\n\nBug: Issue 427093248\nChange-Id: I4b22920bfcdaeb55259842261a0cf8cab7601aa8\n"
    },
    {
      "commit": "a55869f1dc747078fc21344c14817c466a4e35fb",
      "tree": "b53b0fb5eb548ec2b321b855425c2e835fc5418d",
      "parents": [
        "8708f0fc1ea99c40736f922aa9f38b4c54d4f01c"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Apr 30 13:08:29 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Apr 30 13:44:53 2025 -0700"
      },
      "message": "Fix metric registration check for existing metrics\n\nChecking for the presence of existing metrics cannot be done anymore by\nfull match but should only consider the prefix, excluding the project\nname that is now part of the metric field.\n\nEnable the shouldRegisterMetricsOnlyOnce() test again now that the\nmetrics detection logic has been fixed and it is not possible anymore\nto trigger the registration of the same metric twice.\n\nChange-Id: Ia43962025f43c00c9c3acc06649580619199230b\n"
    },
    {
      "commit": "8708f0fc1ea99c40736f922aa9f38b4c54d4f01c",
      "tree": "699a0933a66f0c3f3dbdd74fce2c1d3f6b5556e2",
      "parents": [
        "5ab2f8b5d44c667ce93466c00c36aa13e8dba291",
        "1173f12d25165c77cb3eb8fb7eb0c4d4465b350d"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Apr 30 13:44:35 2025 -0700"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 30 13:44:35 2025 -0700"
      },
      "message": "Merge \"Add a metrics reporter for testing metrics generation\""
    },
    {
      "commit": "5ab2f8b5d44c667ce93466c00c36aa13e8dba291",
      "tree": "b1031a6d04bc7268b6c54d36396e033ab819113a",
      "parents": [
        "4473b116b54844df0aab39e0df0849883312f90d"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Apr 30 18:40:40 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Apr 30 13:23:37 2025 -0700"
      },
      "message": "Fix FakeMetricMaker metrics creation\n\nFollowing the introduction of the parametric metric\nbased on the project name, the FakeMetricMaker was not\namended accordingly causing the creation of incorrect runtime\nbehaviour.\n\nAs soon as the FakeMetricMaker start simulating\nthe correct logic behind the metric generation, the test\nshouldRegisterMetricsOnlyOnce() starts failing which is a good\nthing: the code in GitRepoMetricsCache was broken in the detection\nof existing metrics therefore this failure is expected.\n\nChange-Id: I689f2bf2c2e9d39fc816ca2838cd4e594782ae3f\n"
    },
    {
      "commit": "1173f12d25165c77cb3eb8fb7eb0c4d4465b350d",
      "tree": "fb94076979714aefa710c68625d49cbd3ab167bb",
      "parents": [
        "4473b116b54844df0aab39e0df0849883312f90d"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Apr 30 18:07:45 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Apr 30 21:12:35 2025 +0100"
      },
      "message": "Add a metrics reporter for testing metrics generation\n\nParametric metrics are populated in a lazy way depending on the values\nof the parameters at runtime. The evaluation happens at the reporting\ntime, therefore testing without an actual reporter won\u0027t trigger the\ngeneration logic.\n\nAdd an Slf4JReporter to MetricsInitializerIT so that the test gets\nexecuted on the fully generated metrics at runtime.\n\nBefore this change, the metrics were re-registered multiple times for\nmaking the tests pass, which compensated for the lack of metrics\ncollection (registration triggers a forced collection); however, the\ntesting scenarios were not necessarily impacted by the extra metrics\ncreation, but at runtime it was, causing errors whenever a project had\nthe same metrics updated and collected multiple times.\n\nChange-Id: Ib8f739b53a0fabb4c38f09abf859f356169a8ccf\n"
    },
    {
      "commit": "4473b116b54844df0aab39e0df0849883312f90d",
      "tree": "00b7f04bf205fd7f352382357261b1a0b002edfd",
      "parents": [
        "e4e11b73a6f27c5a03d5af49896dfcdb998c3bcd"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Apr 30 17:27:55 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Apr 30 09:29:21 2025 -0700"
      },
      "message": "Cleanup GitRepoMetricsCache\n\nRemove unused field metricNames and add missing final modifiers to\ncollectors and stableStatsProjects.\n\nChange-Id: I61e02c0c64557a6f72feb2d177c4dea673933e65\n"
    },
    {
      "commit": "e4e11b73a6f27c5a03d5af49896dfcdb998c3bcd",
      "tree": "ad08dea450d0d6d867ea12c9137c8709a11ce884",
      "parents": [
        "336cf12154806291520da7734e12de948247a4be"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Apr 29 20:22:36 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Apr 29 20:22:36 2025 +0100"
      },
      "message": "Move resources under src/main\n\nHaving the resources in the wrong place caused the plugin to\nnot expose any documentation entry.\n\nChange-Id: I7dc55698090518c6fadee75c0a834e71fc1e9021\n"
    },
    {
      "commit": "336cf12154806291520da7734e12de948247a4be",
      "tree": "253d44ca4d90fddc15d94de5961225f1e9a48687",
      "parents": [
        "e969becbb610028e6da46d05bd4958ae95c0d37c"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Apr 29 14:35:09 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Apr 29 11:59:41 2025 -0700"
      },
      "message": "Remove unused getMetricsNames() method in GitRepoMetricsCache\n\nChange-Id: I607d6bf803c45d4e86722991c441dfc7ba8e296f\n"
    },
    {
      "commit": "e969becbb610028e6da46d05bd4958ae95c0d37c",
      "tree": "d51e37b8ea9c730ada566fbe1f5c675e24d42941",
      "parents": [
        "a0af440205c46cdae2806a53266a9140a568a3a9"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Apr 23 19:02:46 2025 +0200"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Apr 29 11:59:09 2025 -0700"
      },
      "message": "Amend repository metrics introducing a project_name field\n\nThe repository name was wrongly used in the metric name, which is\nagainst the common paradigm used in Gerrit for tracking repo-specific\nmetrics, similarly to the definition of JGit block cache in\nJGitMetricModule.\n\nUse the typical Gerrit pattern of parametrised metrics by the\nproject_name field and rely on Gerrit\u0027s name sanitisation logic.\n\nAlso, fix the shouldCollectAllRepositoriesMetrics() test, which was\nwrongly assuming that the metrics are only generated for All-Projects\nand All-Users, while every test also create a test-specific project\nwhich is also then accounted for in the repository metrics.\n\nBug: Issue 413269103\nChange-Id: I42440218812183b1dd3c08becc1b31f8bb000e04\n"
    },
    {
      "commit": "a0af440205c46cdae2806a53266a9140a568a3a9",
      "tree": "685ebe365392881f94316ede0b333d070bdac172",
      "parents": [
        "aefeecc76848f6dce4cec4e775388b1315429e10"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Apr 16 01:01:51 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Apr 16 14:41:24 2025 +0100"
      },
      "message": "Verify that ref updates are not lost because of grace period\n\nHaving a grace period for metrics updates should not impact the overall\nvalidity of the metrics but only affect how often they are updated.\n\nAdd a new integration test that tries to add two branches in rapid\nsequence to a repository and assert that the result of number of loose\nrefs should not change regardless of having a grace period configured or\nnot.\n\nBug: Issue 410584024\nChange-Id: Iad865492f39dd5ca8746f89f16c0b7ebe21f60b6\n"
    },
    {
      "commit": "aefeecc76848f6dce4cec4e775388b1315429e10",
      "tree": "2c2f1957a008188cb0d8026c16da358347ed328b",
      "parents": [
        "23f87e757c0225a9fc58520732247b792c51f837"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Apr 16 08:53:10 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Apr 16 06:35:05 2025 -0700"
      },
      "message": "Make GerritInstanceId an optional injection\n\nNot all Gerrit setups have the gerrit.instanceId defined\nand the git-repo-metrics should not have it as a strong\nrequirement either.\n\nIf gerrit.instanceId is not defined, it should not be\nmatched.\n\nChange-Id: I03d80089e2b5e18a8dde9587225a000889276468\n"
    },
    {
      "commit": "23f87e757c0225a9fc58520732247b792c51f837",
      "tree": "7f5180282ca998e16491d67001ffd2903b5f48e2",
      "parents": [
        "3809a199c14fe7e38dfaf5d1a3ce20a4b9fc3fda"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Apr 15 18:18:48 2025 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Apr 16 09:55:31 2025 +0200"
      },
      "message": "Avoid dropping stats collection tasks\n\nThe current back-pressure mechanism for stats collection incorrectly\ndrops tasks.\n\nInstead of discarding tasks, the logic should compact multiple pending\ntasks into a single one, reducing pressure on the filesystem while still\nensuring data is collected.\n\nBug: Issue 410584024\nChange-Id: Ie82379e33041c67ee41932e62c0facf04a3b43ae\n"
    },
    {
      "commit": "3809a199c14fe7e38dfaf5d1a3ce20a4b9fc3fda",
      "tree": "a953500097ec4a4d33bef312a654d7127ca4ba7c",
      "parents": [
        "945bccb97cc7e4d9dcc7f83ba2bd31b06f32840e"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Tue Apr 15 18:12:49 2025 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Tue Apr 15 18:13:42 2025 +0200"
      },
      "message": "Add project staleness checker\n\nSince the last collection date is set asyncronously in the stats\ncollection tasks, it is possible to schedule more tasks than needed\nduring the grace period.\n\nAvoid it by scheduling tasks onlt if the projects stats are considered stale.\n\nChange-Id: I42791882443cd748251c9e75477f6e3dd17016f0\n"
    },
    {
      "commit": "945bccb97cc7e4d9dcc7f83ba2bd31b06f32840e",
      "tree": "2682408d025b9b33ef2a879c8b39e9909db9b8f5",
      "parents": [
        "b2fc96552dffa3498601d0448194a77378e44fd4"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Fri Apr 11 22:08:06 2025 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Tue Apr 15 14:59:41 2025 +0200"
      },
      "message": "Add support for collecting metrics from all repos\n\nCurrently, the plugin requires an explicit list of repositories to be\ndefined in the configuration. This approach is not scalable in\nenvironments with a large number of projects or when new repositories\nare added frequently.\n\nThis change introduces a new configuration option:\n\n  [git-repo-metrics]\n    collectAllRepositories \u003d true\n\nWhen enabled, the plugin will dynamically collect metrics from all\nexisting repositories known to Gerrit, instead of relying on a static\nlist.\n\nThis reduces the maintenance burden on Gerrit administrators and ensures\nmetrics coverage remains up-to-date as projects are added or removed.\n\nThe existing configuration using an explicit list of repositories is\nstill supported but collectAllRepositories take precedence when enabled.\n\nBug: Issue 408830824\nChange-Id: I6fda393919786a5831d6f92bba576f353defa370\n"
    },
    {
      "commit": "b2fc96552dffa3498601d0448194a77378e44fd4",
      "tree": "cf152dca29f8864030675be1f29d590ede30b938",
      "parents": [
        "ca31c4450f25d0656b3e1e465604c09d23240b51",
        "ed12dcd69cf21fc3ee558a20939555156c90f39e"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Mon Apr 14 22:46:51 2025 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Mon Apr 14 22:47:30 2025 +0200"
      },
      "message": "Merge branch \u0027origin/stable-3.10\u0027\n\n* stable-3.10:\n  Trigger collection on ref-replicated event\n\nChange-Id: Iaf6227c3f8212d07472edda0d6bd8011e74147ba\n"
    },
    {
      "commit": "ed12dcd69cf21fc3ee558a20939555156c90f39e",
      "tree": "cf152dca29f8864030675be1f29d590ede30b938",
      "parents": [
        "ca31c4450f25d0656b3e1e465604c09d23240b51"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Fri Apr 11 20:34:07 2025 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Mon Apr 14 22:28:47 2025 +0200"
      },
      "message": "Trigger collection on ref-replicated event\n\nreplication-done events are only emitted when replication\nhappens syncronously via fetch.\n\nWe need to rely on ref-replicated events instead which are always\nemitted.\n\nNow, only ref-updated and *-ref-replicated events originating\nfrom the current node are processed.\n\nSuch events in a multi primary setutp are forwarded by\neither multi-site or high-availability to the peer nodes.\n\nChange-Id: I28780cf0ce801a22e0ad7cb20a61c1000e3f1119\n"
    },
    {
      "commit": "ca31c4450f25d0656b3e1e465604c09d23240b51",
      "tree": "17be5b09816f5bcb8236fb311a9d20a5ca05f4bb",
      "parents": [
        "34bc68ff0eb7ec639095970148e5bb17285b7da0"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Thu Apr 03 19:16:11 2025 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Mon Apr 07 00:54:23 2025 -0700"
      },
      "message": "Do not skip \"refs/users/\" when calculating SHA1\n\nSkipping \"refs/users/\" would not allow the correct computation\nof the All-Users SHA1.\n\nChange-Id: I8d99b06a57da3fa2fc525032e35efd34e32ff93e\n"
    },
    {
      "commit": "34bc68ff0eb7ec639095970148e5bb17285b7da0",
      "tree": "e16ddafc0ce9846271fbf36878c894301765258b",
      "parents": [
        "3da03680cba4703803a0a8a2b2fd6c8900d7fd24"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Thu Apr 03 19:08:52 2025 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "Ponch78@gmail.com",
        "time": "Thu Apr 03 19:08:52 2025 +0200"
      },
      "message": "Reduce log verbosity for metrics collection\n\nLogging all metrics on every collection cycle adds unnecessary\nnoise to the logs.\n\nMove logging level to atFine().\n\nChange-Id: I485d539aa735ca749a1199529550b1d5bc8ce27f\n"
    },
    {
      "commit": "3da03680cba4703803a0a8a2b2fd6c8900d7fd24",
      "tree": "36b3525e80d071abeb6e753a1ce74a6782a31e80",
      "parents": [
        "17352078b2afdc1b3fde40d59a940c3a3ca32b5d"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Sun Mar 09 22:05:25 2025 +0000"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Mon Mar 10 00:33:57 2025 -0800"
      },
      "message": "repoPath for GitLab should not add git extension\n\nGerrit already adds .git extension to the project name when searching\nfor a project on disk.\n\nChange-Id: I3b61975b59da2385a79a1e4f5a890e10108a6006\n"
    },
    {
      "commit": "17352078b2afdc1b3fde40d59a940c3a3ca32b5d",
      "tree": "9501aeb1544daaa2bd37c6867d9ea6e0425fbb14",
      "parents": [
        "897681f1c5de50a28fefa11f5dea75719bbdb630"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Feb 11 09:03:22 2025 +0000"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Wed Feb 12 05:36:14 2025 -0800"
      },
      "message": "Use pluginName variable to read from config\n\nChange-Id: Ic021e1dc1d74c7d960d2908097db296e85359b48\n"
    },
    {
      "commit": "897681f1c5de50a28fefa11f5dea75719bbdb630",
      "tree": "5c1691eadfbfce6e2fc3adfc0062dfe77d629e7f",
      "parents": [
        "c377b9814a844fa97e0b15bc59f07c40e1888f45"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Mon Feb 10 16:54:50 2025 +0000"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Wed Feb 12 05:35:55 2025 -0800"
      },
      "message": "Specify that update via ref-update is only for primaries\n\nChange-Id: I702423cb0d09d2b710a284cd077afb04b0aa93fc\n"
    },
    {
      "commit": "c377b9814a844fa97e0b15bc59f07c40e1888f45",
      "tree": "9ea21ff04f23580775399a222c87f7e2ddd05a85",
      "parents": [
        "22f105fa1d8e726f8073cb631e0421bc9e8168fd"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Sat Feb 08 15:24:47 2025 +0000"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Wed Feb 12 13:18:41 2025 +0000"
      },
      "message": "Add the ability to access different SCM repositories\n\nFor now, this is limited to GitLab, the intention is to extend this\nto other Git SCMs too.\n\nGitLab stores repositories under a different path from Gerrit, some\nlogic is required to calculate the new path.\nWhen using GitLab backend, the project should be set to the GitLab Id\nof that project, rather than the name. The metric will be exposed with\nthe project Id too. Further details on GitLab project ids at [1].\n\n[1]https://docs.gitlab.com/ee/user/project/working_with_projects.html#access-a-project-by-using-the-project-id\n\nChange-Id: Ic5fa65b49dbab255a2ede9c3e5d4f017c219bf18\n"
    },
    {
      "commit": "22f105fa1d8e726f8073cb631e0421bc9e8168fd",
      "tree": "d58078f10047c14652652dbb9ee03bf3bd9ec17f",
      "parents": [
        "4d2e0a1125544e7538d0c86d1b610bbc6b25bffc"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Feb 11 22:09:10 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Feb 11 22:09:10 2025 +0000"
      },
      "message": "Enable build validation with Jenkins\n\nAdd Jenkinsfile for enabling the validation of every\nincoming change against its build and tests.\n\nThis is to prevent future breakages due to untested\nchanges merged and not validated.\n\nChange-Id: Ie2cc781cc39d27cdb8c061830a343381ca13e8a5\n"
    },
    {
      "commit": "4d2e0a1125544e7538d0c86d1b610bbc6b25bffc",
      "tree": "b9a52c627afea60cc915f27c45bf96d9e83931a9",
      "parents": [
        "e265dd1759c9612c59e1fa8077f635928a421d8f"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Feb 11 21:28:05 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Feb 11 22:05:42 2025 +0000"
      },
      "message": "Close Repository objects in GitRepoMetricsCacheIT\n\nThe Repository objects created in the setup of the tests\nneed to be closed to prevent false positives of resource\nleaks.\n\nChange-Id: I9d40223ad656d39d5ec158d81892b03d4d4bcabc\n"
    },
    {
      "commit": "e265dd1759c9612c59e1fa8077f635928a421d8f",
      "tree": "fca8fa0a009f00f73c5f42743731ac0859d70d86",
      "parents": [
        "a9a880f1d589d095fc942f024b8e72b99b6dd636"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Feb 11 22:05:11 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Feb 11 22:05:11 2025 +0000"
      },
      "message": "Reformat with GJF 1.24.0\n\nChange-Id: I7ec1075f95816aa3d4099d5dbc050717c0b12c21\n"
    },
    {
      "commit": "a9a880f1d589d095fc942f024b8e72b99b6dd636",
      "tree": "1fea212299a37c598fec94418bafe8ec13b3ea5c",
      "parents": [
        "47be5f3ddf8cff2cc815efc1beb55d65c85c2077"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Feb 11 13:58:32 2025 -0800"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Feb 11 13:58:32 2025 -0800"
      },
      "message": "Revert \"Add the ability to access different SCM repositories\"\n\nRevert submission 452805\n\nReason for revert: This change broke UpdateGitMetricsTaskTest\n\nReverted changes: /q/submissionid:452805\n\nChange-Id: I9ee325dbff6de70730139cc96cce6d3e75a33304\n"
    },
    {
      "commit": "47be5f3ddf8cff2cc815efc1beb55d65c85c2077",
      "tree": "18e3a2ede9cbe114bf5005d87d5fb67fb986fec7",
      "parents": [
        "ad077858c0cf34dbb0d71cbb772eb3e1f0becec7"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Feb 11 13:58:32 2025 -0800"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Feb 11 13:58:32 2025 -0800"
      },
      "message": "Revert \"Specify that update via ref-update is only for primaries\"\n\nRevert submission 452805\n\nReason for revert: This change broke UpdateGitMetricsTaskTest\n\nReverted changes: /q/submissionid:452805\n\nChange-Id: Ie50d3c7c803659cf7fd2f7c7c9bf0335ffd1a74f\n"
    },
    {
      "commit": "ad077858c0cf34dbb0d71cbb772eb3e1f0becec7",
      "tree": "03b9142b493f6ffdb2edb2fe3ae5dec9ec7b68b5",
      "parents": [
        "32ae0bd0fee9b6f34827c0527395027fd2ce263b"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Feb 11 13:58:32 2025 -0800"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Feb 11 13:58:32 2025 -0800"
      },
      "message": "Revert \"Use pluginName variable to read from config\"\n\nRevert submission 452805\n\nReason for revert: This change broke UpdateGitMetricsTaskTest\n\nReverted changes: /q/submissionid:452805\n\nChange-Id: Icff17e816b503137b62ff8e9b091e001a38de1f3\n"
    },
    {
      "commit": "32ae0bd0fee9b6f34827c0527395027fd2ce263b",
      "tree": "aa1bb4cfe7489680a4f17edeaa192abfa43f2187",
      "parents": [
        "a9f4219b70b1d641594195d3e6cd08c9974d0f0f"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Feb 11 09:03:22 2025 +0000"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Feb 11 09:50:04 2025 +0000"
      },
      "message": "Use pluginName variable to read from config\n\nChange-Id: Iea9384217398236d7d686e9cd176f7653f5e557c\n"
    },
    {
      "commit": "a9f4219b70b1d641594195d3e6cd08c9974d0f0f",
      "tree": "03b9142b493f6ffdb2edb2fe3ae5dec9ec7b68b5",
      "parents": [
        "684eac4719beec0682c74a39ba18930af2fc0155"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Mon Feb 10 16:54:50 2025 +0000"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Feb 11 09:49:04 2025 +0000"
      },
      "message": "Specify that update via ref-update is only for primaries\n\nChange-Id: I7472d1efe2e42dc6889f02c5807491d4cda11fce\n"
    },
    {
      "commit": "684eac4719beec0682c74a39ba18930af2fc0155",
      "tree": "18e3a2ede9cbe114bf5005d87d5fb67fb986fec7",
      "parents": [
        "4af064feecc2181bd9f7a128f8edb6a1543f3917"
      ],
      "author": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Sat Feb 08 15:24:47 2025 +0000"
      },
      "committer": {
        "name": "Daniele Sassoli",
        "email": "danielesassoli@gmail.com",
        "time": "Tue Feb 11 01:44:05 2025 -0800"
      },
      "message": "Add the ability to access different SCM repositories\n\nFor now, this is limited to GitLab, the intention is to extend this\nto other Git SCMs too.\n\nGitLab stores repositories under a different path from Gerrit, some\nlogic is required to calculate the new path.\nWhen using GitLab backend, the project should be set to the GitLab Id\nof that project, rather than the name. The metric will be exposed with\nthe project Id too. Further details on GitLab project ids at [1].\n\n[1]https://docs.gitlab.com/ee/user/project/working_with_projects.html#access-a-project-by-using-the-project-id\n\nChange-Id: I68928a261e3a93feb7a489d44758d2e71bc729cc\n"
    },
    {
      "commit": "4af064feecc2181bd9f7a128f8edb6a1543f3917",
      "tree": "1fea212299a37c598fec94418bafe8ec13b3ea5c",
      "parents": [
        "96f69e14d7fed4ee387178602e2182c2b60fbf03",
        "c76fcb8bbf0fbfdaad26b165155d84871ac0b156"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Nov 27 22:08:17 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 27 22:08:17 2024 +0000"
      },
      "message": "Merge changes from topic \"revert-425518-ZIDDSIUFTI\"\n\n* changes:\n  Revert \"Add numberofprojects metric\"\n  Revert \"Decouple the number of repositories metrics from the cache\"\n  Revert \"Replace project cache with GerritApi for listing projects\"\n  Revert \"Use \u0027(state:active OR state:read-only)\u0027 when querying projects\"\n"
    },
    {
      "commit": "c76fcb8bbf0fbfdaad26b165155d84871ac0b156",
      "tree": "092ed6bbde5a1bd374aad8f495959d6694a664cd",
      "parents": [
        "9841b19733c1edfa45525ee0638993cd8aa4120c"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Nov 27 21:29:00 2024 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Nov 27 21:47:07 2024 +0000"
      },
      "message": "Revert \"Add numberofprojects metric\"\n\nThis reverts commit 42cd8b2b315adfb200eebfa95c89fed01282f4f1.\n\nReason for revert: See Issue 325029893, this metrics should go into Gerrit core\n\nChange-Id: I2150717ff91297e7e517d3ec648b16f7cb72c800\n"
    },
    {
      "commit": "9841b19733c1edfa45525ee0638993cd8aa4120c",
      "tree": "33f6891c5a7fd22988669878715106a2ba42ca1e",
      "parents": [
        "624d06bb667d9f4ce4bba198bbc8dd154a1832cc"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Nov 27 21:30:03 2024 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Nov 27 21:43:17 2024 +0000"
      },
      "message": "Revert \"Decouple the number of repositories metrics from the cache\"\n\nRevert submission 425518\n\nReason for revert: See Issue 325029893, this metric should go into Gerrit core\n\nReverted changes: /q/submissionid:425518\n\nChange-Id: I5777c1194bf416b62899222146b58ff1b246abdf\n"
    },
    {
      "commit": "624d06bb667d9f4ce4bba198bbc8dd154a1832cc",
      "tree": "158541aeae090675390b08f7b9edabea2ffb8292",
      "parents": [
        "f1a2042cef924be1f5187ddf36a078d5bb735559"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Nov 27 21:30:03 2024 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Nov 27 21:32:56 2024 +0000"
      },
      "message": "Revert \"Replace project cache with GerritApi for listing projects\"\n\nRevert submission 425518\n\nReason for revert: See Issue 325029893, this metric should go into Gerrit core\n\nReverted changes: /q/submissionid:425518\n\nChange-Id: I8153b52cf2ad975eb002f3b1449a79d882354fd9\n"
    },
    {
      "commit": "f1a2042cef924be1f5187ddf36a078d5bb735559",
      "tree": "3d8171eeefc1999a7fb43d08771e56421ab4a9b8",
      "parents": [
        "1e8fa768cb112bae29394f1eca6433a959b793ba"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Nov 27 21:32:14 2024 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Nov 27 21:32:14 2024 +0000"
      },
      "message": "Revert \"Use \u0027(state:active OR state:read-only)\u0027 when querying projects\"\n\nThis reverts commit 1e8fa768cb112bae29394f1eca6433a959b793ba.\n\nReason for revert: See Issue 325029893, this metric should go into Gerrit core\n\nChange-Id: I573f8da8688f5fb6fb8b0c9299a273c281f4fd73\n"
    },
    {
      "commit": "96f69e14d7fed4ee387178602e2182c2b60fbf03",
      "tree": "ac5b1adf934896f356b6dbf5919ec551efd94d3f",
      "parents": [
        "1e8fa768cb112bae29394f1eca6433a959b793ba"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Nov 27 09:16:16 2024 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Nov 27 09:23:09 2024 +0100"
      },
      "message": "Collect new git stats metrics\n\nAdd numberOfPackFilesSinceBitmap and numberOfObjectsSinceBitmap metrics\nto the GitStatsMetricsCollector.\n\n- numberOfPackFilesSinceBitmap: contains number of packfiles created\n  since the latest bitmap generation.\n\n- numberOfObjectsSinceBitmap: contains the number of objects stored in\n  pack files and as loose objects created since the latest bitmap\n  generation.\n\nChange-Id: Ide01230379ed0203f040edbaf9c17f0f162213f0\n"
    },
    {
      "commit": "1e8fa768cb112bae29394f1eca6433a959b793ba",
      "tree": "d6dd1ec9f66852443c72f19f72e197cdb3e2204b",
      "parents": [
        "a6a057dfd1375747bdf5de90e960d35468f0e4a0"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jun 19 19:19:24 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jun 19 19:19:24 2024 +0100"
      },
      "message": "Use \u0027(state:active OR state:read-only)\u0027 when querying projects\n\nGerrit supports empty projects query only from v3.9 onwards, whilst\nfor earlier versions the NumberOfProjectsCollector needs to rely\non a query that would match any project state.\n\nUsing an empty query would make the git-repo-metrics fail on earlier\nGerrit versions.\n\nChange-Id: Ifd0a72a73ab48d4e72868f6f38b14fd526f5ea28\n"
    },
    {
      "commit": "a6a057dfd1375747bdf5de90e960d35468f0e4a0",
      "tree": "3d8171eeefc1999a7fb43d08771e56421ab4a9b8",
      "parents": [
        "e01e601059454ce049bbdb9ba82f4eafab6a5af8"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed May 22 15:06:34 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed May 22 16:41:21 2024 +0100"
      },
      "message": "Allow to force metrics update on repositories\n\nDefine a new configuration git-repo-metrics.forcedCollection for\nforcing the recalculation of the projects metrics even in absence\nof git-ref-update events.\n\nChange-Id: Ia5d7d59e2262fb30a46308ecc91b86a17dbb92b1\n"
    },
    {
      "commit": "e01e601059454ce049bbdb9ba82f4eafab6a5af8",
      "tree": "a25842024acbf33aec33ea7cb47b697436703399",
      "parents": [
        "f61b86264fe702ef39a3fcb7d789526ba6e5d165"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed May 15 10:33:15 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed May 15 09:53:40 2024 +0000"
      },
      "message": "Replace project cache with GerritApi for listing projects\n\nWhen rendering the number of projects metrics, use an\ninexpensive project list instead of loading all projects\nin cache, leveraging an internal user context.\n\nAlso honour the grace period configuration of the plugin\nso that the new metric will respect the update frequency\nconfigured without generating extra workload on the system.\n\nIf the metrics is requested more often, return a memoized\nvalue from the earlier executions.\n\nChange-Id: Ica5d219be22ce1f0839596ff654f0402c7c0e555\n"
    },
    {
      "commit": "f61b86264fe702ef39a3fcb7d789526ba6e5d165",
      "tree": "b42e3c49e6f828bbf23ff857f85a4bfa6fe07b3a",
      "parents": [
        "42cd8b2b315adfb200eebfa95c89fed01282f4f1"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed May 15 10:12:57 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed May 15 10:53:10 2024 +0100"
      },
      "message": "Decouple the number of repositories metrics from the cache\n\nDo not associate directly the metric value and his\ncallback to the Gerrit\u0027s project cache. A direct coupling\nhas two issues:\n1. Makes testing difficult (see the need of mocking the projects cache)\n2. Generates unneeded workload of loading all Gerrit projects in cache\n\nThis is a preparation for point 2. complete resolution where\nin a follow-up change the projects cache will be totally removed\nand replaced with a lighter mechanism.\n\nChange-Id: I1b27ed99bb13a12c3d3042b72187c716b21a457c\n"
    },
    {
      "commit": "42cd8b2b315adfb200eebfa95c89fed01282f4f1",
      "tree": "72f044c15bfa48d1c1206dc3fcfec5956d39c90a",
      "parents": [
        "5b481ff4d305457431a9744a3d08e9ed426ea153"
      ],
      "author": {
        "name": "Jose Granha",
        "email": "jose.granha@gmail.com",
        "time": "Mon Mar 04 12:56:51 2024 +0000"
      },
      "committer": {
        "name": "Jose Granha",
        "email": "jose.granha@gmail.com",
        "time": "Sun Apr 07 12:13:54 2024 +0100"
      },
      "message": "Add numberofprojects metric\n\nImplement new metric plugins_git_repo_metrics_numberofprojects which\ncaptures the number of projects at collection moment.\nThe plugin reload mode is changed to restart to allow for the new metric\nto reload, as due to the order of the events on the plugin reload\nmechanism, the previous version of the plugin is maintained until the\nlast stage, which invalidates the re-creation of the metric.\n\nBug: Issue 325029893\nChange-Id: I86e8a1f7f35be650ebd6e24ad5ca92723fb89d3d\n"
    },
    {
      "commit": "5b481ff4d305457431a9744a3d08e9ed426ea153",
      "tree": "bb033e7558b139933e109cc873fa65ad8ae4d6eb",
      "parents": [
        "5e5cb69c5cb55217bb54a5d35dd6d539d86c9c6e"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Fri Feb 16 16:41:11 2024 +0000"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Mon Feb 19 09:56:49 2024 +0000"
      },
      "message": "Add combinedRefsSha1 to metrics\n\nExpose new metric providing a \"combined refs SHA-1\", which could be\nused to ensure eventual consistency of repository refs.\n\nIt\u0027s based on the `Sha1AllRefs`[1] Groovy script, which will iterate\nover all repository refs and combine them into a single SHA-1. Then the\nresulting SHA-1 will be truncated to an integer value so that it can\nbe included in metrics.\n\nExposing this metric should enable Gerrit admins to detect potential\ninconsistencies between nodes. All git repositories are **eventually\nconsistent** which means that detecting different values for combined\nrefs SHA-1 is **NOT** equivalent to data inconsistency. But not\nreporting a consistent state (when the combined refs SHA-1 across nodes\nis the same) for a _reasonable time_ should raise an eyebrow and lead to\nan investigation if any of the replication events were lost.\n\nThe _reasonable time_ will differ from repository to repository, for\nsome it may be 2 hours, and for others 24 hours. Meaning, that within\nthat time the repositories should be consistent at least once. It\u0027s on\nthe Gerrit admin to find the time window that works best for their\nrepositories.\n\n[1]\nhttps://gerrit.googlesource.com/plugins/scripts/+/refs/heads/master/multi-primary/localrefdb.groovy#142\n\nBug: Issue 324975825\nChange-Id: I2e4dbea0892776069dea371803653b7dd239f7f8\n"
    },
    {
      "commit": "5e5cb69c5cb55217bb54a5d35dd6d539d86c9c6e",
      "tree": "55262728c6d361ffe8019edd1401c121a5974bb2",
      "parents": [
        "fd3d6a2beba7e256227829a7f0be2fd37b9334f4"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Thu Feb 15 15:12:42 2024 +0000"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Thu Feb 15 15:12:42 2024 +0000"
      },
      "message": "Use try-with-resources when iterating ovef fiels\n\nUsage of `Files.walk()` requires a try-with-resources in order to\nclearly close the stream when walk if finished or exception occurs.\n\nChange-Id: I6d1c29b51f69488cff1058ab6f15b425fc4a737c\n"
    },
    {
      "commit": "fd3d6a2beba7e256227829a7f0be2fd37b9334f4",
      "tree": "f3ba401ae474708b3cb53dc4ba428f225dea4ed4",
      "parents": [
        "af22615d8c3f4b9d15122225ba1f5c4b3e16d54f"
      ],
      "author": {
        "name": "Eryk Szymanski",
        "email": "eryksz@gmail.com",
        "time": "Thu Jan 11 11:42:08 2024 +0100"
      },
      "committer": {
        "name": "Eryk Szymanski",
        "email": "eryksz@gmail.com",
        "time": "Thu Jan 11 11:49:05 2024 +0100"
      },
      "message": "Fix link to config.md in README.md\n\nChange-Id: Ic0110373ed4a185a671c51df897d5ceaf8bb8902\n"
    },
    {
      "commit": "af22615d8c3f4b9d15122225ba1f5c4b3e16d54f",
      "tree": "4be0f0978542cdcea197151a3cb65ff88e810f4d",
      "parents": [
        "8d7ffeeb1a3dac2cdfaed9d9cb1eae2f526826a5"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon May 08 16:57:35 2023 +0100"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon May 08 16:57:35 2023 +0100"
      },
      "message": "Fix errorprone [DoubleBraceInitialization] error\n\nChange-Id: If9711023963a2a6eb5167031ff61fd47e229d571\n"
    },
    {
      "commit": "8d7ffeeb1a3dac2cdfaed9d9cb1eae2f526826a5",
      "tree": "ab447d150366b0544c9fa0ad3cbb078d1e22be06",
      "parents": [
        "e714473acd50a425660f5cbb0b9b6b115232dbd3"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Thu Feb 02 13:29:33 2023 +0100"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Thu Feb 02 13:29:33 2023 +0100"
      },
      "message": "Remove line only containing an orphaned semicolon\n\nChange-Id: Idf91d23633c93bf3cb57a036e1d689d1ef457569\n"
    },
    {
      "commit": "e714473acd50a425660f5cbb0b9b6b115232dbd3",
      "tree": "fff21241a836d0dc254dd71c307f333838b0b101",
      "parents": [
        "945680bdef994f234aba5cca21eed7939d1f128a"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Thu Feb 02 13:26:55 2023 +0100"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Thu Feb 02 13:26:55 2023 +0100"
      },
      "message": "Fix errorprone [FloggerLogString] errors\n\nTo fix this use Flogger\u0027s formatting log methods.\n\nChange-Id: I6a67bee47218201ccf14a0cb4bbc2fb354cefea2\n"
    },
    {
      "commit": "945680bdef994f234aba5cca21eed7939d1f128a",
      "tree": "21115a4a8db2cd37c2e87780f9f00a732367838b",
      "parents": [
        "a6c91cdb4c19093ac83856f165b062ef35202a87",
        "705a6649b99c6116561985dc677d66df08e7b246"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Oct 10 07:45:34 2022 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Oct 10 07:45:34 2022 +0000"
      },
      "message": "Merge \"Ensure root repository is a FileRepository\""
    },
    {
      "commit": "a6c91cdb4c19093ac83856f165b062ef35202a87",
      "tree": "8825f568fd7bcbd70299711ed275c36ca24e9086",
      "parents": [
        "6f2cd3d069183825494c6ba755eb12eb4254650f"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Sep 26 12:07:34 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Thu Sep 29 19:35:45 2022 +0200"
      },
      "message": "Collect metrics upon ref replication event\n\nIn a multi-site/HA setup metrics would only be collected\non the node receiving the receive-pack.\n\nIn case of an active/passive configuration, metrics won\u0027t\nbe collected at all on the passive nodes.\n\nCollect metrics on *-replication-done events.\n\nBug: Issue 16278\nChange-Id: Ie838afd9b9cf340c5551f3930b07cbcdc4f1622a\n"
    },
    {
      "commit": "705a6649b99c6116561985dc677d66df08e7b246",
      "tree": "43121a703b2cb7b20da6e430b485286679221804",
      "parents": [
        "6f2cd3d069183825494c6ba755eb12eb4254650f"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Sep 21 14:58:12 2022 -0500"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Sep 23 19:07:28 2022 +0000"
      },
      "message": "Ensure root repository is a FileRepository\n\nChange-Id: I540d4cf53dcb1190d570ed34fd6cb6e9b2cf1c99\n"
    },
    {
      "commit": "6f2cd3d069183825494c6ba755eb12eb4254650f",
      "tree": "90a0b13e7f3bec9bbc761961ef6f4ebe0afc38f7",
      "parents": [
        "4f825460ddc9ec57868a9a65ec2749f11e7c89ca"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Sep 23 13:30:03 2022 -0500"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Sep 23 18:52:14 2022 +0000"
      },
      "message": "Register metrics explicitly\n\nMetric registration with a `Supplier` wasn\u0027t properly working.\n\nBug: Issue 16259\nChange-Id: I99449647f286645cf81ea489efb6e5f74eaad224\n"
    },
    {
      "commit": "4f825460ddc9ec57868a9a65ec2749f11e7c89ca",
      "tree": "b0671e0f3ace63c53f6d9d185ee529c8bebb64d8",
      "parents": [
        "e5bb4501e48d54b791e9a767a0a99bc094b8d4db"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Sep 20 17:35:24 2022 -0500"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Sep 21 19:49:48 2022 +0000"
      },
      "message": "Simplify check of existing projects\n\nUse Set instead of List\n\nChange-Id: I2e14ec1fdbf83fb528ad4e4a643d952461132cc6\n"
    },
    {
      "commit": "e5bb4501e48d54b791e9a767a0a99bc094b8d4db",
      "tree": "dad9f2f90c50723865bece144e3347da19fed721",
      "parents": [
        "daa662e1690531481ea1880c7f828fe481a85a82"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Sep 09 15:49:33 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Sep 21 19:49:43 2022 +0000"
      },
      "message": "Make thread pool configurable\n\nBug: Issue 16248\nChange-Id: I8677540df22dfa99a12720a95a7aa22854181005\n"
    },
    {
      "commit": "daa662e1690531481ea1880c7f828fe481a85a82",
      "tree": "a3164f10fe7bb9dd136b47f4a1673e307e70d78f",
      "parents": [
        "b25471c1372e85ad36e90a98f91eef0e3c237b4d"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Sep 09 15:05:29 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Sep 21 19:49:37 2022 +0000"
      },
      "message": "Remove unused getStringFromMap method\n\nChange-Id: I0742a1f4085064f26b76ed68e6e9bf48d6906e48\n"
    },
    {
      "commit": "b25471c1372e85ad36e90a98f91eef0e3c237b4d",
      "tree": "785030be4b517d8c611397edcfaf1b2aa593cd89",
      "parents": [
        "b3d64ea970302a83313465992105004ebc934b7c"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Sep 07 09:32:23 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Sep 21 13:42:30 2022 -0500"
      },
      "message": "Replace Map with MetricsRecord to group metrics\n\nAdded a MetricsRecord class to group the metrics collected\nby the File System collector and to improve code readability.\n\nChange-Id: I9a0528c8a90e4ccbeb0cfde4db452b410f4879ae\n"
    },
    {
      "commit": "b3d64ea970302a83313465992105004ebc934b7c",
      "tree": "5eb35911aaa61454e463d197f00eefec8420fb4e",
      "parents": [
        "b246bae5cb572277da5c8d8c428c5cd0d6aa111b"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Sep 07 09:32:23 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Sep 21 10:56:59 2022 -0500"
      },
      "message": "Collect metrics asynchronously\n\nSubmit metrics collection tasks to the UpdateGitMetricsExecutor.\nThis will allow the parallelization of metrics collection\nby tuning the pool size dedicated to the plugin.\n\nThe thread pool is currently hardcoded but it will become\nconfigurable [1].\n\nWith this implementation the only parallelization allowed\nis at MetricsCollector level.\n\nCurrently we have 2 MetricsCollectors, hence `2 * numberOfUpdatedProjects`\ntasks will concur on the same thread pool.\n\nWe could introduce more concurrency on the File System metrics\ncollection by processing the `Stream\u003cPath\u003e` in parallel.\nHowever, since these metrics are not real-time by design, it is\nprobably better to avoid being too aggressive on the file system.\n\n[1]: https://bugs.chromium.org/p/gerrit/issues/detail?id\u003d16248\n\nChange-Id: I781a56a27d2abf3cda7a68967ab805d2a46b5349\n"
    },
    {
      "commit": "b246bae5cb572277da5c8d8c428c5cd0d6aa111b",
      "tree": "476b88126b2afd20daee2d2c55bc9cc3b777845c",
      "parents": [
        "56cdd59287f6a4e4eeefc6cad85beefc24f19752"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Sep 02 18:09:14 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Sep 13 10:46:54 2022 +0200"
      },
      "message": "Don\u0027t initialize metrics at startup\n\nStart populating metrics only when collected. Avoid defaulting\nthem all to 0 at startup.\n\nBug: Issue 16236\nChange-Id: I76712db1819c4b8a2fbc15f4b660c357ad42c7dc\n"
    },
    {
      "commit": "56cdd59287f6a4e4eeefc6cad85beefc24f19752",
      "tree": "b4dbab01bfd0ddb53fc32209feba39b4197f37ba",
      "parents": [
        "4ecc81dd29e3b314c9687c9cbffe9491aba1d6d8"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Sep 02 12:37:13 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Sep 13 07:44:04 2022 +0000"
      },
      "message": "Update metrics singularly\n\nThis work is preparatory to avoid loading all the metrics at startup.\nUpdating a metric at a time will allow later on to inizialize\nmetrics only when collected and avoid defaulting them to 0.\n\nBug: Issue 16236\nChange-Id: I0f58cac3604c0011938f25d712f03ab274048bff\n"
    },
    {
      "commit": "4ecc81dd29e3b314c9687c9cbffe9491aba1d6d8",
      "tree": "8f7445b45aa428e7097731f1be3ce3d2b6ce3d05",
      "parents": [
        "2ccb5b3b13434d857d69fce1646007dfc9bede8e"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Aug 26 17:19:19 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Sep 13 07:42:57 2022 +0000"
      },
      "message": "Remove not needed parameterless constructor\n\nNo need to have parameter/body-less constructor,\nsince it will only add boilerplate code to maintain.\n\nFurthermore, use injection to avoid changes in tests in\nthe future, as long as the constructors will\nhave injectable parameters.\n\nChange-Id: Ie6b6672b4362ed33f144ac80506c3a041fee5a36\n"
    },
    {
      "commit": "2ccb5b3b13434d857d69fce1646007dfc9bede8e",
      "tree": "cd0b1180a5771a4b79d7da8b9070e168d6a11a8b",
      "parents": [
        "288c2ea3e118b0364603f69ee64b1a6cce6da9fe"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Aug 24 16:07:41 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Sep 12 18:42:53 2022 +0200"
      },
      "message": "Add filesystem metrics\n\nCollect metrics from filesystem:\n- number of keep files\n- number of directories\n- number of empty directories\n- number of total files\n\nBug: Issue 16223\nChange-Id: I37a142a166c9beb164e72c6ac9e57e70b677a39a\n"
    },
    {
      "commit": "288c2ea3e118b0364603f69ee64b1a6cce6da9fe",
      "tree": "007d966f466927236cef72519f5f03804077608e",
      "parents": [
        "43c932579b657ad605190080bd2575a7a60cb08f"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Aug 24 14:38:17 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Sep 12 18:39:57 2022 +0200"
      },
      "message": "Add IT test to check all metrics are available\n\nMake sure all the metric collectors are correctly bound.\n\nChange-Id: I70bbd7a480346c580557a3de72c1fc91e2cdd4a3\n"
    },
    {
      "commit": "43c932579b657ad605190080bd2575a7a60cb08f",
      "tree": "111132e276475c513f10da9e4726d870294d1d91",
      "parents": [
        "4ea8ded423eab289c094a0d9b1875747649db205"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Aug 22 15:35:20 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Sep 12 18:27:39 2022 +0200"
      },
      "message": "Dynamically load metrics collectors\n\nAllows dynamic loading of metrics collectors.\nThis groundwork will allow to easily add new metrics collectors\nto gather more metrics and informations about the\ngit repositories.\n\nAdded MetricsCollector interface to define collectors API.\n\nBug: Issue 16208\nChange-Id: Iabd18153b5faf43cb91044a9a02fcc7b7efda23f\n"
    },
    {
      "commit": "4ea8ded423eab289c094a0d9b1875747649db205",
      "tree": "30776fb5e03f48e6a1b770cd2b54de754598caf3",
      "parents": [
        "ace4c9b6e013a19cbec615f2d2b4f1890c133345"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Aug 22 15:53:06 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Aug 29 07:26:29 2022 +0000"
      },
      "message": "Make metricsNames non-static\n\nOnce the plugin will be able to collect multiple stats it won\u0027t\nbe possible anymore to have a static list of metrics.\n\nMake matricName part of the GitRepoMetricsCache instance.\n\nChange-Id: Id215a5a665899e72ee897864f5ee382939ab59b3\n"
    },
    {
      "commit": "ace4c9b6e013a19cbec615f2d2b4f1890c133345",
      "tree": "68f1a29f91799394e58ff0d20ea00fb579f50e2b",
      "parents": [
        "32203afc081ad031a80b023c11acb9b0d70174d2"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Jul 18 20:23:55 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Jul 18 22:07:35 2022 +0000"
      },
      "message": "Allow plugin to be reloaded\n\nThe plugin tries to register metrics every time is reloaded.\nThis raises an exception since metrics might already be registered in\nthe MetricRegistry.\n\nAvoid re-registering a metric if already present.\n\nBug: Issue 16082\nChange-Id: I616ec0f01cdf87efef15927401944e3473d21620\n"
    },
    {
      "commit": "32203afc081ad031a80b023c11acb9b0d70174d2",
      "tree": "209894e9a2ff8c93746d3987ba6f85d289f5dd29",
      "parents": [
        "53ab60fe31183d32543be60f6f3ec65977d8e4dc"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Jul 01 10:41:21 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Jul 01 10:08:44 2022 +0000"
      },
      "message": "Use original repository to collect stats\n\nMake sure to always work on the original repository, even in case of\nDelegateRepository.\n\nBug: Issue 15997\nChange-Id: Ifd09670f3e3a9d529816a0241fc3e81c15387d77\n"
    },
    {
      "commit": "53ab60fe31183d32543be60f6f3ec65977d8e4dc",
      "tree": "af70bea8308962b036a6eb6195a7d4f54e6a3677",
      "parents": [
        "7b03a85661ad0fa991502b280e4db33f97020e7d"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Jun 29 08:34:00 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Jul 01 10:08:21 2022 +0000"
      },
      "message": "Revert \"Extract original repo from DelegateRepository\"\n\nThis reverts commit 7b03a85661ad0fa991502b280e4db33f97020e7d.\n\nReason for revert: the visibility of the delegate() method was changed from package protected to public.\n\nChange-Id: Ieb39167559785c8faefd21106e56b5f2350aa8c6\n"
    },
    {
      "commit": "7b03a85661ad0fa991502b280e4db33f97020e7d",
      "tree": "975fb15d21d7f760d000f63833113c5064953c0c",
      "parents": [
        "e192c065bec62d66665ec2d16cb318e6ebb4fb4b"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Jun 13 22:50:36 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Jun 21 17:38:54 2022 +0200"
      },
      "message": "Extract original repo from DelegateRepository\n\nTo access the original repository in classes extending the\nDelegateRepository class, the delegate() method needs to be invoked.\n\nHowever, this method is package protected in Gerrit core.\n\nAs a workaround we added a DelegateRepositoryUnwrapper class in the\nsame namespace of DelegateRepository to get hold of the original repository.\n\nAdding the DelegateRepositoryUnwrapper jar in the Gerrit lib allows\nthe new class to be picked up by the class loader.\n\nBug: Issue 15997\n\nChange-Id: Ia3fbdc7e9629072c0019c44fbdfc201aa5b317b9\n"
    },
    {
      "commit": "e192c065bec62d66665ec2d16cb318e6ebb4fb4b",
      "tree": "af70bea8308962b036a6eb6195a7d4f54e6a3677",
      "parents": [
        "c79f46076424eaf16e62c66e3f03c487f91c2276"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Jun 08 21:07:28 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Wed Jun 08 21:15:35 2022 +0200"
      },
      "message": "Exclude test utils class from tests\n\nIf not ignored ConfigSetupUtils is considered a test suite\nand an initializationError is thrown because of the multiple\nclass constructors:\n\njava.lang.IllegalArgumentException: Test class can only have one constructor\n\nChange-Id: Ieae27e635ea1c3d0a3a884ef3240bacb6fcc8028\n"
    },
    {
      "commit": "c79f46076424eaf16e62c66e3f03c487f91c2276",
      "tree": "e9fc216c0b36a84df5dc039c2cdb6428b627687d",
      "parents": [
        "e439080dceabe48ef80aaa684ad85b81dbb7a5f8"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Jun 07 14:33:58 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Tue Jun 07 16:27:58 2022 +0200"
      },
      "message": "Add grace period to avoid collecting stats too often\n\nSome stats might be too heavy to compute.\nAdded a grace period to avoid too frequent collection.\n\nBug: Issue 15971\n\nChange-Id: I54adfe04e8aec8f7fd1b7d8bf12367422b5e04e1\n"
    },
    {
      "commit": "e439080dceabe48ef80aaa684ad85b81dbb7a5f8",
      "tree": "1e29c91e8e42c5c4d3e0799f14788df42fe22f45",
      "parents": [
        "124b420b8e3446eb3924b8306e3d50d51054cfa5"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Jun 03 13:27:45 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Jun 06 22:18:53 2022 +0200"
      },
      "message": "Only collect stats for enabled repositories\n\nCurrently stats are collected for all the repositories.\nAllow collection only for the enabled repositories.\n\nBug: Issue 15972\nChange-Id: Ifd638f97cdac401cea4a6dbdc554992810f88e76\n"
    },
    {
      "commit": "124b420b8e3446eb3924b8306e3d50d51054cfa5",
      "tree": "6ee8f809b0bf1ef7701625e80dd0a2ca663daba9",
      "parents": [
        "c0c17841ba17fa547008ddff39770335c9ed76c9"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Jun 03 12:48:08 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Jun 06 22:15:23 2022 +0200"
      },
      "message": "Add Utils class for tests\n\nMove common test setup logic in a Utils class.\n\nChange-Id: Ibc351af902d059c8f5cebb90adce3db7b4ce79c7\n"
    },
    {
      "commit": "c0c17841ba17fa547008ddff39770335c9ed76c9",
      "tree": "bba3523c69949dfc548286b58d5b73d93b8fe53b",
      "parents": [
        "b984e8d78a8dcf6831d908cb881b633519d37319"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Jun 03 19:15:29 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Jun 06 22:09:39 2022 +0200"
      },
      "message": "Only pass project name to UpdateGitMetricsTask\n\nUpdateGitMetricsTask only needs the repo name to extract metrics.\nMove the logic to build the repository in the task itself to avoid\nopening repositories too early.\n\nChange-Id: I26745dddc4d6bb70625060231b02a0c240e5bc13\n"
    },
    {
      "commit": "b984e8d78a8dcf6831d908cb881b633519d37319",
      "tree": "7fc42812360d2b3e876b0d42e37bbc775022c0f3",
      "parents": [
        "a2c3f297295360647673761605bebfd5f7033e7c"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Jun 03 17:23:09 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Jun 06 20:04:54 2022 +0000"
      },
      "message": "No need to use a lambda when populating stats\n\nThe function to collect the statistic is called synchronously anyway.\nNo need to have it, we can pass the value directly.\n\nChange-Id: I4d07d8bc57db59855f5b7cb8cf31ecacb0c12254\n"
    },
    {
      "commit": "a2c3f297295360647673761605bebfd5f7033e7c",
      "tree": "8b8b0e1766525e42a3e0b63417ab70287e20d7c4",
      "parents": [
        "eede6a4d0b0bbf72eba0d5798c49083854a79a58"
      ],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Thu Jun 02 19:52:03 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Mon Jun 06 22:03:54 2022 +0200"
      },
      "message": "Make GitRepoMetricsCache a Singleton\n\nRefactor GitRepoMetricsCache to be a singleton and add\naccessor methods to access the metrics.\n\nChange-Id: I48ab46c56f86dd819b3ac9c2b60b306f93513d06\n"
    },
    {
      "commit": "eede6a4d0b0bbf72eba0d5798c49083854a79a58",
      "tree": "85a4a866bfc3058b8b21d32395beac6a5e334771",
      "parents": [],
      "author": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Jun 03 09:23:40 2022 +0200"
      },
      "committer": {
        "name": "Fabio Ponciroli",
        "email": "ponch78@gmail.com",
        "time": "Fri Jun 03 09:23:40 2022 +0200"
      },
      "message": "Initial plugin prototype\n\nThe initial version of the plugin only contains a single metric\ncollector.\n\nAt startup numberOfMetrics * numberOFProjects metrics are statically registered.\nIt would be better to dynamically register them when sample come in.\n\nChange-Id: I529c42d5cda9602a421ecba6dc18b3449716a70c\n"
    }
  ]
}
