)]}'
{
  "commit": "382b6785a57ee428fc0ec367bcb380c6266cab7b",
  "tree": "d16bd11f5d1288311fb4edfc329c2754c3ea0a06",
  "parents": [
    "423c1de345c32d67dfe1e8d43510399ab10dc2c4"
  ],
  "author": {
    "name": "Christian von Schultz",
    "email": "christian@embedl.com",
    "time": "Thu Oct 05 16:04:09 2023 +0200"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Thu Oct 05 14:04:09 2023 +0000"
  },
  "message": "feat(py_wheel): Normalize name and version (#1331)\n\nAdded the `incompatible_normalize_name` feature flag to normalize the\npackage distribution name according to latest Python packaging\nstandards. Defaults to `False` for the time being.\n\nAdded the `incompatible_normalize_version` feature flag to normalize the\npackage version according to PEP440 standard. This also adds support for\nlocal version specifiers (versions with a `+` in them), in accordance\nwith PEP440. Defaults to `False` for the time being.\n\nInstead of following the obsolete PEP 427 escaping procedure for\ndistribution names and versions, we should use the rules specified by\nhttps://packaging.python.org/en/latest/specifications (sections \"Package\nname normalization\" and \"Binary distribution format\"). For the versions,\nthis means normalizing them according to PEP 440.\n\nAdded as feature flags to avoid forcing the user to deal with breaking\nchanges when upgrading `rules_python`:\n\n- Distribution names have stronger requirements now: \"A valid name\nconsists only of ASCII letters and numbers, period, underscore and\nhyphen. It must start and end with a letter or number.\"\nhttps://packaging.python.org/en/latest/specifications/name-normalization/\n\n- Versions must be valid PEP 440 version identifiers. Previously\nversions such as \"0.1-2-3\" would have been accepted; that is no longer\nthe case.\n\n- The file name of generated wheels may have changed, if the\ndistribution name or the version identifier wasn\u0027t in normalized form.\n\n- The wheelmaker now depends on `packaging.version`, which means the\n`py_wheel` user now needs to load pip dependencies in their\n`WORKSPACE.bazel` file:\n  ```\nload(\"@rules_python//python/pip_install:repositories.bzl\",\n\"pip_install_dependencies\")\n\n  pip_install_dependencies()\n  ```\n\nFixes bazelbuild/rules_python#883. Fixes bazelbuild/rules_python#1132.\n\n---------\n\nCo-authored-by: Ignas Anikevicius \u003canikevicius@gmail.com\u003e\nCo-authored-by: Ignas Anikevicius \u003c240938+aignas@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "59bdac1b06637746785d3bdaa31aaf71018915ff",
      "old_mode": 33188,
      "old_path": "CHANGELOG.md",
      "new_id": "3c421a9d338a1bbbb35217c4c55c957937ceb4c1",
      "new_mode": 33188,
      "new_path": "CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "0e8e110ef59accae7a4385d8f74ec23a7f5b70bb",
      "old_mode": 33261,
      "old_path": "docs/packaging.md",
      "new_id": "90c66dc1de7ba7be2735305b7bfd7b63f36490ce",
      "new_mode": 33261,
      "new_path": "docs/packaging.md"
    },
    {
      "type": "modify",
      "old_id": "f56a41b370822becd1723bbcd58159119994dae1",
      "old_mode": 33188,
      "old_path": "examples/wheel/BUILD.bazel",
      "new_id": "81422d37c32d4ece13a9557991c42618440b92be",
      "new_mode": 33188,
      "new_path": "examples/wheel/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "f51a0ecedcac4cfd97706e6ee0714e9557741071",
      "old_mode": 33188,
      "old_path": "examples/wheel/wheel_test.py",
      "new_id": "671bd8ad8473adfb3e7b45d5637b417741d53033",
      "new_mode": 33188,
      "new_path": "examples/wheel/wheel_test.py"
    },
    {
      "type": "modify",
      "old_id": "34b4de3d004ec62272feb7459ced6f826a750ded",
      "old_mode": 33188,
      "old_path": "python/BUILD.bazel",
      "new_id": "5ff752e13f5d89e95889c597202f05e85a277a14",
      "new_mode": 33188,
      "new_path": "python/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "d1610584c9f50e7892f4422cf7ba38c092fb15c2",
      "old_mode": 33188,
      "old_path": "python/private/BUILD.bazel",
      "new_id": "f6e3012edd81671071bd675523e7e36574a363aa",
      "new_mode": 33188,
      "new_path": "python/private/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "d8bceabcb8ab6cd46460a7ded142836eed5cb2ec",
      "old_mode": 33188,
      "old_path": "python/private/py_wheel.bzl",
      "new_id": "4152e08c1826ee2420ce103406bba7f6a4c25d5a",
      "new_mode": 33188,
      "new_path": "python/private/py_wheel.bzl"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "9566348987e6de36f2385c76aadc9a47e33e5a90",
      "new_mode": 33188,
      "new_path": "python/private/py_wheel_normalize_pep440.bzl"
    },
    {
      "type": "modify",
      "old_id": "e580732aacdf5709fecda28e6fd26628a33e1608",
      "old_mode": 33188,
      "old_path": "tests/py_wheel/py_wheel_tests.bzl",
      "new_id": "3c03a1b8e430cf76cbd7d7fd6f09fe9254a0b389",
      "new_mode": 33188,
      "new_path": "tests/py_wheel/py_wheel_tests.bzl"
    },
    {
      "type": "modify",
      "old_id": "fd951d9086777cddfa071331788c690631d8eeab",
      "old_mode": 33188,
      "old_path": "tools/BUILD.bazel",
      "new_id": "51bd56df0adf7fb22ee79941a8ab08a42cd21c27",
      "new_mode": 33188,
      "new_path": "tools/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "63b833fc5d59072389a848c8fe54e86e87b99283",
      "old_mode": 33188,
      "old_path": "tools/wheelmaker.py",
      "new_id": "dce54060932f807b711e1d20e043f5165d471869",
      "new_mode": 33188,
      "new_path": "tools/wheelmaker.py"
    }
  ]
}
