)]}'
{
  "commit": "0d0ab5cbf6ebd4c7a7c1be44c74df56be12185c9",
  "tree": "987f54cd37d295a920da93e104e91baeb09e1318",
  "parents": [
    "ab3e3f790788e119bfb362a60819727d7450f0f3"
  ],
  "author": {
    "name": "Jaemin Choi",
    "email": "1dotolee@gmail.com",
    "time": "Sat Aug 02 08:07:35 2025 +0900"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Aug 01 23:07:35 2025 +0000"
  },
  "message": "fix(pypi): show overridden index urls in pypi download error (#3130)\n\nCloses #2985\n\nSuppose invalid `experimental_index_url_overrides` in `pip.parse` is set\nlike below.\n\n```bzl\npip.parse(\n    experimental_index_url \u003d \"https://pypi.org/simple\",\n    experimental_index_url_overrides \u003d {\"mypy\": \"https://invalid.com\"},\n    hub_name \u003d \"pypi\",\n    requirements_lock \u003d \"//:requirements_lock.txt\",\n)\n```\n\nIt fails as follows, showing only \"pypi.org\" as pypi index url, not\n\"invalid.com\" for for `mypy` package.\n\n```\nError in fail: Failed to download metadata for [\"mypy\"] for from urls: [\"https://pypi.org/simple\"].\nIf you would like to skip downloading metadata for these packages please add \u0027simpleapi_skip\u003d[\"mypy\"]\u0027 to your \u0027pip.parse\u0027 call.\n```\n\nTo show overridden url for each package, show url of each package that\nhas been failed to download metadata. The error message with this PR is\nlike below.\n\n```\nError in fail:\nFailed to download metadata of the following packages from urls:\n{\n    \"mypy\": \"https://invalid.com\",\n}\n\nIf you would like to skip downloading metadata for these packages please add \u0027simpleapi_skip\u003d[\"mypy\"]\u0027 to your \u0027pip.parse\u0027 call.\n```",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "c52481d52e0011558666b20b0da1f055696c9ffc",
      "old_mode": 33188,
      "old_path": "CHANGELOG.md",
      "new_id": "d21ebc7d36cf7dbf37b27e0c9bb92fdf3ca43c8b",
      "new_mode": 33188,
      "new_path": "CHANGELOG.md"
    },
    {
      "type": "modify",
      "old_id": "a3ba9691cd6bd25312e271f09c3e85bf4dd6923e",
      "old_mode": 33188,
      "old_path": "python/private/pypi/simpleapi_download.bzl",
      "new_id": "52ff02a178c7d73f07ccd2c02972d5bc04e5cee3",
      "new_mode": 33188,
      "new_path": "python/private/pypi/simpleapi_download.bzl"
    },
    {
      "type": "modify",
      "old_id": "a96815c12cb060d4918e053c517faf8222e8c81f",
      "old_mode": 33188,
      "old_path": "tests/pypi/simpleapi_download/simpleapi_download_tests.bzl",
      "new_id": "8dc307235aa7e045be7e1e801d1026c864d9e43a",
      "new_mode": 33188,
      "new_path": "tests/pypi/simpleapi_download/simpleapi_download_tests.bzl"
    }
  ]
}
