)]}'
{
  "commit": "a7ad13b5c256da91a9b396cefa3fe16380d1d67f",
  "tree": "9a0e5cb7e8523e5f5884c16ecbc1a07a947f1518",
  "parents": [
    "7f7c0c9a3b63b6b052714bbd1848b1b0723f6389"
  ],
  "author": {
    "name": "Matt Stark",
    "email": "msta@google.com",
    "time": "Tue Apr 21 14:21:53 2026 +1000"
  },
  "committer": {
    "name": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "email": "gn-scoped@luci-project-accounts.iam.gserviceaccount.com",
    "time": "Tue Apr 21 16:50:46 2026 -0700"
  },
  "message": "Add diffs to EXPECT_EQ.\n\nPreviously, the user would have to manually write:\nEXPECT_EQ(a, b) \u003c\u003c \"Want:\\n\" \u003c\u003c b \u003c\u003c \"\\nGot:\\n\" \u003c\u003c a;\n\nThe vast majority of the time this got shortened to on of:\n// Where does one end and the other begin? Which one is which?\n// How do you detect a single-word or single-character diff?\nEXPECT_EQ(a, b) \u003c\u003c b \u003c\u003c \"\\n\" \u003c\u003c a;\n// It just prints \"failure\" and nothing else.\nEXPECT_EQ(a, b);\n\nWhich made it almost impossible to understand error mesasges GN output\nfor both humans and AI.\n\nThis change uses git to pretty-print a diff for test failures (with\ncolor!), falling back to a simple Want:\\n...\\nGot:\\n... format\n\nChange-Id: Icc77e607fcba1bce1e76b60ffb4746a56a6a6964\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/21960\nCommit-Queue: Matt Stark \u003cmsta@google.com\u003e\nReviewed-by: Takuto Ikuta \u003ctikuta@google.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "81ec2e27df3022b2c407771920fec03ca5ab988c",
      "old_mode": 33188,
      "old_path": "src/gn/compile_commands_writer_unittest.cc",
      "new_id": "f6de442ade79c17489adbf35861e441b53b6919d",
      "new_mode": 33188,
      "new_path": "src/gn/compile_commands_writer_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "770e7cf19af371292cc8326f12e40353afb3b946",
      "old_mode": 33188,
      "old_path": "src/gn/json_project_writer_unittest.cc",
      "new_id": "a050b092f08d1c2227d7cab83efde4979cf437e7",
      "new_mode": 33188,
      "new_path": "src/gn/json_project_writer_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "fa2939ec1d5fdaaacc02031aa8a09d076890bc45",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_action_target_writer_unittest.cc",
      "new_id": "e85558287b4230d2e8dd3be835ff3d49ee7393bd",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_action_target_writer_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "29dfd33aa9ade625feef6320305cc2b3b93cbe9b",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_binary_target_writer_unittest.cc",
      "new_id": "51b33691f105ee41d37d5a6231235abe5f2514e2",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_binary_target_writer_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "81fb1edc8e7b7bc43fb232fa7f82082467046b95",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_c_binary_target_writer_unittest.cc",
      "new_id": "8929e06382eae749c6759b719e83861682dc5644",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_c_binary_target_writer_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "d79b719bd36021a6608fa4f1d60a1c9f986025cd",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_create_bundle_target_writer_unittest.cc",
      "new_id": "3dfd6a3fe5cef3ff19ecdf35e293bd86cb2afc4e",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_create_bundle_target_writer_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "a5f8a674363ae4832f68d2774dbecc75a7220dae",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_outputs_writer_unittest.cc",
      "new_id": "154d84b14582ecde9c6a3ba854f1d2cf791e31f8",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_outputs_writer_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "11b80712f8d8e10d84254a7a914d84ce2bc318e5",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_rust_binary_target_writer_unittest.cc",
      "new_id": "680652c1b5067ed7f747e464373c5238b968f598",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_rust_binary_target_writer_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "1eaf2ab596fcc54750897afaf03bc231ab855c79",
      "old_mode": 33188,
      "old_path": "src/gn/output_conversion_unittest.cc",
      "new_id": "3e1b9579e3410645df33ee3159d37de7d5229821",
      "new_mode": 33188,
      "new_path": "src/gn/output_conversion_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "85cd665e409e653c168338d043c9c9bab77788a0",
      "old_mode": 33188,
      "old_path": "src/gn/standard_out.cc",
      "new_id": "ec8efde601fded31275b3ef62154d59abcbb3151",
      "new_mode": 33188,
      "new_path": "src/gn/standard_out.cc"
    },
    {
      "type": "modify",
      "old_id": "9850c0e97076416cd7c722beb631e0e00bb11fa1",
      "old_mode": 33188,
      "old_path": "src/gn/standard_out.h",
      "new_id": "b737fa17a6dfddb3a57befcd51f46feb046e8ce6",
      "new_mode": 33188,
      "new_path": "src/gn/standard_out.h"
    },
    {
      "type": "modify",
      "old_id": "6e9b96429d76c48c1878416147a419e60aed7295",
      "old_mode": 33188,
      "old_path": "src/util/test/gn_test.cc",
      "new_id": "069fad2b6e3ca8dcfb0a624f71705cf80ddb74f5",
      "new_mode": 33188,
      "new_path": "src/util/test/gn_test.cc"
    },
    {
      "type": "modify",
      "old_id": "d3fc056fdc2a108939a2220adbcfe59ac5a849b0",
      "old_mode": 33188,
      "old_path": "src/util/test/test.h",
      "new_id": "24199637bd21aa878828aa7e3ac2418523aa31a2",
      "new_mode": 33188,
      "new_path": "src/util/test/test.h"
    }
  ]
}
