)]}'
{
  "commit": "efc7589af6ba7fddf249b082ebfa29d7e260e0e6",
  "tree": "d339df756a0406efdc3a43e9bbb1e10a863aadcf",
  "parents": [
    "a2ff7daba62da590d7395701a145acd900f29908"
  ],
  "author": {
    "name": "Ignas Anikevicius",
    "email": "240938+aignas@users.noreply.github.com",
    "time": "Sun May 11 11:27:25 2025 +0900"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sun May 11 02:27:25 2025 +0000"
  },
  "message": "fix(pypi): finish PEP508/PEP440 impl for version matching (#2856)\n\nThis reuses the previous work by @vonschultz who implemented\na PEP440 version normalizer. We extend it and use it in the\nPEP508 marker evaluation.\n\nSummary:\n- Extend the normalization parser to output individual parts\n  of the versions to the parsing context.\n- Re-implement all of the version comparison calls to use the\n  parsed version.\n- Add extra validation for `.*` usage in the environment markers\n- Fallback to non-version matching in the environment markers\n  if one of the sides is not a version.\n- Rename the original normalizer file to `version.bzl` because\n  as far as Python is concerned this is the only version that\n  there can be. We could in theory probably reuse this in other\n  code where we are parsing the Python interpreter version many\n  times, but this is left for the future.\n\nFixes #2826\nWork towards #2821\n\n---------\n\nCo-authored-by: Richard Levasseur \u003crichardlev@gmail.com\u003e\nCo-authored-by: Richard Levasseur \u003crlevasseur@google.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d2e0721526e9073d8e27b94d292fbab8e930ba41",
      "old_mode": 33188,
      "old_path": ".bazelrc",
      "new_id": "4e6f2fa187947351d27c30bca4dc08a964adeaa1",
      "new_mode": 33188,
      "new_path": ".bazelrc"
    },
    {
      "type": "modify",
      "old_id": "5f67c8a5ec8f128828c2acbe5763be9a30d8f857",
      "old_mode": 33188,
      "old_path": "CHANGELOG.md",
      "new_id": "aa7fc9d415659baa770ebda9055420ae0757baec",
      "new_mode": 33188,
      "new_path": "CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "3389a0dacc7f126353c205b54f191a6826104011",
      "old_mode": 33188,
      "old_path": "python/BUILD.bazel",
      "new_id": "867c43478a48d36396a4a05bf95b097719786121",
      "new_mode": 33188,
      "new_path": "python/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "9cc8ffc62cb45e4b5fbc47245e47ddb3b54167a1",
      "old_mode": 33188,
      "old_path": "python/private/BUILD.bazel",
      "new_id": "e72a8fcaa7ea77af664acaf17d9df368a753c938",
      "new_mode": 33188,
      "new_path": "python/private/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "c196ca6ad0e6832bfddd687fbd1af209ef6f17e1",
      "old_mode": 33188,
      "old_path": "python/private/py_wheel.bzl",
      "new_id": "ffc24f68461e28926c37358eed256a0e8ea7271b",
      "new_mode": 33188,
      "new_path": "python/private/py_wheel.bzl"
    },
    {
      "type": "delete",
      "old_id": "9566348987e6de36f2385c76aadc9a47e33e5a90",
      "old_mode": 33188,
      "old_path": "python/private/py_wheel_normalize_pep440.bzl",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "d5d897ef8cccb8abad2b385e2c17f124d22fb4c5",
      "old_mode": 33188,
      "old_path": "python/private/pypi/BUILD.bazel",
      "new_id": "f541cbe98b3cddf2ab391719145ed74a173fa847",
      "new_mode": 33188,
      "new_path": "python/private/pypi/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "70840c76c6695e1ed7ed45acdb8655c505ec5814",
      "old_mode": 33188,
      "old_path": "python/private/pypi/pep508_evaluate.bzl",
      "new_id": "61a5b19999e2bb8048eb8981672bb82e30fb6899",
      "new_mode": 33188,
      "new_path": "python/private/pypi/pep508_evaluate.bzl"
    },
    {
      "type": "modify",
      "old_id": "cc9ae6ecb6f2f9839372ff189b1fa0c1e23122f7",
      "old_mode": 33188,
      "old_path": "python/private/semver.bzl",
      "new_id": "0cbd17234829bf287a3175077aedbb458f64e402",
      "new_mode": 33188,
      "new_path": "python/private/semver.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4425cc76618410c838c286659c68a9fdc1a428dd",
      "new_mode": 33188,
      "new_path": "python/private/version.bzl"
    },
    {
      "type": "modify",
      "old_id": "091e01c37de0d0e35aa1248fd5b5eb54aec33a68",
      "old_mode": 33188,
      "old_path": "tests/py_wheel/py_wheel_tests.bzl",
      "new_id": "43c068e5971ddaa1b69ad69c0e11699619f6f54c",
      "new_mode": 33188,
      "new_path": "tests/py_wheel/py_wheel_tests.bzl"
    },
    {
      "type": "modify",
      "old_id": "303c167900c730c242cf1622f6e23e74bc6b207d",
      "old_mode": 33188,
      "old_path": "tests/pypi/pep508/evaluate_tests.bzl",
      "new_id": "7b6c064b9481594f683b4c2e0fd2b8a65f2f3b4e",
      "new_mode": 33188,
      "new_path": "tests/pypi/pep508/evaluate_tests.bzl"
    },
    {
      "type": "modify",
      "old_id": "aef3deca82ad8dcfc43278cb80aaf837a9831fd9",
      "old_mode": 33188,
      "old_path": "tests/semver/semver_test.bzl",
      "new_id": "9d13402c9210edfd327ede59df9618337cca7983",
      "new_mode": 33188,
      "new_path": "tests/semver/semver_test.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d6fdecd4cfccb5589995521c9fce6d43402111ea",
      "new_mode": 33188,
      "new_path": "tests/version/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "589f9ac05de48e07237282571232d507b840da0a",
      "new_mode": 33188,
      "new_path": "tests/version/version_test.bzl"
    }
  ]
}
