)]}'
{
  "commit": "d8f6881931a63f40f6519ee077678215da6872af",
  "tree": "08e725b7d06a6ceb75dd95814ead91e61491e9c4",
  "parents": [
    "f9d6189b6320c1852078a16434846e69268d187e"
  ],
  "author": {
    "name": "Richard Levasseur",
    "email": "rlevasseur@google.com",
    "time": "Mon Dec 18 15:50:57 2023 -0800"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Mon Dec 18 23:50:57 2023 +0000"
  },
  "message": "fix(bzlmod pip.parse): allow requirements with duplicate package lines (#1620)\n\nRequirements files are permitted to have duplicate lines for the same\npackage. An example\nof this is having separate lines for a package and its extras. When we\nparse requirements,\nthe parser discards the \"extra\" portion of the entry and returns a list\nof all the packages\nas-is. When a repository is created for each entry, this means the same\nname is used for\nmultiple repositories.\n\nUnder WORKSPACE builds, duplicate repository names aren\u0027t an error. It\nappears that last\ndefined repo takes affect. Under bzlmod, duplicate repo names are an\nerror.\n\nTo fix, mimic the last-defined-wins behavior in bzlmod by using a map to\ndedupe the package names.\n\nFixes https://github.com/bazelbuild/rules_python/issues/1615",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "631bd10a0fd3dfd16e50586889918fd2a74a6b0e",
      "old_mode": 33188,
      "old_path": ".bazelrc",
      "new_id": "52251b125bbdcbb7ec43a3c34ab895dab2e0fb35",
      "new_mode": 33188,
      "new_path": ".bazelrc"
    },
    {
      "type": "modify",
      "old_id": "7cb5fde7a4409df12e9c2e07f5f884c67b5d8c25",
      "old_mode": 33188,
      "old_path": "CHANGELOG.md",
      "new_id": "a0b4a721d09bf3eef082cb36f4ac0ccb03bf2ffc",
      "new_mode": 33188,
      "new_path": "CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "9ce84ee78b8aae41fe39cd98a0ac7c757187d97f",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/MODULE.bazel",
      "new_id": "240bb28022c5e95e37b63f986c0ffdfad2bfa32e",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/MODULE.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "47eb7ca0fb58b186b4ed2b81e9cf6ff8365a43d5",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/tests/dupe_requirements/BUILD.bazel"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1139dc52523e6be01e67046f53e8b9d1396b8dfc",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/tests/dupe_requirements/dupe_requirements_test.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "b1f623395aafbda4c101f8cd1d050d98ef321995",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/tests/dupe_requirements/requirements.in"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "785f5566248ba5fcbf1376b4c9df9cd562769d0d",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/tests/dupe_requirements/requirements.txt"
    },
    {
      "type": "modify",
      "old_id": "1b25d341f0e126694d4808b47dfb0fe4d28f234d",
      "old_mode": 33188,
      "old_path": "python/private/bzlmod/pip.bzl",
      "new_id": "6d45a26d7b65a2c0b75ba51a8d4ef71d6db5c407",
      "new_mode": 33188,
      "new_path": "python/private/bzlmod/pip.bzl"
    }
  ]
}
