)]}'
{
  "commit": "c9bb66e1f5aa9d8d951f61d4ad73891604133839",
  "tree": "1536aef15d1535eab69c7b9deb7cb10c772f6a8d",
  "parents": [
    "77a89a6600432f94617f851511987104014d6276"
  ],
  "author": {
    "name": "Alex Faxå",
    "email": "alexander.faxa@gmail.com",
    "time": "Mon Mar 16 01:51:12 2026 +0100"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Mar 16 00:51:12 2026 +0000"
  },
  "message": "fix(bootstrap): manual runfiles path construction when using submodules (#3636)\n\nThis fixes https://github.com/bazel-contrib/rules_python/issues/3563.\nVerified by running the repro in\nhttps://github.com/mering/reproduction_rules_python_1_7.\n\nThe identified regression in\nhttps://github.com/bazel-contrib/rules_python/commit/b8e32c454a1158cd78ce4ecaef809b99bef4e5da\nis problematic because prepending `ctx.workspace_name` to `short_path`\nresults in paths containing `..` (e.g., `_main/../sub+/path/to/file.py`)\nwhen building from a root module that includes other modules. This\ncauses the `_find_runfiles_root`\n[logic](https://github.com/faximan/rules_python/blob/eb6ac472eb86cc263acc336a2b73982043069aae/python/private/site_init_template.py#L73),\nwhich _counts slashes_, to incorrectly calculate the runfiles root.\n\nThe fix is simply using the available `runfiles_root_path` function\ninstead. In the example above, this makes the path simply\n`sub+/path/to/file.py`.\n\n---------\n\nCo-authored-by: Ignas Anikevicius \u003c240938+aignas@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "e5748704b646966c3535407abcc653b227022b49",
      "old_mode": 33188,
      "old_path": "CHANGELOG.md",
      "new_id": "031b06624f23cbfa46cf83c5dec3be22a90cd8bc",
      "new_mode": 33188,
      "new_path": "CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "53344c708a70235e35c3ec609097efb72e05de1f",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/other_module/other_module/pkg/BUILD.bazel",
      "new_id": "318822d88858814ffc69397c46580303dfb0667b",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/other_module/other_module/pkg/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "1bd8a900a9ddce5e20070149b7bd4a21ce595d34",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/tests/other_module/BUILD.bazel",
      "new_id": "24231e651ab262547ef04e5d60ec4116209bd577",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/tests/other_module/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6b92a853e0a7f6d8060a47f719891d17659c3efd",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/tests/other_module/other_module_import_test.py"
    },
    {
      "type": "modify",
      "old_id": "284aea6bff85e21744182c3adaf2332403e4033f",
      "old_mode": 33188,
      "old_path": "python/private/py_executable.bzl",
      "new_id": "495c7dddcfa2741253ee477a9210165a3f57f122",
      "new_mode": 33188,
      "new_path": "python/private/py_executable.bzl"
    }
  ]
}
