)]}'
{
  "commit": "2c6281b7be3b2e698b7b943c940ff162d200f218",
  "tree": "eb4bec5565a7ad9a064cee3e1097baa62bdd2697",
  "parents": [
    "04ec31adc8e6b10b6566d74532721dacd21d1137"
  ],
  "author": {
    "name": "Geoffrey Martin-Noble",
    "email": "gcmn@google.com",
    "time": "Wed Nov 17 21:47:02 2021 -0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Nov 17 21:47:02 2021 -0800"
  },
  "message": "Make benchmarking script more fault-tolerant (#7674)\n\nThis is not the prettiest Python I\u0027ve ever written, but it does allow\r\nrestarting benchmark runs rather than losing all progress after a\r\nsingle failure. This makes the workflow of starting a benchmarking run\r\nand then coming back when it is finished far more workable.\r\n\r\nI tried out incremental output of the final json results and reloading\r\nfrom that, but decided against it because I had to manually construct\r\njson (no native incremental support) and use context handlers to ensure\r\nstructures were closed even on a failure exit. Overall it ended up\r\nbeing pretty gross. Since we were already using temporary files for\r\ncaptures, this seemed like a reasonable way to go.",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f7ad5d7958ee8a71e3ffa0258307d7f19c7198f8",
      "new_mode": 33188,
      "new_path": ".pylintrc"
    },
    {
      "type": "modify",
      "old_id": "75c01a2674e5bdd95b5e0fd483be05b601ad2faa",
      "old_mode": 33188,
      "old_path": "build_tools/benchmarks/common/benchmark_definition.py",
      "new_id": "264fb5cbff5a61ba8596e3e4f10c661720f0b43d",
      "new_mode": 33188,
      "new_path": "build_tools/benchmarks/common/benchmark_definition.py"
    },
    {
      "type": "modify",
      "old_id": "db3bcb8fa4ca08e9aebeaaefd7303a70a8bb0693",
      "old_mode": 33188,
      "old_path": "build_tools/benchmarks/common/benchmark_presentation.py",
      "new_id": "9f4fae34ae7ced539d98683ebb37706f2b26d1c9",
      "new_mode": 33188,
      "new_path": "build_tools/benchmarks/common/benchmark_presentation.py"
    },
    {
      "type": "modify",
      "old_id": "9f1b9911e3124aad78b4269c4355b07f71012cb7",
      "old_mode": 33261,
      "old_path": "build_tools/benchmarks/run_benchmarks_on_android.py",
      "new_id": "fde034e0f5b8de568068b5ecf13ce3fa8cca5b52",
      "new_mode": 33261,
      "new_path": "build_tools/benchmarks/run_benchmarks_on_android.py"
    }
  ]
}
