)]}'
{
  "log": [
    {
      "commit": "d93016d2d29354580e330f3fa224f0cc673b15d8",
      "tree": "ea151712da404a0e2788272c9011ce655be782ae",
      "parents": [
        "3349fbc9ecc160937dfe250008e144c258128eff"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Thu Nov 06 14:55:13 2025 +0100"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Thu Nov 06 15:07:36 2025 +0100"
      },
      "message": "Add missing AWS SDK dependencies used by the plugin at runtime\n\nand sort dependencies.\n\nChange-Id: I285a3633b08ab101a24f0f17b72a8cd24f02119b\n"
    },
    {
      "commit": "3349fbc9ecc160937dfe250008e144c258128eff",
      "tree": "411323d9f81d61efb77033733705a50d4a66b0fe",
      "parents": [
        "5580a45e57c84e51bf56f68e2c01c9c2970f8c8d"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Tue Oct 14 12:49:03 2025 +0200"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Mon Oct 20 14:08:03 2025 +0200"
      },
      "message": "Upgrade dependencies and migrate to latest AWS SDK API\n\nUpdate dependencies\n- AWS Java SDK to 2.35.7\n- Docker Java API to 3.6.0\n- dynamodb-lock-client to 1.4.0\n- jackson to 2.20.0\n- jna to 5.18.1\n- joda-time to 2.14.0\n- testcontainers to 1.21.3\n\nMigrate to the current AWS Java SDK API and remove\ndependencies of the old one.\n\nChange-Id: Ib5bae5e3fbe4f8fd552ada864350500a4079f445\n"
    },
    {
      "commit": "5580a45e57c84e51bf56f68e2c01c9c2970f8c8d",
      "tree": "d04d97f74e0bf4fe2acb0924349634d1f24e7367",
      "parents": [
        "dd5e6e4f441863c65a994cbf6b16162b1cf21817"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Mon Oct 06 20:16:23 2025 +0200"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Mon Oct 06 20:18:26 2025 +0200"
      },
      "message": "Revert \"Add deprecation notice\"\n\nThis reverts commit dd5e6e4f441863c65a994cbf6b16162b1cf21817.\n\nWe plan to maintain this plugin for use in a high-availability scenario\nusing high-availability plugin.\n\nChange-Id: I5898c66d2e629b0aaddaccf84559c8d9b2c15961\n"
    },
    {
      "commit": "dd5e6e4f441863c65a994cbf6b16162b1cf21817",
      "tree": "e39f7bb77f0e7fd4732f9b7e1dd50136e28836ca",
      "parents": [
        "9ef6b50dd390675ce19fcd43e6acd5225b61dc49"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Oct 03 09:20:59 2025 -0700"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Oct 03 09:22:21 2025 -0700"
      },
      "message": "Add deprecation notice\n\nChange-Id: If7920e2148e8659d35811f4ed2323d3fbc81e2ad\n"
    },
    {
      "commit": "9ef6b50dd390675ce19fcd43e6acd5225b61dc49",
      "tree": "d04d97f74e0bf4fe2acb0924349634d1f24e7367",
      "parents": [
        "fc2a355f91b675eb9b87f4d819a564c2b35e38bb",
        "0a93964e53d4e81266bd11ada41b9a09342e4936"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Jun 16 08:55:11 2025 +0200"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Jun 16 08:55:14 2025 +0200"
      },
      "message": "Merge branch \u0027stable-3.12\u0027\n\n* stable-3.12:\n  Clarify constraints of project deletions\n  Introduce projectVersion cache\n  Rename getPathFromDynamoDB to getItemFromDynamoDB\n  Handle project deletion\n  Verify formatting using GJF 1.7\n\nChange-Id: I7155fcd099790acd8a45f8f857bc3e015083bcd8\n"
    },
    {
      "commit": "0a93964e53d4e81266bd11ada41b9a09342e4936",
      "tree": "d04d97f74e0bf4fe2acb0924349634d1f24e7367",
      "parents": [
        "fc2a355f91b675eb9b87f4d819a564c2b35e38bb",
        "8a3a20f81ba11cbdade32496b96161fcc313a627"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Jun 16 08:53:59 2025 +0200"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Jun 16 08:54:23 2025 +0200"
      },
      "message": "Merge branch \u0027stable-3.11\u0027 into stable-3.12\n\n* stable-3.11:\n  Clarify constraints of project deletions\n  Introduce projectVersion cache\n  Rename getPathFromDynamoDB to getItemFromDynamoDB\n  Handle project deletion\n  Verify formatting using GJF 1.7\n\nChange-Id: I1a02b7ba84ef8a6a07fe1464b09cf0b2fb8b071a\n"
    },
    {
      "commit": "8a3a20f81ba11cbdade32496b96161fcc313a627",
      "tree": "d04d97f74e0bf4fe2acb0924349634d1f24e7367",
      "parents": [
        "a2879f2b15500aefc18fd8f1532b3c1bd1b46e77",
        "feac10f71f09c012ce33e7aabd8f34ece7b09a96"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Jun 16 08:52:36 2025 +0200"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Jun 16 08:52:36 2025 +0200"
      },
      "message": "Merge branch \u0027stable-3.10\u0027 into stable-3.11\n\n* stable-3.10:\n  Clarify constraints of project deletions\n  Introduce projectVersion cache\n  Rename getPathFromDynamoDB to getItemFromDynamoDB\n  Handle project deletion\n  Verify formatting using GJF 1.7\n\nChange-Id: Ica81d9160697e52becdafcd58f91e81e614df6e7\n"
    },
    {
      "commit": "feac10f71f09c012ce33e7aabd8f34ece7b09a96",
      "tree": "d04d97f74e0bf4fe2acb0924349634d1f24e7367",
      "parents": [
        "bbb7839be030a83ef645678bb6f8016867e5ec06",
        "a01a6fa86c8b1cb1c46f02b26fc497bc165c4426"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Jun 16 08:50:52 2025 +0200"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Jun 16 08:51:09 2025 +0200"
      },
      "message": "Merge branch \u0027stable-3.9\u0027 into stable-3.10\n\n* stable-3.9:\n  Clarify constraints of project deletions\n  Introduce projectVersion cache\n  Rename getPathFromDynamoDB to getItemFromDynamoDB\n  Handle project deletion\n  Verify formatting using GJF 1.7\n\nChange-Id: I78375de50478505a21369ed6faf7a80819e48520\n"
    },
    {
      "commit": "a01a6fa86c8b1cb1c46f02b26fc497bc165c4426",
      "tree": "63631a40326905c3ba8d0d4f738614e46a08daf5",
      "parents": [
        "fc0df6d2ca2592660eae033161f3866d8e075fb4",
        "90c748ae3e1e9c25f4adf4fda18ecd4e920ec207"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Jun 03 09:35:35 2025 +0200"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Sun Jun 15 23:44:04 2025 -0700"
      },
      "message": "Merge branch \u0027stable-3.8\u0027 into stable-3.9\n\n* stable-3.8:\n  Clarify constraints of project deletions\n  Introduce projectVersion cache\n  Rename getPathFromDynamoDB to getItemFromDynamoDB\n  Handle project deletion\n  Verify formatting using GJF 1.7\n\nNote that since 3.9 formatting version is done with GJF 1.24, so the\n\"Verify formatting using GJF 1.7\" commit was dropped.\n\nChange-Id: I6e6fb91204da0bc267f453d1721a109f60f4c0f2\n"
    },
    {
      "commit": "90c748ae3e1e9c25f4adf4fda18ecd4e920ec207",
      "tree": "86fb0a5dc02ec11f61922095190a8bebbccee621",
      "parents": [
        "fc0df6d2ca2592660eae033161f3866d8e075fb4",
        "bf45f3671be637767789462a949bf537c449d6fd"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Jun 03 09:33:21 2025 +0200"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Jun 03 09:33:21 2025 +0200"
      },
      "message": "Merge branch \u0027stable-3.7\u0027 into stable-3.8\n\n* stable-3.7:\n  Clarify constraints of project deletions\n  Introduce projectVersion cache\n  Rename getPathFromDynamoDB to getItemFromDynamoDB\n  Handle project deletion\n  Verify formatting using GJF 1.7\n\nChange-Id: I268969751d31dcbefa858f1299b41aaf43982d1a\n"
    },
    {
      "commit": "bf45f3671be637767789462a949bf537c449d6fd",
      "tree": "86fb0a5dc02ec11f61922095190a8bebbccee621",
      "parents": [
        "fc0df6d2ca2592660eae033161f3866d8e075fb4",
        "c7d5d7a352efd2804cbdf71f1ce525b737772d47"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Jun 03 09:32:59 2025 +0200"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Jun 03 09:32:59 2025 +0200"
      },
      "message": "Merge branch \u0027stable-3.6\u0027 into stable-3.7\n\n* stable-3.6:\n  Clarify constraints of project deletions\n  Introduce projectVersion cache\n  Rename getPathFromDynamoDB to getItemFromDynamoDB\n  Handle project deletion\n  Verify formatting using GJF 1.7\n\nChange-Id: I651972d16c8dab17a31f8ffaa44738b76e173027\n"
    },
    {
      "commit": "c7d5d7a352efd2804cbdf71f1ce525b737772d47",
      "tree": "86fb0a5dc02ec11f61922095190a8bebbccee621",
      "parents": [
        "fc0df6d2ca2592660eae033161f3866d8e075fb4",
        "eb91b8732603bc088e03df58c876de2e7f2c68e7"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Jun 03 09:32:36 2025 +0200"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Jun 03 09:32:36 2025 +0200"
      },
      "message": "Merge branch \u0027stable-3.5\u0027 into stable-3.6\n\n* stable-3.5:\n  Clarify constraints of project deletions\n  Introduce projectVersion cache\n  Rename getPathFromDynamoDB to getItemFromDynamoDB\n  Handle project deletion\n  Verify formatting using GJF 1.7\n\nChange-Id: I927b9b80a277e7ed737963b449c6b7f970f71b19\n"
    },
    {
      "commit": "eb91b8732603bc088e03df58c876de2e7f2c68e7",
      "tree": "86fb0a5dc02ec11f61922095190a8bebbccee621",
      "parents": [
        "038d806e7e5a992ca4fbeac75cb72eaef97c0e06",
        "a628572dbf288c0935b3902cdfe190705f37b221"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Jun 03 09:32:00 2025 +0200"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Tue Jun 03 09:32:00 2025 +0200"
      },
      "message": "Merge branch \u0027stable-3.4\u0027 into stable-3.5\n\n* stable-3.4:\n  Clarify constraints of project deletions\n  Introduce projectVersion cache\n  Rename getPathFromDynamoDB to getItemFromDynamoDB\n  Handle project deletion\n  Verify formatting using GJF 1.7\n\nChange-Id: I65752e42cd9d7d788d05ccdb1c329067f33b1051\n"
    },
    {
      "commit": "a628572dbf288c0935b3902cdfe190705f37b221",
      "tree": "a0df099a5d55a0e868fcfd36985a090119e71f4f",
      "parents": [
        "9b7600c91d0f1c2b98079cf0dfdd115a71fa3858"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Jan 15 13:02:37 2025 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri May 30 03:07:20 2025 -0700"
      },
      "message": "Clarify constraints of project deletions\n\nUpdate the documentation clarifying that project deletion and\nre-creation (with the same name) has to wait for the cache TTL to expire\nafter a duration of 60 seconds.\n\nChange-Id: I55910af11366926fa1df87f813f431bdc1c5ff1b\n"
    },
    {
      "commit": "9b7600c91d0f1c2b98079cf0dfdd115a71fa3858",
      "tree": "06c9e175c1dc524798dc01181c818f96a2dbc3ec",
      "parents": [
        "aef2b566589c3c5a00475082e432d4190c7ab191"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Nov 25 21:53:07 2024 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri May 30 03:07:15 2025 -0700"
      },
      "message": "Introduce projectVersion cache\n\nIntroduces a caching mechanism to reduce the number of requests to\nDynamoDB by storing the current life version of a project.\n\nCherry-picked from bae28b0cca4900dacbedce70c745df8834633222.\nAdapted DynamoDBRefDatabaseIT test to avoid compilation error:\n\ncannot infer type arguments for TypeLiteral\u003cT\u003e\n\u0027\u003c\u003e\u0027 with anonymous inner classes is not supported in -source 8\n\nChange-Id: Ia260b0c7a684b3314bd32562eb0602fd4d54a20e\n"
    },
    {
      "commit": "aef2b566589c3c5a00475082e432d4190c7ab191",
      "tree": "3c4130c0111fb55c3c0cb62beecf400dbe00d786",
      "parents": [
        "f2a5d4fcdeee7fb20e01dffa673b5cace544e87a"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Nov 25 20:03:11 2024 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri May 30 03:07:09 2025 -0700"
      },
      "message": "Rename getPathFromDynamoDB to getItemFromDynamoDB\n\nThe name is more representative of what the method actually does.\n\nChange-Id: I5ff4af6d8655abffe057bbc02c09c3167aee37d5\n"
    },
    {
      "commit": "f2a5d4fcdeee7fb20e01dffa673b5cace544e87a",
      "tree": "69e5e39e061529ca4b60511d231a8f4741df268d",
      "parents": [
        "db1de2bcf0d94d2c109e319fa05539c026d04777"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Nov 25 17:26:04 2024 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri May 30 10:06:40 2025 +0000"
      },
      "message": "Handle project deletion\n\nHandle the removal of a project with a soft-delete approach.  Rather\nthan executing a table scan that might be heavy from a latency and from\na RCUs consumption prospective, we flag the existing items as obsolete\nby bumping up a project version refSpec in the form of `|project-name`,\nto which we associate the current version `version`.\n\nThis way, deleting a project is just as simple as bumping up its version\nvalue.\n\nWe then prepend the current version to the refSpec when looking up\nitems, so that we can easily ignore obsolete entries.\n\nFor example, if a project `foo` is deleted a new entry is created as\nsuch:\n\n| refPath | refValue |\n| |foo    | 1        |\n\nIf then a new project is created, new refSpecs will be prefixed with the\nnew project version:\n\n| refPath                  | refValue    |\n| |1/foo/refs/heads/master | 3355b5b8b73 |\n\nWe selected the pipe symbol (|) as a prefix because it is prohibited in\nrepository names, ensuring no ambiguity arises with actual repository\nnames.\n\nChange-Id: I2cfdf2e812c9e68735b66eef3b756ec6084bf697\n"
    },
    {
      "commit": "db1de2bcf0d94d2c109e319fa05539c026d04777",
      "tree": "40c41fddea41cdae8f387a6c8cedd19b7146ecca",
      "parents": [
        "8f8dc4694fe0307360f1e668d3c8e139034d669b"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri May 30 09:55:30 2025 +0000"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri May 30 09:55:30 2025 +0000"
      },
      "message": "Verify formatting using GJF 1.7\n\nChange I216f69ea set the default formatting version to GJF 1.24.0,\nhowever older branches are still formatted with GJF 1.7.\n\nExplicitly set the GJF version to 1.7 so that we can still have\nsuccessful validation for older branches.\n\nChange-Id: I180d68cee70c7351d2ffbaaf1fc84eb1e0047907\n"
    },
    {
      "commit": "fc2a355f91b675eb9b87f4d819a564c2b35e38bb",
      "tree": "d04d97f74e0bf4fe2acb0924349634d1f24e7367",
      "parents": [
        "f95ce8f53a068539b2ee1bc13386efe5f5f70914",
        "a2879f2b15500aefc18fd8f1532b3c1bd1b46e77"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Jan 15 15:54:54 2025 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Jan 15 15:54:59 2025 +0100"
      },
      "message": "Merge branch \u0027stable-3.11\u0027\n\n* stable-3.11:\n  Clarify constraints of project deletions\n  Introduce projectVersion cache\n  Rename getPathFromDynamoDB to getItemFromDynamoDB\n  Handle project deletion\n  Add visible-assertion as test dependency\n\nChange-Id: I198de0057f58c3372273b3364ad126db2bc4cf35\n"
    },
    {
      "commit": "a2879f2b15500aefc18fd8f1532b3c1bd1b46e77",
      "tree": "d04d97f74e0bf4fe2acb0924349634d1f24e7367",
      "parents": [
        "f95ce8f53a068539b2ee1bc13386efe5f5f70914",
        "bbb7839be030a83ef645678bb6f8016867e5ec06"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Jan 15 15:53:55 2025 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Jan 15 15:54:01 2025 +0100"
      },
      "message": "Merge branch \u0027stable-3.10\u0027 into stable-3.11\n\n* stable-3.10:\n  Clarify constraints of project deletions\n  Introduce projectVersion cache\n  Rename getPathFromDynamoDB to getItemFromDynamoDB\n  Handle project deletion\n  Add visible-assertion as test dependency\n\nChange-Id: I1badfa76f731c1f6a39ce0d783783f4956e24b9a\n"
    },
    {
      "commit": "bbb7839be030a83ef645678bb6f8016867e5ec06",
      "tree": "d04d97f74e0bf4fe2acb0924349634d1f24e7367",
      "parents": [
        "bae28b0cca4900dacbedce70c745df8834633222"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Jan 15 13:02:37 2025 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Wed Jan 15 15:48:13 2025 +0100"
      },
      "message": "Clarify constraints of project deletions\n\nUpdate the documentation clarifying that project deletion and\nre-creation (with the same name) has to wait for the cache TTL to expire\nafter a duration of 60 seconds.\n\nChange-Id: I55910af11366926fa1df87f813f431bdc1c5ff1b\n"
    },
    {
      "commit": "bae28b0cca4900dacbedce70c745df8834633222",
      "tree": "9e31911c9b98e794e553f19e4a9d37532ec0600d",
      "parents": [
        "84eea45780c555349ddaa0c233982a8895e0db75"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Nov 25 21:53:07 2024 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Dec 23 10:15:06 2024 +0100"
      },
      "message": "Introduce projectVersion cache\n\nIntroduces a caching mechanism to reduce the number of requests to\nDynamoDB by storing the current life version of a project.\n\nChange-Id: Ia260b0c7a684b3314bd32562eb0602fd4d54a20e\n"
    },
    {
      "commit": "84eea45780c555349ddaa0c233982a8895e0db75",
      "tree": "3908eefb62ad9b523a86e3dd411a19c0c796c823",
      "parents": [
        "461249fe2049596c5e0264ac8226c18ab720d378"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Nov 25 20:03:11 2024 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Nov 25 20:03:11 2024 +0100"
      },
      "message": "Rename getPathFromDynamoDB to getItemFromDynamoDB\n\nThe name is more representative of what the method actually does.\n\nChange-Id: I5ff4af6d8655abffe057bbc02c09c3167aee37d5\n"
    },
    {
      "commit": "461249fe2049596c5e0264ac8226c18ab720d378",
      "tree": "225e17e1df737d8aa6740322d1616df509fedf7c",
      "parents": [
        "ffaa0f835e746be50a4e6bef99ab6f60d89dd466"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Nov 25 17:26:04 2024 +0100"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Mon Nov 25 19:59:05 2024 +0100"
      },
      "message": "Handle project deletion\n\nHandle the removal of a project with a soft-delete approach.  Rather\nthan executing a table scan that might be heavy from a latency and from\na RCUs consumption prospective, we flag the existing items as obsolete\nby bumping up a project version refSpec in the form of `|project-name`,\nto which we associate the current version `version`.\n\nThis way, deleting a project is just as simple as bumping up its version\nvalue.\n\nWe then prepend the current version to the refSpec when looking up\nitems, so that we can easily ignore obsolete entries.\n\nFor example, if a project `foo` is deleted a new entry is created as\nsuch:\n\n| refPath | refValue |\n| |foo    | 1        |\n\nIf then a new project is created, new refSpecs will be prefixed with the\nnew project version:\n\n| refPath                  | refValue    |\n| |1/foo/refs/heads/master | 3355b5b8b73 |\n\nWe selected the pipe symbol (|) as a prefix because it is prohibited in\nrepository names, ensuring no ambiguity arises with actual repository\nnames.\n\nChange-Id: I2cfdf2e812c9e68735b66eef3b756ec6084bf697\n"
    },
    {
      "commit": "ffaa0f835e746be50a4e6bef99ab6f60d89dd466",
      "tree": "5b4365d62ca0965421b2b26be9a1c794fde7ce1d",
      "parents": [
        "f95ce8f53a068539b2ee1bc13386efe5f5f70914"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Nov 24 19:21:26 2024 +0000"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Sun Nov 24 19:22:42 2024 +0000"
      },
      "message": "Add visible-assertion as test dependency\n\ntestcontainers 1.15.2 depends on visible-assertion\nin the testing phase.\n\nChange-Id: Idc40643406e92de481da143098cc3742dd00ee2b\n"
    },
    {
      "commit": "f95ce8f53a068539b2ee1bc13386efe5f5f70914",
      "tree": "6d39f283fd7ce64093cbe65e38c59268370ac821",
      "parents": [
        "cb66eb8ba8f1d65e91be5ceffcea22a48d7f8033"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Tue May 14 18:06:02 2024 +0200"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Wed May 15 12:51:17 2024 +0200"
      },
      "message": "DynamoDBRefDatabaseIT: Add missing override annotation\n\nChange-Id: Iaccbdda2f0ff885496bfe82ca4bbb96817430d41\n"
    },
    {
      "commit": "cb66eb8ba8f1d65e91be5ceffcea22a48d7f8033",
      "tree": "5f8e70e9fc12bf0b5f04b0195ece0811ef21d34a",
      "parents": [
        "fc0df6d2ca2592660eae033161f3866d8e075fb4"
      ],
      "author": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Tue May 14 18:04:55 2024 +0200"
      },
      "committer": {
        "name": "Matthias Sohn",
        "email": "matthias.sohn@sap.com",
        "time": "Wed May 15 12:51:07 2024 +0200"
      },
      "message": "DynamoDBRefDatabaseIT: Fix build errors\n\n- declare thrown checked exception\n- remove ambiguous import of Truth8#assertThat\n\nChange-Id: Ib63f13c571dd7efbf2960d1d7310b62fb430e66a\n"
    },
    {
      "commit": "fc0df6d2ca2592660eae033161f3866d8e075fb4",
      "tree": "a6ca58ff749d117a78bd52086936c08eb01c21ed",
      "parents": [
        "14b624c9c04cc276254116f5ac52fc0c4bb6a69b",
        "038d806e7e5a992ca4fbeac75cb72eaef97c0e06"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Fri Oct 20 13:25:19 2023 +0200"
      },
      "committer": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Fri Oct 20 13:26:11 2023 +0200"
      },
      "message": "Merge branch \u0027stable-3.5\u0027\n\n* stable-3.5:\n  Make DynamoDBRefDatebase class implement ExtendedGlobalRefDatabase\n  computeAndPut should return false instead  throwing exception\n  Consume global-refdb directly from source\n  Bump global-refdb to v3.4.8.6\n  Add AWS credentials profile name parameter\n\nChange-Id: I390151a6eb11eb56dc67eb413575b1941e435393\n"
    },
    {
      "commit": "038d806e7e5a992ca4fbeac75cb72eaef97c0e06",
      "tree": "a6ca58ff749d117a78bd52086936c08eb01c21ed",
      "parents": [
        "60d985c7d17eb9d232dad04f00d995e1522a1d38",
        "8f8dc4694fe0307360f1e668d3c8e139034d669b"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Wed Oct 18 11:57:36 2023 +0200"
      },
      "committer": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Fri Oct 20 12:56:57 2023 +0200"
      },
      "message": "Merge branch \u0027stable-3.4\u0027 into stable-3.5\n\n* stable-3.4:\n  Make DynamoDBRefDatebase class implement ExtendedGlobalRefDatabase\n  computeAndPut should return false instead  throwing exception\n  Consume global-refdb directly from source\n  Bump global-refdb to v3.4.8.6\n  Add AWS credentials profile name parameter\n\nChange-Id: I31d43d8ae625178aa1ff7a620efda486d5048371\n"
    },
    {
      "commit": "8f8dc4694fe0307360f1e668d3c8e139034d669b",
      "tree": "db1d54953e9e679016fe0dcd2c67fcebf384619e",
      "parents": [
        "b13e4fc93ad747557406090807e929a6342117a5"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Thu Sep 21 18:39:46 2023 +0200"
      },
      "committer": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Mon Oct 16 15:44:31 2023 +0200"
      },
      "message": "Make DynamoDBRefDatebase class implement ExtendedGlobalRefDatabase\n\nExtendedGlobalRefDatabase provides `put` function to update item\nin the DynamoDB. Opposite to compareAndPut this method is not\nchecking current global-refdb value. `put` method should be used\nto update value when atomicity doesn\u0027t have to be ensured.\n\nBug: Issue 297440085\nChange-Id: Ic50b07d5aac0f533fd81d019b606848a522b2ed5\n"
    },
    {
      "commit": "b13e4fc93ad747557406090807e929a6342117a5",
      "tree": "f2fc37f29f24a174f37931f15498090a78271119",
      "parents": [
        "ee898ceca473ba8e763ec749e067a6a7adceb968"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Tue Sep 12 16:30:55 2023 +0200"
      },
      "committer": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Fri Oct 13 14:06:50 2023 +0000"
      },
      "message": "computeAndPut should return false instead  throwing exception\n\nReturn false instead of throwing `GlobalRefDbSystemError` when\nglobal-refdb expected value doesn\u0027t match expected one. This\nwill match existing contract defined in global-refdb\n`GlobalRefDatabase` interface[1].\n\n1.https://gerrit.googlesource.com/modules/global-refdb/+/refs/heads/stable-3.4/src/main/java/com/gerritforge/gerrit/globalrefdb/GlobalRefDatabase.java#76\n\nBug: Issue 297440085\nChange-Id: I7b4beb1c107a2e54c7aa9bd4038042912a96bc3d\n"
    },
    {
      "commit": "ee898ceca473ba8e763ec749e067a6a7adceb968",
      "tree": "6f8f14b9fe2f7a328d8d2540c90ed821b128f44a",
      "parents": [
        "2e03c865ae41fc9f4388f5aca373623bbea05b4f"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Tue Sep 19 18:51:22 2023 +0200"
      },
      "committer": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Fri Oct 13 13:45:55 2023 +0000"
      },
      "message": "Consume global-refdb directly from source\n\nglobal-refdb is a pure Bazel build and can now be directly built\nand consumed from source instead of downloading it from Maven\ncentral.\n\nBug: Issue 297440085\nChange-Id: I5f55f47a0f77ef4e99181d3f0fdbb9306544dbf3\n"
    },
    {
      "commit": "2e03c865ae41fc9f4388f5aca373623bbea05b4f",
      "tree": "4f6a461577a0a126abb62d4e07467368cc59f70d",
      "parents": [
        "986deeeb194d489706db0c0ad1a06d5a5409d4d4"
      ],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 27 21:53:17 2023 +0100"
      },
      "committer": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Tue Jun 27 21:53:17 2023 +0100"
      },
      "message": "Bump global-refdb to v3.4.8.6\n\nChange-Id: I368adb357210698eaed9130568f4d6ad240e1b79\n"
    },
    {
      "commit": "986deeeb194d489706db0c0ad1a06d5a5409d4d4",
      "tree": "b3abf9dbc51b76a3930c1490e1a46eb22070d12c",
      "parents": [
        "fa68113b7083251f7c522a197d5c1db823a94047"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Mon Apr 24 13:10:38 2023 +0200"
      },
      "committer": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Tue Apr 25 09:21:38 2023 +0200"
      },
      "message": "Add AWS credentials profile name parameter\n\nSome Gerrit setups shares the AWS dynamodb tables between AWS Regions,\nfor example multi-site setup in multiple regions. For security\nreason access to the other regions should be limited to necessary\nservices. Add configuration param which allows to specify AWS\ncredentials profile to be used only by the aws-dynamodb-refdb\nplugin when connecting to the dynamoDb. This profile allows us to\nsetup credentials or IAM Role with access to the dynamoDb setup on\nthe other region.\n\nBug: Issue 16877\nChange-Id: Ifc60162f747bc3fdf810f23e67ef8c6a04d957c7\n"
    },
    {
      "commit": "14b624c9c04cc276254116f5ac52fc0c4bb6a69b",
      "tree": "ba7ad669d9a1fbe2af3ae8d03574a1ce4dcdcd3f",
      "parents": [
        "fa68113b7083251f7c522a197d5c1db823a94047",
        "60d985c7d17eb9d232dad04f00d995e1522a1d38"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Fri Jan 14 21:22:29 2022 +0100"
      },
      "committer": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Fri Jan 14 21:22:29 2022 +0100"
      },
      "message": "Merge branch \u0027stable-3.5\u0027\n\n* stable-3.5:\n  Add explicit testcontainers deps for testing\n  Include jackson-annotation explicitly\n\nChange-Id: I4e676c5f91cb3ce7035578c7365ea0855eeff838\n"
    },
    {
      "commit": "60d985c7d17eb9d232dad04f00d995e1522a1d38",
      "tree": "ba7ad669d9a1fbe2af3ae8d03574a1ce4dcdcd3f",
      "parents": [
        "f67fd6758bf490b8a87afbb705bd7d71a9a4b886"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Thu Jan 13 11:07:06 2022 +0100"
      },
      "committer": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Thu Jan 13 19:46:10 2022 +0000"
      },
      "message": "Add explicit testcontainers deps for testing\n\nFrom Gerrit v3.5, the plugin deps do not include anymore\ntestcontainers deps and therefore each plugin needs explicitly\ninclude the dependencies needed.\n\nBug: Issue 15546\nChange-Id: Ic209ed09d48c1d8d50f865511a3e177492c0edc1\n"
    },
    {
      "commit": "f67fd6758bf490b8a87afbb705bd7d71a9a4b886",
      "tree": "228b37b2449412f206bb518088402b0816793afe",
      "parents": [
        "fa68113b7083251f7c522a197d5c1db823a94047"
      ],
      "author": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Thu Jan 13 09:54:54 2022 +0100"
      },
      "committer": {
        "name": "Marcin Czech",
        "email": "maczech@gmail.com",
        "time": "Thu Jan 13 09:54:54 2022 +0100"
      },
      "message": "Include jackson-annotation explicitly\n\njackson-annotation is not included anymore as part of Gerrit from\nv3.5 onwards, therefore the plugin needs to explicitily\nrequire its version and include it in the plugin\u0027s jar.\n\nBug: Issue 15546\nChange-Id: I7c5055ad34f5bd73dab53aa1940774626222306c\n"
    },
    {
      "commit": "fa68113b7083251f7c522a197d5c1db823a94047",
      "tree": "2337934a0bc7adab010ed2f893d975e03f71275b",
      "parents": [
        "072504e9117d58990948fbe8af476245e60def35"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Oct 01 20:30:34 2021 +0200"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Oct 01 20:30:34 2021 +0200"
      },
      "message": "Document supported version is stable-3.3\n\nDocumentation states this plugin works on 3.2, but actually it breaks\nwhen built on 3.2 with:\n\nerror: cannot find symbol\n private PluginConfig.Update pluginConfig;\n\nerror: cannot find symbol\nimport com.google.gerrit.acceptance.WaitUtil;\n\nGiven that stable-3.2 is going to be EOL very soon, update documentation\nto state that support is only from stable-3.3\n\nChange-Id: I1648888f23d4cbff6ab87c7bb77020fc96c99b4c\n"
    },
    {
      "commit": "072504e9117d58990948fbe8af476245e60def35",
      "tree": "5d1835edc84e1da89f779fe82ee83ea0bff289ff",
      "parents": [
        "dc207cc715cd6c8057d87bd0149dbc106196961c"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Oct 01 19:09:36 2021 +0200"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Oct 01 19:09:36 2021 +0200"
      },
      "message": "Add Gerrit-CI validation\n\nBug: Issue 15120\nChange-Id: I33ab6a89d9da8b0c62f711fcf64bc1cb500b3dac\n"
    },
    {
      "commit": "dc207cc715cd6c8057d87bd0149dbc106196961c",
      "tree": "0777ac9a39602ea57216de4dc41c8b67b82255ae",
      "parents": [
        "ab6e67826f419a39a9760bd27ba0497d80359b7d"
      ],
      "author": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Oct 01 16:27:56 2021 +0200"
      },
      "committer": {
        "name": "Antonio Barone",
        "email": "syntonyze@gmail.com",
        "time": "Fri Oct 01 16:27:56 2021 +0200"
      },
      "message": "Initial import from [1]\n\n[1] https://review.gerrithub.io/admin/repos/GerritForge/plugins_aws-dynamodb\n\nChange-Id: Ifb9380015d64d8b305ac4fcbae60fc057b2687fe\n"
    },
    {
      "commit": "ab6e67826f419a39a9760bd27ba0497d80359b7d",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [],
      "author": {
        "name": "Luca Milanesio",
        "email": "luca.milanesio@gmail.com",
        "time": "Fri Oct 01 13:40:27 2021 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Oct 01 13:40:27 2021 +0000"
      },
      "message": "Initial empty repository\n"
    }
  ]
}
