)]}'
{
  "commit": "6a26019c81faa07ba811541b4cf35be9e8ee1ead",
  "tree": "1f1c230dd72da18f65389c727faaa6c0d4f9bbc5",
  "parents": [
    "b0d4ae30f5a23fa9da87e9396b78e6442b351ddc"
  ],
  "author": {
    "name": "Ezekiel Newren",
    "email": "ezekielnewren@gmail.com",
    "time": "Tue Nov 18 22:34:18 2025 +0000"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Tue Nov 18 14:53:10 2025 -0800"
  },
  "message": "xdiff: split xrecord_t.ha into line_hash and minimal_perfect_hash\n\nThe ha field is serving two different purposes, which makes the code\nharder to read. At first glance, it looks like many places assume\nthere could never be hash collisions between lines of the two input\nfiles. In reality, line_hash is used together with xdl_recmatch() to\nensure correct comparisons of lines, even when collisions occur.\n\nTo make this clearer, the old ha field has been split:\n  * line_hash: a straightforward hash of a line, independent of any\n    external context. Its type is uint64_t, as it comes from a fixed\n    width hash function.\n  * minimal_perfect_hash: Not a new concept, but now a separate\n    field. It comes from the classifier\u0027s general-purpose hash table,\n    which assigns each line a unique and minimal hash across the two\n    files. A size_t is used here because it\u0027s meant to be used to\n    index an array. This also avoids ` as usize` casts on the Rust\n    side when using it to index a slice.\n\nSigned-off-by: Ezekiel Newren \u003cezekielnewren@gmail.com\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "cb8e412c7b9db6ae589393813735c7e90b3b2d96",
      "old_mode": 33188,
      "old_path": "xdiff/xdiffi.c",
      "new_id": "8d96074414f2e940da006b127d25ba96437bae3d",
      "new_mode": 33188,
      "new_path": "xdiff/xdiffi.c"
    },
    {
      "type": "modify",
      "old_id": "6dc450b1fe1dfc2c85d7acf98c948581b48e6f28",
      "old_mode": 33188,
      "old_path": "xdiff/xhistogram.c",
      "new_id": "5ae1282c27568cb1c9622dbf28bf5273868cebc5",
      "new_mode": 33188,
      "new_path": "xdiff/xhistogram.c"
    },
    {
      "type": "modify",
      "old_id": "bb61354f22a17761d7bd54172309cc98ef0ecb0f",
      "old_mode": 33188,
      "old_path": "xdiff/xpatience.c",
      "new_id": "cc53266f3b8302f9b778cb4719cf023e3e3f37b6",
      "new_mode": 33188,
      "new_path": "xdiff/xpatience.c"
    },
    {
      "type": "modify",
      "old_id": "85e56021daf9e28613f91a6c4aa6896896cb66f5",
      "old_mode": 33188,
      "old_path": "xdiff/xprepare.c",
      "new_id": "bea0992b5e4a33486719caaa4b1305ae52a1fdbf",
      "new_mode": 33188,
      "new_path": "xdiff/xprepare.c"
    },
    {
      "type": "modify",
      "old_id": "354349b523fbac77704f1c5506fadb2df842dac8",
      "old_mode": 33188,
      "old_path": "xdiff/xtypes.h",
      "new_id": "d4e9cd2e7636166edca36313b55a9d0db0279a6a",
      "new_mode": 33188,
      "new_path": "xdiff/xtypes.h"
    }
  ]
}
