)]}'
{
  "commit": "1c581242c25925a1bd6764608877ec170724f11d",
  "tree": "bff22522e101d14a53064e7055e38bf374c21cbf",
  "parents": [
    "3903d1a5b94cf5908cdd571d5c09bb27a5310ce2"
  ],
  "author": {
    "name": "Chris Love",
    "email": "335402+chrislovecnm@users.noreply.github.com",
    "time": "Thu Jun 15 10:58:54 2023 -0600"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Jun 15 16:58:54 2023 +0000"
  },
  "message": "feat(bzlmod)!: Calling pip multiple times allowing for multiple Python versions (#1254)\n\nImplementing the capability to call pip bzlmod extension multiple times.\nWe can now call the pip extension with the same hub name multiple times.\nThis allows a user to have multiple different requirement files based on\nthe Python version.\n\nWith workspace, we need incompatible aliases because you get\n@pip//tabulate or @pip_tabulate//:pkg.\nThe requirement() macro hides this, but changing the flag becomes a\nbreaking change if you\u0027ve manually referenced things. With bzlmod,\nthough, the @pip_tabulate style isn\u0027t a realistic option (you\u0027d have to\nuse_repo everything, which is a huge pain).\n\nSo we have chosen to have `@pip//tabulate`.\n\nThis commit implements that capability for pip.parse to determine the\nPython version from programmatically\nthe provided interpreter.\n\nSee \n\n\nhttps://github.com/bazelbuild/rules_python/blob/76aab0f91bd614ee1b2ade310baf28c38695c522/python/extensions/pip.bzl#L88\n\nFor more in-depth implementation details.\n\nINTERFACE CHANGE::\n\n- pip.parse argument python_version is introduced but not required. When\npossible, it is\n  inferred.\n\nBREAKING CHANGE:\n* `pip.parse()` extension: the `name` attribute is renamed `hub_name`.\nThis is to reflect\nthat the user-provided name isn\u0027t unique to each `pip.parse()` call. We\nnow have a hub that is created, and each\n   pip.parse call creates a spoke.\n* `pip.parse()` extension: the `incompatible_generate_aliases` arg is\nremoved; behavior\n     has changed to assume it is always True.\n* `pip.parse()` calls are collected under the same `hub_name` to support\nmultiple Python versions under the same resulting repo name (the hub\nname0.\n\n\nClose: #1229",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "2cf2a8a3a9aef0c0ef2e35fcbce729871fb74e0d",
      "old_mode": 33188,
      "old_path": ".bazelrc",
      "new_id": "d5b0566f05cca108e02b019020b1e1af6f536eea",
      "new_mode": 33188,
      "new_path": ".bazelrc"
    },
    {
      "type": "modify",
      "old_id": "dbe5238dee068271f9b5e08448a184dfa6792237",
      "old_mode": 33188,
      "old_path": "BZLMOD_SUPPORT.md",
      "new_id": "15e25cfe32c34c8de716623353a2cf754182aa22",
      "new_mode": 33188,
      "new_path": "BZLMOD_SUPPORT.md"
    },
    {
      "type": "modify",
      "old_id": "cf4b04e2246060fc5f5efbfbbc211bf2025b17d0",
      "old_mode": 33188,
      "old_path": "README.md",
      "new_id": "69be729eb2ed2c910c85e4cc6dafc6ceb09ead49",
      "new_mode": 33188,
      "new_path": "README.md"
    },
    {
      "type": "modify",
      "old_id": "7d539c9c44a24546e8e213bef28e602a5be49774",
      "old_mode": 33188,
      "old_path": "docs/pip_repository.md",
      "new_id": "0e0fea358f1343e3e6504ff71d69df653b551f4f",
      "new_mode": 33188,
      "new_path": "docs/pip_repository.md"
    },
    {
      "type": "modify",
      "old_id": "3bff20836dc76ca48c362dc1c745292fb409467a",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/BUILD.bazel",
      "new_id": "e788470bf36d42a2ed05d54dd4b074adf2552f0f",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "40dfb6aed11922ccbd384f281699a5fe864e691b",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/MODULE.bazel",
      "new_id": "e09e029c3bfac66ade14de693887dcf2a12d730c",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/MODULE.bazel"
    },
    {
      "type": "modify",
      "old_id": "dfc02b00a02fabd0d39e93238b38b1a8572b1f6c",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/entry_point/BUILD.bazel",
      "new_id": "f68552c3ef30953d8d9e464bbb374cc8acda6360",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/entry_point/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2679d0e4a05171975b302a483905da30a646a32c",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/libs/my_lib/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6db2e85191458c66acd539a3b10251a69df3d953",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/libs/my_lib/__init__.py"
    },
    {
      "type": "modify",
      "old_id": "a7091954422137518487d720c075ae6b3d7dd5c9",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/requirements.in",
      "new_id": "6ba351bc1caea54bf4ec548b8f1ed1cbb6693d43",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/requirements.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "6e5fc0cf399a0a84c759bc6947de322baed4a441",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/requirements_lock_3_10.txt"
    },
    {
      "type": "rename",
      "old_id": "2160fe1163e53c4e255773a5cf1936cc99a9b922",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/requirements_lock.txt",
      "new_id": "b992a8b12f8d0ad0a8c9efd366f6cee2d1d6ec14",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/requirements_lock_3_9.txt",
      "score": 71
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d240a0b91ac6387a0198be8c2c6a450fc4f26aef",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/requirements_windows_3_10.txt"
    },
    {
      "type": "rename",
      "old_id": "06cfdc332c2457ff2de29c88f7eaffdd9ee1506b",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/requirements_windows.txt",
      "new_id": "71103d14b628a2a748193893a7e1de0d1619041e",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/requirements_windows_3_9.txt",
      "score": 71
    },
    {
      "type": "modify",
      "old_id": "5331f4ab962490b9a274900ed69adb9a47a0570d",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/tests/BUILD.bazel",
      "new_id": "d74f51c739a626e4f45b80bcb82881441993d172",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/tests/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b06374c983d1fd1e751a688a1312d39a436d9a93",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/tests/my_lib_test.py"
    },
    {
      "type": "modify",
      "old_id": "fab2a26a836b53015d9ffd8d9a587c93527fa0ac",
      "old_mode": 33188,
      "old_path": "examples/bzlmod_build_file_generation/MODULE.bazel",
      "new_id": "6bc5880792fe6a16f850ba7dc4f6d00b3dac9fa9",
      "new_mode": 33188,
      "new_path": "examples/bzlmod_build_file_generation/MODULE.bazel"
    },
    {
      "type": "delete",
      "old_id": "bbeadc26b8dfd63ac189e69b4aa70f40d0385ab3",
      "old_mode": 33188,
      "old_path": "python/extensions/interpreter.bzl",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "ce5eea30d49daa76fe47894a77776f515a7a3a27",
      "old_mode": 33188,
      "old_path": "python/extensions/pip.bzl",
      "new_id": "e4eb9b52368b345e4752785616d4e3d9beafd831",
      "new_mode": 33188,
      "new_path": "python/extensions/pip.bzl"
    },
    {
      "type": "modify",
      "old_id": "5baaef96fd41a7a084e0daf5d8264783299a6990",
      "old_mode": 33188,
      "old_path": "python/extensions/private/pythons_hub.bzl",
      "new_id": "a64f203bd64f3e3f927b4e87cce89ed4bf8e77a3",
      "new_mode": 33188,
      "new_path": "python/extensions/private/pythons_hub.bzl"
    },
    {
      "type": "modify",
      "old_id": "d7a466ae1022edbaa5cea748b58e6e32f4711436",
      "old_mode": 33188,
      "old_path": "python/extensions/python.bzl",
      "new_id": "b518b57f1bf2e54dba5efeedfe74ae5e3260477a",
      "new_mode": 33188,
      "new_path": "python/extensions/python.bzl"
    },
    {
      "type": "modify",
      "old_id": "3c06301306d6f13ddee55de365e858e8a96fd8d9",
      "old_mode": 33188,
      "old_path": "python/pip.bzl",
      "new_id": "941c1e05b80b433326effe3bea6bdb0e05a3a5ea",
      "new_mode": 33188,
      "new_path": "python/pip.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "73bff87e0bf8696f738164a8a519f1a66fdb4bf7",
      "new_mode": 33188,
      "new_path": "python/pip_install/pip_hub_repository_requirements_bzlmod.bzl.tmpl"
    },
    {
      "type": "modify",
      "old_id": "915b4705ae51bac31bc25352722fbee5a2e2f1a0",
      "old_mode": 33188,
      "old_path": "python/pip_install/pip_repository.bzl",
      "new_id": "f18b69bd97724a91f76559b27d889650ba464148",
      "new_mode": 33188,
      "new_path": "python/pip_install/pip_repository.bzl"
    }
  ]
}
