)]}'
{
  "commit": "5cdb38458ee5b53daada9cb767ae51a08650bd6a",
  "tree": "6ea2af874599acf6a29892ad241de340c19e5d8b",
  "parents": [
    "362f869ff2dbc389234ecd8c4b996a9e507c39d7"
  ],
  "author": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Fri Apr 29 22:29:51 2022 -0700"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Fri Apr 29 22:31:17 2022 -0700"
  },
  "message": "2.36 show regression fix\n\nThis only surfaced as a regression after 2.36 release, but the\nbreakage was already there with us for at least a year.\n\ne900d494 (diff: add an API for deferred freeing, 2021-02-11)\nintroduced a mechanism to delay freeing resources held in\ndiff_options struct that need to be kept as long as the struct will\nbe reused to compute diff.  \"git log -p\" was taught to utilize the\nmechanism but it was done with an incorrect assumption that the\nunderlying helper function, cmd_log_walk(), is called only once,\nand it is OK to do the freeing at the end of it.\n\nAlas, for \"git show A B\", the function is called once for each\ncommit given, so it is not OK to free the resources until we finish\ncalling it for all the commits given from the command line.\n\nDuring 2.36 release cycle, we started clearing the \u003cpathspec\u003e as\npart of this freeing, which made the bug a lot more visible.\n\nFix this breakage by tweaking how cmd_log_walk() frees the resources\nat the end and using a variant of it that does not immediately free\nthe resources to show each commit object from the command line in\n\"git show\".\n\nProtect the fix with a few new tests.\n\nReported-by: Daniel Li \u003cdan@danielyli.com\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c211d66d1d0e7fcf11958aaa651be233e7a9c3ed",
      "old_mode": 33188,
      "old_path": "builtin/log.c",
      "new_id": "6696c4cfd0ee47d4debe93a14c9eff4e75676cb3",
      "new_mode": 33188,
      "new_path": "builtin/log.c"
    },
    {
      "type": "modify",
      "old_id": "750aee17ea9650530a5e716020b4ae05ad6c0ef9",
      "old_mode": 33261,
      "old_path": "t/t4013-diff-various.sh",
      "new_id": "7a44d5d5958652d496aed573896239c1225da69e",
      "new_mode": 33261,
      "new_path": "t/t4013-diff-various.sh"
    }
  ]
}
