)]}'
{
  "commit": "e69097596506139dfc1b9dd18baba9d52b1ac479",
  "tree": "01fa771bc92090b44f09e7cf66186deade712b8e",
  "parents": [
    "b024c5a7fe86abe7bdd58526c9aa5889db46762a"
  ],
  "author": {
    "name": "Chowder",
    "email": "16789070+chowder@users.noreply.github.com",
    "time": "Wed Jul 10 03:39:40 2024 +0100"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Jul 10 02:39:40 2024 +0000"
  },
  "message": "fix: use `exec` to invoke the stage-2 bootstrap for non-zip case (#2047)\n\nWhen the two-stage bootstrap is used, the parent shell process runs\npython as a child\nprocess, which changes how signals are propagated. Specifically, if a\nsignal is sent\n_directly_ to the parent (e.g. `kill $parent`), the child process\n(python) won\u0027t receive\nit and it will appear to be ignored. This is because the parent process\nis busy waiting\nfor the child process.\n\nTo fix, invoke the python process using `exec` instead. Because the\nprocess is entirely\nreplaced, signals are sent directly to the replacement. This can\u0027t be\nused for zip files,\nthough, because they rely on a catching the exit signal to perform\ncleanup of the extracted\nfiles.\n\nFixes https://github.com/bazelbuild/rules_python/issues/2043\n\n---------\n\nCo-authored-by: Richard Levasseur \u003crlevasseur@google.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "ac11e14cffdaf28624d59ac388531c37b700d303",
      "old_mode": 33188,
      "old_path": "CHANGELOG.md",
      "new_id": "cc44a47be000dfa0d9ed97bfecea22f12c590eae",
      "new_mode": 33188,
      "new_path": "CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "fb46cc696ceb20756d4b6469da8216f9cc91b406",
      "old_mode": 33188,
      "old_path": "python/private/stage1_bootstrap_template.sh",
      "new_id": "48711aa92f5f199b7414de9c81acb63639e550e8",
      "new_mode": 33188,
      "new_path": "python/private/stage1_bootstrap_template.sh"
    }
  ]
}
