)]}'
{
  "commit": "f823de75a1f4f061c78aa6fff500f35be8d38e69",
  "tree": "86d3969582346463b4de15414e74ea57a2b9c794",
  "parents": [
    "2864e855932540c3ec6c9bf41ee3fe027d85f642"
  ],
  "author": {
    "name": "Johannes Sixt",
    "email": "j6t@kdbg.org",
    "time": "Sat Aug 03 17:22:51 2024 +0200"
  },
  "committer": {
    "name": "Johannes Sixt",
    "email": "j6t@kdbg.org",
    "time": "Sat Aug 03 18:56:35 2024 +0200"
  },
  "message": "git-gui: Remove forced rescan of stat-dirty files.\n\nIt is possible that stat information of tracked files is modified without\nactually modifying the content. Plumbing commands would detect such files\nas modified, so that Git GUI runs `git update-info --refresh` in order to\nsynchronize the cached stat info with the reality. However, this can be\nan expensive operation in large repositories. As remediation,\ne534f3a88676 (git-gui: Allow the user to disable update-index --refresh\nduring rescan, 2006-11-07) introduced an option to skip the expensive\npart.\n\nThe option was named \"trust file modification timestamp\". But the catch\nis that sometimes file timestamps can\u0027t be trusted. In this case, a file\nwould remain listed in Unstaged Changes although there are no changes.\nSo 16403d0b1f9d (git-gui: Refresh a file if it has an empty diff,\n2006-11-11) introduced a popup message informing the user about the\nsituation and then removed the file from the Unstaged Changes list.\n\nNow users had to click away the message box for every file that was\nstat-dirty. Under the assumption that a file in such a state is not\nthe only one, 124355d32c06 (git-gui: Always start a rescan on an empty\ndiff, 2007-01-22) introduced a forced (potentially expensive) refresh\nthat would de-list all stat-dirty files after the first notification was\ndismissed.\n\nAlong came 6c510bee2013 (Lazy man\u0027s auto-CRLF, 2007-02-13) in Git. It\nintroduced a new case where a file in the worktree can have no essential\ndifferences to the staged version, but still be detected as modified by\nplumbing commands. This time, however, the index cannot be synchronized\nfully by `git update-index --refresh`, so that the file remains listed\nin Unstaged Changes until it is staged manually.\n\nNeedless to say that the message box now becomes an annoyance, because\nit must be dismissed every time an affected file is selected, and the\nfile remains listed nevertheless.\n\nRemove the message box. Write the notice that no differences were found\nin the diff panel instead. Also include a link that, when clicked,\ninitiates the rescan. With this scheme, the rescan does not happen\nautomatically anymore, but requires an additional click. (This is now\ntwo clicks in total for users who encounter stat-dirty files after\nenabling the \"trust file modification timestamps\" option.) However,\nusers whom the rescan does not help (autocrlf-related dirty files) save\nhalf the clicks because there is no message box to dismiss.\n\nSigned-off-by: Johannes Sixt \u003cj6t@kdbg.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8fe7538e72084d1d794c88e00402602be7df7d65",
      "old_mode": 33261,
      "old_path": "git-gui.sh",
      "new_id": "887d6d596c16fc33ec1dcfd72ddb94f04fdbaa3b",
      "new_mode": 33261,
      "new_path": "git-gui.sh"
    },
    {
      "type": "modify",
      "old_id": "871ad488c2a1c010c8a9edd66ae6a6bfd9d4213e",
      "old_mode": 33188,
      "old_path": "lib/diff.tcl",
      "new_id": "d657bfec05b49865627f321ab260633f250f71c6",
      "new_mode": 33188,
      "new_path": "lib/diff.tcl"
    }
  ]
}
