)]}'
{
  "commit": "4f4eafd35cc4a57808e7b1a385ca4445ec1f2146",
  "tree": "b17847ab3472e76edb1f1b2845a8d703ead6dfa7",
  "parents": [
    "581e6c5cc2166a7804be9e418fe3185779d7538b"
  ],
  "author": {
    "name": "Kristian Hartikainen",
    "email": "kristian@ekarobotics.com",
    "time": "Sat Aug 22 10:43:28 2026 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sat Aug 22 10:43:28 2026 +0000"
  },
  "message": "fix(pypi): support source-less wheels with dependencies (#4054)\n\nSource-less wheels with dependency metadata fail analysis because the\ngenerated wrapper `py_library` puts an empty `:srcs` target in its\n`srcs` attribute.\n\nThis forwards `:srcs` through the wrapper only when it produces Python\nsources, while retaining it in `deps` for `PyInfo` propagation. Before\nthis change, [`py-spy\u003d\u003d0.4.1`](https://pypi.org/project/py-spy/0.4.1/)\ndependency fails during analysis. Afterward, it can be used as a\ndependency.\n\nAdds regression coverage for source-less, sourceful, and generated\nnamespace-package source targets, along with a news entry.\n\nLargely implemented with Opus.\n\nFixes #4053.\n\n---------\n\nCo-authored-by: Ignas Anikevicius \u003c240938+aignas@users.noreply.github.com\u003e",
  "tree_diff": [
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e4b259b889378f76e4ce65c3b26123a0c5ee19f7",
      "new_mode": 33188,
      "new_path": "news/4054.fixed.md"
    },
    {
      "type": "modify",
      "old_id": "3d8ba4aa710f81b6fb649aa814b6c0a0ac8c1ce5",
      "old_mode": 33188,
      "old_path": "python/private/py_library.bzl",
      "new_id": "db56f24d4ee50aefa4079e7dc75030e138da88ac",
      "new_mode": 33188,
      "new_path": "python/private/py_library.bzl"
    },
    {
      "type": "modify",
      "old_id": "c375e72794b24c0e6bc443dce45cfa35a6dbe1da",
      "old_mode": 33188,
      "old_path": "tests/base_rules/py_library/py_library_tests.bzl",
      "new_id": "a3be7c4bcf911fb459aefbae16bb15baffe26ff6",
      "new_mode": 33188,
      "new_path": "tests/base_rules/py_library/py_library_tests.bzl"
    }
  ]
}
