)]}'
{
  "commit": "ff3ba7d158765f02effa417feca0a7e0089116c4",
  "tree": "6164e204ba95c9de6a0b5c363b2365c6e85bb6ec",
  "parents": [
    "ca96eeee79bc231f8096d9e9d0b501e0495e2db7"
  ],
  "author": {
    "name": "Tamir Duberstein",
    "email": "tamird@gmail.com",
    "time": "Fri Jun 12 17:49:14 2026 -0400"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Fri Jun 12 15:56:44 2026 -0700"
  },
  "message": "commit-reach: die on contains walk errors\n\nWithout generation numbers, repo_is_descendant_of() can return -1 when\nit cannot read commit ancestry. commit_contains() exposes that result\nthrough a Boolean interface, so ref-filter treats it as true. This can\ninclude a ref for --contains or exclude it for --no-contains without\nfailing the command.\n\nDie when repo_is_descendant_of() reports an error. The memoized walk\nalready dies when it cannot parse a commit, so callers of the\nnon-memoized path no longer turn a failed walk into a match.\n\nReported-by: Jeff King \u003cpeff@peff.net\u003e\nSigned-off-by: Tamir Duberstein \u003ctamird@gmail.com\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "349ca68a3761b0e16b28a05d5eefd88b060ea6d5",
      "old_mode": 33188,
      "old_path": "commit-reach.c",
      "new_id": "4acf1c02d57ee298b060adfb3b0fac9496ed42c7",
      "new_mode": 33188,
      "new_path": "commit-reach.c"
    },
    {
      "type": "modify",
      "old_id": "e06feb06e91956bd61df6db6161eb1eae4911b9e",
      "old_mode": 33261,
      "old_path": "t/t6301-for-each-ref-errors.sh",
      "new_id": "72b27c8be37d448468450620aad4c69a05e4708a",
      "new_mode": 33261,
      "new_path": "t/t6301-for-each-ref-errors.sh"
    }
  ]
}
