)]}'
{
  "commit": "f67a6fe9ca3afc4d71997e75e8d87c571f0c30cb",
  "tree": "e9b75a54b4ca71f8acc7ab5245c1350eb328a136",
  "parents": [
    "362a279f0ad018574278e72c4e98e2b99d3991bb"
  ],
  "author": {
    "name": "Xinhao Yuan",
    "email": "xinhaoyuan@google.com",
    "time": "Sat Feb 28 00:31:15 2026"
  },
  "committer": {
    "name": "Copybara-Service",
    "email": "copybara-worker@google.com",
    "time": "Sat Feb 28 00:31:42 2026"
  },
  "message": "Avoid interference from destructed Commands by owning the redirected files.\n\nThis is needed because sometimes when a command hangs we destruct the object and move on, but the command may still run for a short but uncontrollable period, which still writes to the redirected files. Before this CL we create new Commands using the same redirected file paths. This can cause issue when we try to read them later.\n\nBy owning the redirected files, Command can rename them and clean them up to avoid conflict and interference.\n\nThere is a bit of changes needed at the use sites (mainly CentipedeCallbacks) to save the last log path/file when needed. But it seems not hard to understand with the new ownership model.\n\nPiperOrigin-RevId: 876461673\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "227bb8808fa1b2f6a5f692d2965dabb6763293a9",
      "old_mode": 33188,
      "old_path": "centipede/binary_info.cc",
      "new_id": "4517c9834e1635e0bf016e5aa02ced4d25af062d",
      "new_mode": 33188,
      "new_path": "centipede/binary_info.cc"
    },
    {
      "type": "modify",
      "old_id": "b94f246104ff48a11990a65698e045d2956c0920",
      "old_mode": 33188,
      "old_path": "centipede/centipede.cc",
      "new_id": "b18f9957efb1957280eb25e3800305da0707573a",
      "new_mode": 33188,
      "new_path": "centipede/centipede.cc"
    },
    {
      "type": "modify",
      "old_id": "3f6f817dc7223b6d9ada3be57ba85b82ab6c4622",
      "old_mode": 33188,
      "old_path": "centipede/centipede_callbacks.cc",
      "new_id": "14e11e879081d8df5b7c96fbff3a8671ac5cbebf",
      "new_mode": 33188,
      "new_path": "centipede/centipede_callbacks.cc"
    },
    {
      "type": "modify",
      "old_id": "068dfc6c4e9866ab6b2e8d34a34a5acf0bfc055b",
      "old_mode": 33188,
      "old_path": "centipede/centipede_callbacks.h",
      "new_id": "0a946f1fa0a47587fc19741fe184ac25c8be18a7",
      "new_mode": 33188,
      "new_path": "centipede/centipede_callbacks.h"
    },
    {
      "type": "modify",
      "old_id": "50d26ff0d41371dba84e8a18c44bb7991a745645",
      "old_mode": 33188,
      "old_path": "centipede/command.cc",
      "new_id": "3536d937dfd603b3ddffddae3b18a2921ad21ff6",
      "new_mode": 33188,
      "new_path": "centipede/command.cc"
    },
    {
      "type": "modify",
      "old_id": "88165ca90a24227bbf0893ce0d1fd4518bf254b0",
      "old_mode": 33188,
      "old_path": "centipede/command.h",
      "new_id": "a2fab51c5a0c76471504f83035a4b4da5be94c01",
      "new_mode": 33188,
      "new_path": "centipede/command.h"
    },
    {
      "type": "modify",
      "old_id": "ab6d6f0fe3a049c768e2ec3b4116ef7b696f9faf",
      "old_mode": 33188,
      "old_path": "centipede/command_test.cc",
      "new_id": "f4aaa36227f23695572fa061402bcef57a35037d",
      "new_mode": 33188,
      "new_path": "centipede/command_test.cc"
    },
    {
      "type": "modify",
      "old_id": "e053a8029407d40f878f992632145183e2595584",
      "old_mode": 33188,
      "old_path": "centipede/control_flow.cc",
      "new_id": "b33a37e801553bdafdcf723b732ff6415dde28fc",
      "new_mode": 33188,
      "new_path": "centipede/control_flow.cc"
    },
    {
      "type": "modify",
      "old_id": "2168c00a1825ab971ba9c86ace2654bd76c5f583",
      "old_mode": 33188,
      "old_path": "centipede/symbol_table.cc",
      "new_id": "e693b4817dc91c1f7083088b08d0b35164f23591",
      "new_mode": 33188,
      "new_path": "centipede/symbol_table.cc"
    }
  ]
}
