)]}'
{
  "commit": "17a1573ecb960f0ed839fc8581cb015737b6241d",
  "tree": "96ec1c2e03f4cab6ee21f6ddfe824e87ef022ff2",
  "parents": [
    "00545742ad2450863aeb82353d4275a1e5ed3f24"
  ],
  "author": {
    "name": "Thulio Ferraz Assis",
    "email": "3149049+f0rmiga@users.noreply.github.com",
    "time": "Mon Nov 28 13:58:21 2022 -0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Nov 28 13:58:21 2022 -0800"
  },
  "message": "feat: multi-toolchain support (#846)\n\n* feat: multi-toolchain support\r\n\r\nThis adds support for multiple Python versions on the same Bazel\r\nworkspace.\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* feat: cross-version testing\r\n\r\nA py_test using 3.10 runs a py_binary using 3.9.\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: error message\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* doc: add link to bazelbuild/bazel PR fixing expand_location\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: set environment variables for py_binary too\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* test: extra case for default version taking another version\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: fail if args attribute is set\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: remove confusing output with same target name\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: buildifier\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* revert: use testing.TestEnvironment\r\n\r\nSee comment in code for the reasons.\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: linting issues\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: black linter\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* refactor: move tests to a sub-dir\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* feat: add multi_pip_parse\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: add missing aliases\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: use requirement function in example\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: deleted packages\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: update generated docs\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* refactor: version checking of the rule is already done by other tests\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: add python_interpreter_target to multi_pip_parse\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: windows\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* refactor: unify py_test and py_binary transition impls\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: test compatible with all platforms\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* rebase: adjust multi_python_versions on ci\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* refactor: use usr flags instead of platforms in transition\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* refactor: rename rule -\u003e rule_impl\r\n\r\nThis avoids confusion with the global `rule`\r\nhttps://bazel.build/rules/lib/globals#rule.\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* refactor: reduce repetition of args\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: missing test and binary-specific attributes\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: add srcs and deps attrs for path expansion\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: missing bazel_skylib on integration tests\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* refactor: use ctx.target_platform_has_constraint over select\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* doc: why symlink \u003cname\u003e.zip under Windows\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: apply suggestions from code review\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: use incoming edge transitions\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: use RunEnvironmentInfo when available\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\n* fix: cfg should be target not exec\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e\r\n\r\nSigned-off-by: Thulio Ferraz Assis \u003c3149049+f0rmiga@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d7ca8ef05bcc26260129f7af93e3241f8caf2215",
      "old_mode": 33188,
      "old_path": ".bazelci/presubmit.yml",
      "new_id": "56516e975b7a6dbe7b91633432dab060d9138801",
      "new_mode": 33188,
      "new_path": ".bazelci/presubmit.yml"
    },
    {
      "type": "modify",
      "old_id": "a4bcccfd67114a60ce8a5aec86c0504b77b12518",
      "old_mode": 33188,
      "old_path": ".bazelrc",
      "new_id": "510191b847faf85c58977d8d3966d180737187c3",
      "new_mode": 33188,
      "new_path": ".bazelrc"
    },
    {
      "type": "modify",
      "old_id": "ff1b95653405d93288d5dffdf53c1ac93cc36252",
      "old_mode": 33188,
      "old_path": "WORKSPACE",
      "new_id": "1d9d5e4e48fbf1413d64c0de5945a9c6171c6e20",
      "new_mode": 33188,
      "new_path": "WORKSPACE"
    },
    {
      "type": "modify",
      "old_id": "fc38f0fea3cde4eb00e3fb311e4ae7ccc3260aab",
      "old_mode": 33188,
      "old_path": "docs/pip.md",
      "new_id": "5f6c1d85657ee59db05f2058c481407845859607",
      "new_mode": 33188,
      "new_path": "docs/pip.md"
    },
    {
      "type": "modify",
      "old_id": "fcdbdb1a28cd7a457252de1b79e9ac3cb58335c2",
      "old_mode": 33188,
      "old_path": "examples/BUILD",
      "new_id": "39e4fce63ea5835f035b7d5a50cb75008a401e65",
      "new_mode": 33188,
      "new_path": "examples/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f23315a7a10d6ed52992021623ea67999fd87c76",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/.bazelrc"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ac51a054d2da1e1215b8e55951ca7649a3dbe984",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/.gitignore"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9a6676ea259a537025008ba61dc1c6d9fef032b4",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/WORKSPACE"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8c29f6083cad8d7bd243dda8ba29712e6c6974d5",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/libs/my_lib/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3f02b969058d9ce0024cfe2632e89234c7c5fb4f",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/libs/my_lib/__init__.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4848fabe10619a883769fe4fb5485ea7c8a98b32",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/requirements/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "14774b465e97f655dbcaa60d97c8a9aa72e7d51b",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/requirements/requirements.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0e332bfa3ee41e3540710dd3cee1aea916836957",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/requirements/requirements_lock_3_10.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "30419da4315b6889fc788a01cb26ec89cfdc07ad",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/requirements/requirements_lock_3_8.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "124355e4d2acf8b5829060545651bd1bccb209b2",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/requirements/requirements_lock_3_9.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7219ca5c2787263ce5abc8fb8d7de8859f40c094",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/tests/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "f933ed6ffaabaf3046ee8c4280a1773de0c98ad6",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/tests/cross_version_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4fc7095cf136c5fea0c685a5c1da56c6d0015b75",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/tests/my_lib_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1007a14d7ed1cb9b86c266c2e169eeadb2c77d31",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/tests/version.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "305773cf58614c494b2aead34a15a4e9608b8914",
      "new_mode": 33188,
      "new_path": "examples/multi_python_versions/tests/version_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b8f510df31f8a5d6a08b906a393a4ec562a924b7",
      "new_mode": 33261,
      "new_path": "examples/multi_python_versions/tests/version_test.sh"
    },
    {
      "type": "modify",
      "old_id": "e96db9f8443ea4307e25c887a828983572194957",
      "old_mode": 33188,
      "old_path": "examples/pip_parse/WORKSPACE",
      "new_id": "cd557a35db60e87cf2865b16ba62c90ed644f103",
      "new_mode": 33188,
      "new_path": "examples/pip_parse/WORKSPACE"
    },
    {
      "type": "modify",
      "old_id": "ce196535477d51097491e5750d755cf95f9f43bf",
      "old_mode": 33188,
      "old_path": "python/BUILD",
      "new_id": "dcdbee15af57f558bd1ef6e51ebaf5bbcc65cd9c",
      "new_mode": 33188,
      "new_path": "python/BUILD"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "272ba78f1f2d65de86d83d6f43c48325b674b13c",
      "new_mode": 33188,
      "new_path": "python/config_settings/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "977d0239187b627d6f849eef4b5159177bcf29d9",
      "new_mode": 33188,
      "new_path": "python/config_settings/config_settings.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "2fd33845430175aabaa5b2b1c896362e747f3fe7",
      "new_mode": 33188,
      "new_path": "python/config_settings/transition.bzl"
    },
    {
      "type": "modify",
      "old_id": "02ea538c38260372de3fce4a47e1d57295b92ac1",
      "old_mode": 33188,
      "old_path": "python/pip.bzl",
      "new_id": "a3c9b6975afb055420b746ce7595ab164e3d2c5b",
      "new_mode": 33188,
      "new_path": "python/pip.bzl"
    },
    {
      "type": "modify",
      "old_id": "cca9213e1b69da224be1f0a056472c3ef1a4b042",
      "old_mode": 33188,
      "old_path": "python/pip_install/requirements.bzl",
      "new_id": "7e248f625fa7659a767fda99d3a3a2c54d6f6de2",
      "new_mode": 33188,
      "new_path": "python/pip_install/requirements.bzl"
    },
    {
      "type": "modify",
      "old_id": "282859a68541d36e2f53eb459247a8a797bdd6e2",
      "old_mode": 33188,
      "old_path": "python/private/toolchains_repo.bzl",
      "new_id": "93cf31a5fcc81ef88d25a10dee2e37621a31643e",
      "new_mode": 33188,
      "new_path": "python/private/toolchains_repo.bzl"
    },
    {
      "type": "modify",
      "old_id": "6965bcd70a81ab7921c20390c36c5edd6821b392",
      "old_mode": 33188,
      "old_path": "python/repositories.bzl",
      "new_id": "e0c9b0626d2e529a32d7f6b18a78c3675ac4ba07",
      "new_mode": 33188,
      "new_path": "python/repositories.bzl"
    },
    {
      "type": "modify",
      "old_id": "dd80db47faac2c0d0ca429b61c8fcdbcd69e5819",
      "old_mode": 33188,
      "old_path": "tests/pip_repository_entry_points/WORKSPACE",
      "new_id": "f9f3543b8028f5823042b5f73becc94c80f67e67",
      "new_mode": 33188,
      "new_path": "tests/pip_repository_entry_points/WORKSPACE"
    }
  ]
}
