)]}'
{
  "log": [
    {
      "commit": "a67e40477360abc6656cb162f08a340cf555caa8",
      "tree": "2d090204dc45c60787ada6fa329744022c96d8df",
      "parents": [
        "32ac0214978826fa3736c75c18c0e46bfae1c2f3"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Oct 03 09:50:21 2025 -0700"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Oct 03 09:51:10 2025 -0700"
      },
      "message": "Add deprecation notice\n\nChange-Id: Iedbfdb3798fc2409b8cebf999bb096b3607d9438\n"
    },
    {
      "commit": "32ac0214978826fa3736c75c18c0e46bfae1c2f3",
      "tree": "15f7e033660e888e249436bba16748bb1b4a9c28",
      "parents": [
        "fa12a3f9d752255edaa2a9d636262d785830b5bb"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Jul 06 16:50:15 2025 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Jul 06 16:51:49 2025 +0100"
      },
      "message": "Adapt to changes of Gerrit permission backend in Ib5dab66\n\nThe Change Ib5dab66 has rafactored the classes and interfaces\nof the permission backend for allowing permissions of changes\nthat have not been created yet.\n\nAdapt the virtualhost implementation of the permission backend\nto the new interface.\n\nChange-Id: I6bfca7a4e05bc3dc069c2f4c2dc446547767747b\n"
    },
    {
      "commit": "fa12a3f9d752255edaa2a9d636262d785830b5bb",
      "tree": "24572f32f7cf1395fd6af00c85ef693659b83374",
      "parents": [
        "40850906c1473562db23be8344f34d7aa6bbe56c"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Mar 06 13:26:16 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Mar 06 13:27:36 2025 +0000"
      },
      "message": "Make VirtualHostConfig a Singleton for avoiding multiple parsing\n\nThe VirtualHostConfig object was created every single time that\nas user needed to be evaluated for his ACLs, causing the file loading\nand parsing multiple times per second.\n\nIt is very unlikely that a configuration would change without a\nGerrit restart, hence making it a Singleton it is safe.\n\nChange-Id: I517f82cfdca72a34edde7f8d61151cea36072266\n"
    },
    {
      "commit": "40850906c1473562db23be8344f34d7aa6bbe56c",
      "tree": "95ee5f4e1ec0d38f21df6a4e8bf908524d769f93",
      "parents": [
        "6aaf973f366100cc02bc185458a0eb02a1cd2d56"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Feb 22 23:14:58 2025 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat Feb 22 23:14:58 2025 +0000"
      },
      "message": "Adapt to master with RefPermissionOrLabel\n\nGerrit master introduced RefPermissionOrLabel which would need\nthe virtualhost plugin to rename its overridden methods.\n\nChange-Id: I82973fc19eb0ce6451a1ef60ce790b844ea59854\n"
    },
    {
      "commit": "6aaf973f366100cc02bc185458a0eb02a1cd2d56",
      "tree": "6759cbf91fc957148e98b0af68250bc9063fa7db",
      "parents": [
        "54bc17d2531b2165e7a1b1c24d6eb967b18cfe4f"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sat May 25 12:51:06 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jul 04 11:51:44 2024 +0100"
      },
      "message": "Implement the PermissionBackend.filterQueryChanges() for queries speedup\n\nWhen filtering a large site like GerritHub.io and selecting\na small number of projects, it is paramount to reduce the cardinality\nof the results returned by Lucene and avoid CPU and memory overload\nof post filtering a large number of changes.\n\nUse the projects configuration in virtualhost.config for adding an\nextra query filter and slash the number of entries to filter for\npermissions.\n\nDepends-On: Change 426537\nChange-Id: I2dd78a6053baecd5d37fcce1ae5fe458b23e4a80\n"
    },
    {
      "commit": "54bc17d2531b2165e7a1b1c24d6eb967b18cfe4f",
      "tree": "a9f17782c11d43c4ea36a7e167e1c658f9545146",
      "parents": [
        "78066fc41cacd0552e23366f492712c9b941fdf7"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jul 04 09:59:21 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Thu Jul 04 10:00:46 2024 +0100"
      },
      "message": "Mention explicitly that general regex aren\u0027t supported\n\nThe general regex were neither explicitly allowed nor forbidden;\nadd a specific note in the documentation and checks in the code\nand tests for making sure that the only general regex allowed\nis ^.*\n\nChange-Id: I61d51430e5586f805a4f7691ac6c865e0afc78b8\n"
    },
    {
      "commit": "78066fc41cacd0552e23366f492712c9b941fdf7",
      "tree": "e63c5af05ec0cd309a790c8590410ed5748e5584",
      "parents": [
        "bd7602523971487416a4e987a0925f8a57ebfbe0"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Apr 19 17:14:39 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Apr 19 21:05:52 2024 +0100"
      },
      "message": "Do not get HttpServletRequest in SSH and SendMail threads\n\nWhen asking for the canonical web url in a SSH or SendMail\nthread it isn\u0027t useful to request the HttpServletRequest and\ncause Guice exceptions: it is way better to just give up and\naccept the default behaviour in Gerrit.\n\nAlso, when the HttpServletRequest cannot be obtained\nthe Guice exception to manage is ProvisionException.\n\nChange-Id: Ife5f71285a91c95b161aeb2ce4684ba2261d1aa6\n"
    },
    {
      "commit": "bd7602523971487416a4e987a0925f8a57ebfbe0",
      "tree": "2ad597b4679c049e0847e8c8011c860de72c69e5",
      "parents": [
        "f94abd64a288e5c25adee4d3e88bf79990f77c5b"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Apr 19 12:33:48 2024 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Apr 19 13:29:12 2024 +0100"
      },
      "message": "Fix OutOfScopeException getting the serverName from HTTP request\n\nWhenever the caller was coming from an HTTP thread that was not\ncoming from a Guice filter (e.g. GitHub OAuth filter) the request\nfor the canonicalWebUrl was throwing an OutOfScopeException.\n\nOne sample scenario was the following stack of calls:\n\nc.g.g.m.v.VirtualHostHttpCanonicalWebUrlProvider.lambda$getServerName\njava.base/java.util.Optional.map\nc.g.g.m.v.VirtualHostHttpCanonicalWebUrlProvider.getServerName\nc.g.g.m.v.VirtualHostHttpCanonicalWebUrlProvider.get\nc.g.g.p.g.o.CanonicalWebUrls.getCannonicalWebUrl\nc.g.g.p.g.o.CanonicalWebUrls.getOAuthFinalRedirectUrl\nc.g.g.p.g.o.OAuthProtocol.getAuthorizationUrl\nc.g.g.p.g.o.OAuthProtocol.loginPhase1\nc.g.g.p.g.o.GitHubLogin.login\nc.g.g.p.g.o.OAuthWebFilter.login\nc.g.g.p.g.o.OAuthWebFilter.doFilter\nc.g.g.p.g.o.OAuthFilter.doFilter\norg.eclipse.jetty.servlet.FilterHolder.doFilter\n\nBecause the request for a canonical web url was coming\nfrom OAuthFilter.doFilter invoked directly from Jetty,\nthe Guice filter did not manage to inject the current\nrequest, making the lamba execution of the map to\nthrow an unchecked exception.\n\nBy swapping the check between the local thread the scoped HTTP\nrequest and catching the OutOfScopeException, the above condition\nwould just return into an empty server name.\n\nChange-Id: Ie645fa3e07d128d6fbdbd0624196e7c43d35929c\n"
    },
    {
      "commit": "f94abd64a288e5c25adee4d3e88bf79990f77c5b",
      "tree": "af44316bfd01d6450b421869bfb27fa40d5ede83",
      "parents": [
        "ce5c1b55a07fe09307c85869b94fe16d3acc3969"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Sat Nov 25 08:34:53 2023 +0000"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Wed Mar 20 12:18:26 2024 +0000"
      },
      "message": "Provide virtual host name in git command outputs\n\nWhen pushing changes to Gerrit, the URL for each of them will be\nreturned in the push command output. Previously those URLs used the\nname of the main host.\n\nTo fix this, `VirtualHostHttpCanonicalWebUrlProvider` needs to be\naware of the optional request provider, so that we can extract the\nserver name from the request processed on a different thread where our\n`ThreadLocal` was not set. Additionally, it needs to keep its state as\na singleton.\n\nBug: Issue 311925527\nChange-Id: I8259aa99b9924daea9749a999f2fee81c7bf08ed\n"
    },
    {
      "commit": "ce5c1b55a07fe09307c85869b94fe16d3acc3969",
      "tree": "3e0ced287abe1e634b30ddbbaa6d6c41e0b01d0c",
      "parents": [
        "0c815ffa9efa6ca611b64a61a80d07f96475e2c5"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Fri Oct 27 17:45:17 2023 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Fri Oct 27 17:45:17 2023 +0100"
      },
      "message": "Copy server port number from paren cannonical URL\n\nWhen `gerrit.cannonicalWebUrl` contains port number it also must be\ncopied to the virutal host HTTP cannonical web url, otherwise\nredirection URLs in Gerrit will not work.\n\nBug: Issue 307967275\nChange-Id: Ic472438dbad44ae83445c257b7d6a859130dd431\n"
    },
    {
      "commit": "0c815ffa9efa6ca611b64a61a80d07f96475e2c5",
      "tree": "1d193c5f51196f8376c15c42f40d37a4662fb6bd",
      "parents": [
        "52d5f4f248bd00bf418cf73ad254eac6d009d102"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Tue Sep 19 12:04:13 2023 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz.luksza@gmail.com",
        "time": "Tue Sep 19 13:55:10 2023 +0100"
      },
      "message": "Add `X-Forwarded-Host` section to the README\n\nTo ensure the plugin works correctly in various network setups the\nsection about `X-Forwarded-Host` was added to the README.md file.\n\nChange-Id: Ib27aefca39c5be6767d258145a39a2f9d0b4e7c2\n"
    },
    {
      "commit": "52d5f4f248bd00bf418cf73ad254eac6d009d102",
      "tree": "ab9e0eb61cb101b1dd05e63f94554b915393a63c",
      "parents": [
        "792c3d697ff93c27898d98efa20ab37a820a893f",
        "963e5e092c657dd147a78cf1c5b710a1e812be15"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Sep 18 19:57:50 2023 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Sep 18 19:57:50 2023 +0000"
      },
      "message": "Merge \"Honor X-FORWARDED-HOST when negociating server name\""
    },
    {
      "commit": "963e5e092c657dd147a78cf1c5b710a1e812be15",
      "tree": "fd4bbb49e38c5d6d3092e4ef599c208319772171",
      "parents": [
        "8ab08cce9685c0cc8db590f5f4fab1c99dd95fe9"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz@luksza.org",
        "time": "Mon Sep 18 13:54:24 2023 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz@luksza.org",
        "time": "Mon Sep 18 15:47:13 2023 +0100"
      },
      "message": "Honor X-FORWARDED-HOST when negociating server name\n\nIn the environemnt where there are multiple hops between Gerrit and a\nreverse-proxy server (eg. HTTPS \u003d\u003e HAProxy \u003d\u003e Gerrit). The HTTP request\nserver name may not be actually the name of user facing host. For this\npurpose a special HTTP header `X-FORWARDED_HOST`[1] is used.\n\nThe VirutalHostFilter should first check for that header, then fallback\nto the request server name.\n\n[1] https://www.rfc-editor.org/rfc/rfc7239.html#section-5.3\n\nBug: Issue 300877890\nChange-Id: I5a89c216754af7db19b4967f8daaa1c5284b695c\n"
    },
    {
      "commit": "792c3d697ff93c27898d98efa20ab37a820a893f",
      "tree": "b02ce604ed64045668f3934fc95fc1b5d8ef8a6f",
      "parents": [
        "8ab08cce9685c0cc8db590f5f4fab1c99dd95fe9"
      ],
      "author": {
        "name": "Dariusz Luksza",
        "email": "dariusz@luksza.org",
        "time": "Sat Sep 16 14:05:04 2023 +0100"
      },
      "committer": {
        "name": "Dariusz Luksza",
        "email": "dariusz@luksza.org",
        "time": "Mon Sep 18 10:50:29 2023 +0100"
      },
      "message": "Override HttpCanonicalWebUrlProvider\n\nThe `canonicalWebUrl` is used in many places in Gerrit core as well as\nin other plugins. It provides the user facing site name that is used to\nbuild various urls.\n\nAs in the virtualhost plugin we deal with multiple user facing site\nnames, we should override the default HTTP `canonicalWebUrl` and return\nvirtual host name, instead of the host name.\n\nBug: Issue 299833801\nDepends-On: I8321b153782e0bf8131c66ebe477902a434c6dc1\nChange-Id: I641a7c7d8b8189cd9f33e188fbdc077bc0282ccb\n"
    },
    {
      "commit": "8ab08cce9685c0cc8db590f5f4fab1c99dd95fe9",
      "tree": "7056fb1e1e188bf0a17aa4c7e6fc19df479e64c0",
      "parents": [
        "c26385604bc42bcb953754a822257c4c8a9b7d65"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jun 14 22:08:21 2023 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jun 14 22:08:21 2023 +0100"
      },
      "message": "Fix test dependencies in BUILD\n\nUse predefined test dependencies definitions\nfor running the plugin tests.\n\nChange-Id: I26ddc1e7f8dd33532b3474b1bc3357b85c927cfa\n"
    },
    {
      "commit": "c26385604bc42bcb953754a822257c4c8a9b7d65",
      "tree": "e6f57ce88add762fd45584f7c5502f4ea1e1d4df",
      "parents": [
        "6f8b732b505eb8e623828285a0b6d940a111a626"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jun 14 22:04:47 2023 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Wed Jun 14 22:04:47 2023 +0100"
      },
      "message": "Adapt plugin name and URL in BUILD file\n\nChange-Id: Ib3bd5856e8928c3b5fdc30ee46a42ffb87bb5596\n"
    },
    {
      "commit": "6f8b732b505eb8e623828285a0b6d940a111a626",
      "tree": "49f671cb86133c2b044620e7a3ca6d30749eca47",
      "parents": [
        "30f580eb8251c26263a99dc9e94e645ddc8c25d4"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Tue Jun 13 07:30:45 2023 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Wed Jun 14 18:39:59 2023 +0200"
      },
      "message": "Adapt the code to recent core changes\n\nBug: Issue 17029\nChange-Id: Ie39e1ac14512267292418f160fc4f37570fb99fe\n"
    },
    {
      "commit": "30f580eb8251c26263a99dc9e94e645ddc8c25d4",
      "tree": "e20f70ec2407b45e3d428b9edae711dbf51cab46",
      "parents": [
        "46e9112a27e5a41f6703371ebf3ee57466343426"
      ],
      "author": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Tue Jun 13 07:33:11 2023 +0200"
      },
      "committer": {
        "name": "David Ostrovsky",
        "email": "david@ostrovsky.org",
        "time": "Tue Jun 13 07:33:14 2023 +0200"
      },
      "message": "Format source code using google-java-format\n\nTo follow the java style used by gerrit core and the majority of gerrit\nplugins, format the code using google-java-format version 1.7.\n\nChange-Id: I5724e766eda231b064030c11a167ff3768d2c247\n"
    },
    {
      "commit": "46e9112a27e5a41f6703371ebf3ee57466343426",
      "tree": "98ae87b2774c861b5c9df610d90b2e319fc3d9c8",
      "parents": [
        "2687d84d52e21dcc309bac078691a84e66a9eab6"
      ],
      "author": {
        "name": "Paladox none",
        "email": "thomasmulhall410@yahoo.com",
        "time": "Fri Oct 06 15:11:35 2017 +0000"
      },
      "committer": {
        "name": "Paladox none",
        "email": "thomasmulhall410@yahoo.com",
        "time": "Sat Oct 07 10:58:59 2017 +0000"
      },
      "message": "Adapt to updated PermissionBackend#ForProject interface\n\nChange-Id: I8d55c8f6330f1e2184ff41e622aa84214224b173\n"
    },
    {
      "commit": "2687d84d52e21dcc309bac078691a84e66a9eab6",
      "tree": "48eaa3a86b93e511ff7ac77498a52a98bbb8759c",
      "parents": [
        "2604d577f88b990f828d7765ace375d37d804a62"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri May 26 07:54:54 2017 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Mon Jun 26 14:35:49 2017 +0100"
      },
      "message": "Filter projects based on virtual host config\n\nAllow to filter visibility and access to projects based on\nGerrit virtual host configuration.\n\nDefault visibility applies to non matching hosts and SSH access.\n\nChange-Id: I14b977b9f6182a4586a777b4fe5b61ed5f2a0fa3\n"
    },
    {
      "commit": "2604d577f88b990f828d7765ace375d37d804a62",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [],
      "author": {
        "name": "David Pursehouse",
        "email": "dpursehouse@collab.net",
        "time": "Sat Jun 24 00:05:31 2017 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Jun 24 00:05:31 2017 +0000"
      },
      "message": "Initial empty repository\n"
    }
  ]
}
