)]}'
{
  "commit": "56e8159fd0c7cc4ba76da3c1c8fd4a29c92cbd4b",
  "tree": "b701f126404ce52a1a4ebca9b067d3c4b10e5755",
  "parents": [
    "3028c6a426a4aaf6da91c4ebafe716ae370225fe"
  ],
  "author": {
    "name": "Michael Spang",
    "email": "spang@google.com",
    "time": "Mon Jul 27 17:00:30 2020 -0400"
  },
  "committer": {
    "name": "Commit Bot",
    "email": "commit-bot@chromium.org",
    "time": "Tue Jul 28 20:45:11 2020 +0000"
  },
  "message": "Fix escaping in compile_commands.json\n\nIn particular this case is broken\n\n  defines \u003d [\"INCLUDE\u003d\u003cheader.h\u003e\"]\n\nThis is escaped as\n\n  -DINCLUDE\u003d\\\\u003Cheader.h\u003e\n\nwhich JSON decodes as\n\n  -DINCLUDE\u003d\\u003Cheader.h\u003e\n\nwhich still has the JSON escape sequence \\u003C in it. The current code\nJSON escapes twice, but the command is only parsed once as JSON.\n\nJSON escaping isn\u0027t shell escaping. Add the simplified shell escaping\ndescribed in the spec. This changed the output slightly, to quote spaces\ninstead of escaping them, but that\u0027s in line with the spec (including\nthe example).\n\nVS Code is happy with this output, and not the previous output.\n\nBug: gn:181\nChange-Id: I52f2470178066b072c2729181c91b947972b5bc4\nReviewed-on: https://gn-review.googlesource.com/c/gn/+/9420\nReviewed-by: Brett Wilson \u003cbrettw@chromium.org\u003e\nCommit-Queue: Brett Wilson \u003cbrettw@chromium.org\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d0367fc5e5f29c3dfd4c950e83ea28e049b8d2d3",
      "old_mode": 33188,
      "old_path": "src/gn/compile_commands_writer.cc",
      "new_id": "05e78d0dae5837f25711808126a761a62abea8c7",
      "new_mode": 33188,
      "new_path": "src/gn/compile_commands_writer.cc"
    },
    {
      "type": "modify",
      "old_id": "9bbb076ac6b2d3cb64042479e9a0c4d7abb29daf",
      "old_mode": 33188,
      "old_path": "src/gn/compile_commands_writer_unittest.cc",
      "new_id": "29e6a573699cb91cd48a501e93b4d9b83591a4f0",
      "new_mode": 33188,
      "new_path": "src/gn/compile_commands_writer_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "18749059aeef675401a837b89ec7d7ccec6a0d25",
      "old_mode": 33188,
      "old_path": "src/gn/escape.cc",
      "new_id": "3c8dc3f498ac2dab21a25947422384d12e71f478",
      "new_mode": 33188,
      "new_path": "src/gn/escape.cc"
    },
    {
      "type": "modify",
      "old_id": "78e654467c2a5943296e37af7b13f679d893e931",
      "old_mode": 33188,
      "old_path": "src/gn/escape.h",
      "new_id": "31f972edb4d4373ac13995b5f547721b4eeba621",
      "new_mode": 33188,
      "new_path": "src/gn/escape.h"
    },
    {
      "type": "modify",
      "old_id": "afc2bc4cb08433ce0db703524e0a8e3368413f7d",
      "old_mode": 33188,
      "old_path": "src/gn/escape_unittest.cc",
      "new_id": "004498e631e4680247af92151cd6824ba498f705",
      "new_mode": 33188,
      "new_path": "src/gn/escape_unittest.cc"
    },
    {
      "type": "modify",
      "old_id": "022d5e7edab836f5b3e664bfc37d715a4ae6013c",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_target_command_util.h",
      "new_id": "d9d30bc29d90a8df445baa92b214c12d9ff6f704",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_target_command_util.h"
    },
    {
      "type": "modify",
      "old_id": "248db301d57ee79c48c6d8d71cb41cf6a6cf05dc",
      "old_mode": 33188,
      "old_path": "src/gn/ninja_target_command_util_unittest.cc",
      "new_id": "8da62d322fbb50c54d9e826cd147a1603d320ffe",
      "new_mode": 33188,
      "new_path": "src/gn/ninja_target_command_util_unittest.cc"
    }
  ]
}
