)]}'
{
  "commit": "530258d08ebcd61d8b8e96abc3a973f83bbfa81f",
  "tree": "e968f07d1045fe0bc1ab5a984c60b456822d4420",
  "parents": [
    "c1566487a800935a01a91050f49a9b1ab0799ae9"
  ],
  "author": {
    "name": "Gavin Mak",
    "email": "gavinmak@google.com",
    "time": "Thu Sep 17 22:07:44 2026 +0000"
  },
  "committer": {
    "name": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "gerrit-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Mon Sep 21 13:37:38 2026 -0700"
  },
  "message": "project: use one status snapshot for dirty checks\n\nOn Git 2.11 and newer, replace update-index, diff-index, diff-files, and\nls-files fan-out with one porcelain-v2 snapshot for IsDirty,\nUncommittedFiles, and HasChanges. Preserve category ordering and\nduplicate staged-plus-unstaged paths, and keep the exact legacy path for\nolder Git or a failed snapshot.\n\nBug: 543851900\nBug: 553599402\nChange-Id: I309e39977e1f1d4ee6115f488d6aabb83ec3d83c\nReviewed-on: https://gerrit-review.googlesource.com/c/git-repo/+/632143\nTested-by: Gavin Mak \u003cgavinmak@google.com\u003e\nReviewed-by: Brian Gan \u003cbrgan@google.com\u003e\nCommit-Queue: Gavin Mak \u003cgavinmak@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "68986d4989acfeb7436ec9c6a644eb2cf7579361",
      "old_mode": 33188,
      "old_path": "project.py",
      "new_id": "0cf1d376d6dda0235f0a9c09058e701274616b28",
      "new_mode": 33188,
      "new_path": "project.py"
    },
    {
      "type": "modify",
      "old_id": "f82e1f66a5d2cdf2d9703171bf0b13c7887ae704",
      "old_mode": 33188,
      "old_path": "tests/test_project.py",
      "new_id": "2a5aebf9c9f09ec8a05b3a19eff036004ed2e9d4",
      "new_mode": 33188,
      "new_path": "tests/test_project.py"
    }
  ]
}
