)]}'
{
  "commit": "38f88051dae6ddb2f1cdb9c7415d4ba6caef04af",
  "tree": "5005b815e45118299eb1e03903bffce6a4241424",
  "parents": [
    "9a2fb147f2c61d0cab52c883e7e26f5b7948e3ed"
  ],
  "author": {
    "name": "René Scharfe",
    "email": "l.s.r@web.de",
    "time": "Sun Nov 30 12:47:17 2025 +0100"
  },
  "committer": {
    "name": "Junio C Hamano",
    "email": "gitster@pobox.com",
    "time": "Sun Nov 30 09:58:53 2025 -0800"
  },
  "message": "diff-index: don\u0027t queue unchanged filepairs with diff_change()\n\ndiff_cache() queues unchanged filepairs if the flag find_copies_harder\nis set, and uses diff_change() for that.  This function allocates a\nfilespec for each side, does a few other things that are unnecessary for\nunchanged filepairs and always sets the diff_flag has_changes, which is\nsimply misleading in this case.\n\nAdd a new streamlined function for queuing unchanged filepairs and\nuse it in show_modified(), which is called by diff_cache() via\noneway_diff() and do_oneway_diff().  It allocates only a single filespec\nfor each filepair and uses it twice with reference counting.  This has a\nmeasurable effect if there are a lot of them, like in the Linux repo:\n\nBenchmark 1: ./git_v2.52.0 -C ../linux diff --cached --find-copies-harder\n  Time (mean ± σ):      31.8 ms ±   0.2 ms    [User: 24.2 ms, System: 6.3 ms]\n  Range (min … max):    31.5 ms …  32.3 ms    85 runs\n\nBenchmark 2: ./git -C ../linux diff --cached --find-copies-harder\n  Time (mean ± σ):      23.9 ms ±   0.2 ms    [User: 18.1 ms, System: 4.6 ms]\n  Range (min … max):    23.5 ms …  24.4 ms    111 runs\n\nSummary\n  ./git -C ../linux diff --cached --find-copies-harder ran\n    1.33 ± 0.01 times faster than ./git_v2.52.0 -C ../linux diff --cached --find-copies-harder\n\nSigned-off-by: René Scharfe \u003cl.s.r@web.de\u003e\nSigned-off-by: Junio C Hamano \u003cgitster@pobox.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "b8f8f3bc312fbe7af0e95e1f4dd6720da45705f0",
      "old_mode": 33188,
      "old_path": "diff-lib.c",
      "new_id": "8e624f38c6d6f34bb499bbd8b6a96fb6c0ca09da",
      "new_mode": 33188,
      "new_path": "diff-lib.c"
    },
    {
      "type": "modify",
      "old_id": "a1961526c0dab1af182d4f400468bf5617f5175c",
      "old_mode": 33188,
      "old_path": "diff.c",
      "new_id": "c3063d827e16d14382947302c06320108a49c270",
      "new_mode": 33188,
      "new_path": "diff.c"
    },
    {
      "type": "modify",
      "old_id": "31eedd5c0c39d336205b05ed0125c5ba316169d5",
      "old_mode": 33188,
      "old_path": "diff.h",
      "new_id": "e80503aebb8d5072dd72c8faa4abe2b70d61ec9c",
      "new_mode": 33188,
      "new_path": "diff.h"
    }
  ]
}
