)]}'
{
  "commit": "9e5d20a6da29c209c671a5a8e52916fbcc6fe149",
  "tree": "b77a2973a02c1217522326c523af4d748b9bc41d",
  "parents": [
    "5137fbbfb31bc7f8b9b7243934d3c80e558a277c"
  ],
  "author": {
    "name": "Achim Thesmann",
    "email": "achim@google.com",
    "time": "Thu Jul 09 18:14:00 2026 +0000"
  },
  "committer": {
    "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Mon Jul 13 11:03:55 2026 -0700"
  },
  "message": "hooks: enhance Change-Id check to catch case-insensitive duplicates\n\nUpdate check_commit_msg_changeid_field to check for multiple Change-Id\nfooters in a case-insensitive manner (including variations like\nChange-ID or change-id), and explicitly reject non-matching cases or\nmalformed value formats.\n\nPreviously, casing and format checks were coupled, causing malformed ID\nvalues (such as a missing \u0027I\u0027 prefix) to be falsely reported as field\ncasing errors. This change decouples field name casing validation from\nvalue format validation into independent checks with actionable error\nmessages, and ensures that duplicate Change-Id footers trigger an\nexplicit rejection even when mixed casing or format errors are present.\n\nAlso replaces the single batch unit test with 7 focused test methods\ncovering valid messages, casing errors, format errors, duplicate lines,\nand mixed combinations.\n\nBug: 533035135\nTest: python3 -m unittest rh/hooks_unittest.py\nTest: tried to upload change with duplicate change-id\nChange-Id: I9ab168a3d99f7b6cd3f9200c2c2c389e9163525d\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repohooks/+/605723\nReviewed-by: Mike Frysinger \u003cvapier@google.com\u003e\nCommit-Queue: Achim Thesmann \u003cachim@google.com\u003e\nTested-by: Achim Thesmann \u003cachim@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "f28fe6b13cda5a981624d10be775b50898872ac0",
      "old_mode": 33188,
      "old_path": "rh/hooks.py",
      "new_id": "7bdb8b16d687e8e62a0585466eb87d93069806ce",
      "new_mode": 33188,
      "new_path": "rh/hooks.py"
    },
    {
      "type": "modify",
      "old_id": "2b6d207e47367f517ba5d513d9087b3802096a90",
      "old_mode": 33261,
      "old_path": "rh/hooks_unittest.py",
      "new_id": "1403a3137fd23bac34985f8d28063cd64c7b368f",
      "new_mode": 33261,
      "new_path": "rh/hooks_unittest.py"
    }
  ]
}
