)]}'
{
  "commit": "13c13aa0264350d1abb835d38b5f55e00d2be84c",
  "tree": "0eb252cda1724875d518ae2f4c8cdf7fa827f791",
  "parents": [
    "b5c837db1152faa8a5bec1b2dea4cdaf8a92da3d"
  ],
  "author": {
    "name": "David Ostrovsky",
    "email": "david@ostrovsky.org",
    "time": "Mon Aug 03 08:13:58 2026 +0200"
  },
  "committer": {
    "name": "David Ostrovsky",
    "email": "david@ostrovsky.org",
    "time": "Tue Aug 04 09:59:13 2026 +0200"
  },
  "message": "Adapt to current Gerrit plugin API\n\nThe plugin no longer compiled against current gerrit master.\n\n* OutgoingEmail is final and now delegates custom behavior to an\n  EmailDecorator. Turn RateLimitReachedSender into a decorator and\n  use EmailFactories to create the outgoing message, matching core\n  and the checks plugin. Header, message id and recipient setup move\n  to init(OutgoingEmail), the recipient check moves to\n  shouldSendMessage(), and formatting moves to populateEmailContent().\n\n  The plugin-owned Soy templates are still rendered by the plugin,\n  now with an explicit data map for email.userNameEmail and\n  email.log instead of the removed protected soyContext. Add focused\n  sender tests for the factory path, header/message-id/recipient\n  setup, group gating, and text/HTML rendering.\n\n* PluginCommandModule requires the plugin name at construction;\n  inject it via @PluginName.\n\n* Error Prone rejects the impossible null comparison in\n  UserResolver.getUserName(); use flatMap over the optional user\n  name instead. The discarded cloneProject() return values in\n  RateLimitUploadPackIT are assigned to an unused variable to satisfy\n  CheckReturnValue.\n\nTest Plan:\nbazelisk build //plugins/rate-limiter\nbazelisk test --cache_test_results\u003dNO \\\n  //plugins/rate-limiter:rate-limiter_tests\n\nChange-Id: If3b8a90c25e17d64f5c1e8a2047b9de6315a7f28\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "35b50e2d41ef22fefa23aef5ad88bcd41d1e48a7",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/ratelimiter/RateLimitReachedSender.java",
      "new_id": "6a81febcc25e6fc4ca020792d39ab66739a65ea5",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/ratelimiter/RateLimitReachedSender.java"
    },
    {
      "type": "modify",
      "old_id": "85c0035594c8a16fb5169223938bf4d70ceb4cf9",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/ratelimiter/SshModule.java",
      "new_id": "24a59d1a3d40365bf3a01bf2a81196b4a706c095",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/ratelimiter/SshModule.java"
    },
    {
      "type": "modify",
      "old_id": "0e79529528df25d363888be99274800019c4c483",
      "old_mode": 33188,
      "old_path": "src/main/java/com/googlesource/gerrit/plugins/ratelimiter/UserResolver.java",
      "new_id": "1e2d0e3e6d0a170d215e71a9b162665667178930",
      "new_mode": 33188,
      "new_path": "src/main/java/com/googlesource/gerrit/plugins/ratelimiter/UserResolver.java"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0cf6e912b252127f8607b61e6d18f0f0709b9aca",
      "new_mode": 33188,
      "new_path": "src/test/java/com/googlesource/gerrit/plugins/ratelimiter/RateLimitReachedSenderTest.java"
    },
    {
      "type": "modify",
      "old_id": "035e45b89d904ceb8070dd5239ea86110b902428",
      "old_mode": 33188,
      "old_path": "src/test/java/com/googlesource/gerrit/plugins/ratelimiter/RateLimitUploadPackIT.java",
      "new_id": "f8881e6122da2eb8f6eed9297c012e666d745d12",
      "new_mode": 33188,
      "new_path": "src/test/java/com/googlesource/gerrit/plugins/ratelimiter/RateLimitUploadPackIT.java"
    }
  ]
}
