)]}'
{
  "commit": "ca2c5b2273bcda68c6e2f5ab653501ac849b719b",
  "tree": "4400f1af2962d26c675f2a7dbf113d662c7fa145",
  "parents": [
    "10b28efc376d5810a08afa0d3ba873d89f7436a8"
  ],
  "author": {
    "name": "Richard Levasseur",
    "email": "richardlev@gmail.com",
    "time": "Wed Dec 17 00:31:23 2025 -0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Dec 17 08:31:23 2025 +0000"
  },
  "message": "refactor: optimize venv creation for nvidia and pkgutil style namespace packages (#3460)\n\nWhen pkgutil style namespace packages are used, multiple distributions\nprovide\nthe same venv path (e.g. `foo/__init__.py`). The venv symlink logic then\ntries to\nsymlink the `foo/` directory as it looks like the highest linkable\ndirectory. When\nconflict merging logic runs later, it then has to flatten a depset with\nall the files\nin the conflicting distributions.\n\nTo fix, have whl_library() try to guess when a file is a pkgutil\nnamespace package.\nThese are then pass onto py_library\u0027s venv building logic so it can\ntreat the\ndirectories as not directly linkable. A conflict still occurs, but it\nonly\ncontains the single `__init__.py` file.\n\nAlong the way, special case the \"nvidia\" package name and always treat\nit as a namespace\npackage. This is because nvidia packages aren\u0027t strictly correct: each\nhas a blank\n`__init__.py` file (which marks it as a regular package, not namespace\npackage). Special\ncasing like this is undesirable, but it greatly reduces the number of\nconflicts if\ne.g. torch is installed, and I couldn\u0027t find any other metadata to\nindicate it\u0027s a\nnamespace package.\n\nAlong the way, add some hints to AGENTS.md so they understand repository\nrules better.\n\nFixes https://github.com/bazel-contrib/rules_python/issues/3401\n\n---------\n\nCo-authored-by: gemini-code-assist[bot] \u003c176961590+gemini-code-assist[bot]@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6473f10231e7b29bd85427fc8b788692fef1b219",
      "old_mode": 33188,
      "old_path": ".bazelrc",
      "new_id": "718f83080c355ba976cd6229183acbe0b8326e4d",
      "new_mode": 33188,
      "new_path": ".bazelrc"
    },
    {
      "type": "modify",
      "old_id": "671b85c6bde74ea6e94643111ff8b483a9225989",
      "old_mode": 33188,
      "old_path": "AGENTS.md",
      "new_id": "c1c9f7902bc526b0407de04494137ad7b48b04c9",
      "new_mode": 33188,
      "new_path": "AGENTS.md"
    },
    {
      "type": "modify",
      "old_id": "87ae3f5ac44d3de40df463243ddada327edc487c",
      "old_mode": 33188,
      "old_path": "CHANGELOG.md",
      "new_id": "69e159c6c7deb15bb5581726f61fbabd00a2d9dc",
      "new_mode": 33188,
      "new_path": "CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "ef7499eb0c1e2225f734c3e01ecbd473e90d0ff9",
      "old_mode": 33188,
      "old_path": "MODULE.bazel",
      "new_id": "80c7ab1d993395873efb4e199fb9c3550c72745d",
      "new_mode": 33188,
      "new_path": "MODULE.bazel"
    },
    {
      "type": "modify",
      "old_id": "44048578c6ea15a31e69c065baa9851eb59c886a",
      "old_mode": 33188,
      "old_path": "python/private/BUILD.bazel",
      "new_id": "e92c45dad4e2ea675cb1fe4886b7a9b4cffb784b",
      "new_mode": 33188,
      "new_path": "python/private/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "d621a5d941b95da767375223333efd09a579b55a",
      "old_mode": 33188,
      "old_path": "python/private/internal_dev_deps.bzl",
      "new_id": "0e21d8b8a547b938cbbfaa65065174a7b3d8bc34",
      "new_mode": 33188,
      "new_path": "python/private/internal_dev_deps.bzl"
    },
    {
      "type": "modify",
      "old_id": "b2a9fdd3be9f63f724ce011012e211a6246d7fdf",
      "old_mode": 33188,
      "old_path": "python/private/py_library.bzl",
      "new_id": "7e9a59f277dc786294da673b3f06ca399c04818c",
      "new_mode": 33188,
      "new_path": "python/private/py_library.bzl"
    },
    {
      "type": "modify",
      "old_id": "dd86dcfbc6b696a53731b6a20437ea57f1aace10",
      "old_mode": 33188,
      "old_path": "python/private/pypi/BUILD.bazel",
      "new_id": "18caa53d7f09d262eefa2aed378de39b4e1bc0b7",
      "new_mode": 33188,
      "new_path": "python/private/pypi/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "04c9b5d6855a4c93ca59b2d469a8c7ddb550146a",
      "old_mode": 33188,
      "old_path": "python/private/pypi/pypi_repo_utils.bzl",
      "new_id": "d8e320014f007586d75c37353d0241ab5fcb4dc2",
      "new_mode": 33188,
      "new_path": "python/private/pypi/pypi_repo_utils.bzl"
    },
    {
      "type": "modify",
      "old_id": "fdb3f932313a4d151806687527b1133bcb97a0ad",
      "old_mode": 33188,
      "old_path": "python/private/pypi/whl_library.bzl",
      "new_id": "201ef59b895c22bda728070a9fd68542e7ea9a80",
      "new_mode": 33188,
      "new_path": "python/private/pypi/whl_library.bzl"
    },
    {
      "type": "modify",
      "old_id": "39b1cccd5e4e3f2a1883bdc5e407169cb77dc545",
      "old_mode": 33188,
      "old_path": "python/private/pypi/whl_library_targets.bzl",
      "new_id": "0fe2c52d9f88f4a2521e1a1f140f97e04c9cbfaa",
      "new_mode": 33188,
      "new_path": "python/private/pypi/whl_library_targets.bzl"
    },
    {
      "type": "modify",
      "old_id": "d3053fe626018f977311eb89cf89a3f76395597e",
      "old_mode": 33188,
      "old_path": "python/private/util.bzl",
      "new_id": "31f317fedf7fe40b2877d00425ab7fb70ab355a9",
      "new_mode": 33188,
      "new_path": "python/private/util.bzl"
    },
    {
      "type": "modify",
      "old_id": "7ff5c8512c84ddfd0ff0abd879e36d731d114057",
      "old_mode": 33188,
      "old_path": "python/private/venv_runfiles.bzl",
      "new_id": "851d7015c6e541849bf97ed53c88cef7fd7a3277",
      "new_mode": 33188,
      "new_path": "python/private/venv_runfiles.bzl"
    },
    {
      "type": "modify",
      "old_id": "1d80340a13bc4c08bce8f6c3349d95b0a7dc0645",
      "old_mode": 33188,
      "old_path": "tests/pypi/whl_library_targets/whl_library_targets_tests.bzl",
      "new_id": "9b574039b220be9042617a43393cce0d09949c8a",
      "new_mode": 33188,
      "new_path": "tests/pypi/whl_library_targets/whl_library_targets_tests.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "tests/repos/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "tests/repos/pkgutil_nspkg1/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c4da2cf0b73c9500585ba8870a0a77db88911fbf",
      "new_mode": 33188,
      "new_path": "tests/repos/pkgutil_nspkg1/nspkg/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f4dbe63934c5d1c5a8f2e27944df21ff1c92bf3f",
      "new_mode": 33188,
      "new_path": "tests/repos/pkgutil_nspkg1/nspkg/one/a.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7ffb60b70157f07746488819a1ee42a8f87d8bed",
      "new_mode": 33188,
      "new_path": "tests/repos/pkgutil_nspkg1/pkgutil_nspkg1-1.0.dist-info/METADATA"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e039fee1aedfcf6b3a0db610ca424a623f5cbc54",
      "new_mode": 33188,
      "new_path": "tests/repos/pkgutil_nspkg1/pkgutil_nspkg1-1.0.dist-info/RECORD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "dad2b72544cedbea05f1677da1d5b4812a3c09a3",
      "new_mode": 33188,
      "new_path": "tests/repos/pkgutil_nspkg1/pkgutil_nspkg1-1.0.dist-info/WHEEL"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e69de29bb2d1d6434b8b29ae775ad8c2e48c5391",
      "new_mode": 33188,
      "new_path": "tests/repos/pkgutil_nspkg2/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c4da2cf0b73c9500585ba8870a0a77db88911fbf",
      "new_mode": 33188,
      "new_path": "tests/repos/pkgutil_nspkg2/nspkg/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f4dbe63934c5d1c5a8f2e27944df21ff1c92bf3f",
      "new_mode": 33188,
      "new_path": "tests/repos/pkgutil_nspkg2/nspkg/two/b.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "368e64ce199dbd6a12bf463fd69d8c3ae29b9850",
      "new_mode": 33188,
      "new_path": "tests/repos/pkgutil_nspkg2/pkgutil_nspkg2-1.0.dist-info/METADATA"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c93970cb26a6427a6dea365b92fa54da9a5512b8",
      "new_mode": 33188,
      "new_path": "tests/repos/pkgutil_nspkg2/pkgutil_nspkg2-1.0.dist-info/RECORD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "dad2b72544cedbea05f1677da1d5b4812a3c09a3",
      "new_mode": 33188,
      "new_path": "tests/repos/pkgutil_nspkg2/pkgutil_nspkg2-1.0.dist-info/WHEEL"
    },
    {
      "type": "modify",
      "old_id": "e92c0aaf5a046331ec548a1e2050a8ff62c76a2b",
      "old_mode": 33188,
      "old_path": "tests/venv_site_packages_libs/app_files_building/app_files_building_tests.bzl",
      "new_id": "f85508dd3db69b77f5f83be98070ab4bb05795e7",
      "new_mode": 33188,
      "new_path": "tests/venv_site_packages_libs/app_files_building/app_files_building_tests.bzl"
    }
  ]
}
