)]}'
{
  "commit": "2d39a20438227c9f0bf3c5b9b1258193dea867cf",
  "tree": "cc5ce28c59c60a8501c07a773456cf3058ef13df",
  "parents": [
    "6c57f12a331804516d4cc986c801ee254068dad1"
  ],
  "author": {
    "name": "Ignas Anikevicius",
    "email": "240938+aignas@users.noreply.github.com",
    "time": "Wed Sep 02 21:44:36 2026 +0000"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Sep 02 21:44:36 2026 +0000"
  },
  "message": "feat(uv): add --directory support for locking (#4029)\n\nCurrently, requirements locking targets are tightly coupled to the Bazel\npackage directory where the lock rule is declared. This prevents having\nreusable invocations across different example packages (e.g.\n`examples/bzlmod`\nand `examples`) that produce identical lock files, hindering migration\nfrom\n`compile_pip_requirements` to the `lock` rule.\n\nTo resolve this, add a `directory` attribute to the `lock` macro and\nrules to\npass `--directory` to `uv lock` and `uv pip compile`. Reroot input\nsources,\nconstraints, and project root arguments relative to the specified\nworking\ndirectory, and update UNIX and Windows execution templates to handle\ndirectory\nremapping seamlessly.\n\n---------\n\nCo-authored-by: Richard Levasseur \u003crichardlev@gmail.com\u003e",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "af120d1f88f518062e1efbb29d604cfef6e38932",
      "old_mode": 33188,
      "old_path": "dev/requirements.txt",
      "new_id": "d0415efc180cd5f07fddbf6d8c70c8513c79e58d",
      "new_mode": 33188,
      "new_path": "dev/requirements.txt"
    },
    {
      "type": "modify",
      "old_id": "06e63bc0e63c950732a09cf544bacc7104f272da",
      "old_mode": 33188,
      "old_path": "examples/BUILD.bazel",
      "new_id": "075617a9c402ff869c1e2bf196d7d1dcb01e8991",
      "new_mode": 33188,
      "new_path": "examples/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "1b145ee57b70b56aae8d082c8e9bb6b696f88353",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/requirements_lock_3_12.txt",
      "new_id": "a57d925eed18961b3ab611f3c7b2e05784e34a86",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/requirements_lock_3_12.txt"
    },
    {
      "type": "modify",
      "old_id": "1a4710df51dc349a67c468fd87e790f17f4e7315",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/requirements_lock_3_13.txt",
      "new_id": "0401d84cb6c5157bb6702e1e3fc62a70c2433679",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/requirements_lock_3_13.txt"
    },
    {
      "type": "modify",
      "old_id": "dee788085c733a79f4e4f2a2cbbfc94df343b42a",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/requirements_lock_3_14.txt",
      "new_id": "bc70f5e29aafa38a27cd208a31c4f0293847a555",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/requirements_lock_3_14.txt"
    },
    {
      "type": "modify",
      "old_id": "dca599b624a931964cfc32e378a83199b909c2db",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/requirements_windows_3_12.txt",
      "new_id": "31c473016636961e7f775e21dadb2740229dab01",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/requirements_windows_3_12.txt"
    },
    {
      "type": "modify",
      "old_id": "192b14e3d2f15867652c6e866acf869516db3a0d",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/requirements_windows_3_13.txt",
      "new_id": "2618c52ad9fb2d4d76b8cbbcfa2f4e64dcb92433",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/requirements_windows_3_13.txt"
    },
    {
      "type": "modify",
      "old_id": "f25315d4add10f004446e024ee66c9262444cad0",
      "old_mode": 33188,
      "old_path": "examples/bzlmod/requirements_windows_3_14.txt",
      "new_id": "2af85f8a6089962915e6def25c1f211d5a2e92b9",
      "new_mode": 33188,
      "new_path": "examples/bzlmod/requirements_windows_3_14.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "07e5cecf00e08dfafc39a9da065d2e53f1b6d85b",
      "new_mode": 33188,
      "new_path": "news/4029.added.md"
    },
    {
      "type": "modify",
      "old_id": "951e12f5f8e6e9b0477ec98cd8fda7d58e3d17f5",
      "old_mode": 33188,
      "old_path": "private/BUILD.bazel",
      "new_id": "761298fbd4f642b45cfb1d50b01ed3792c5706b8",
      "new_mode": 33188,
      "new_path": "private/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "ce0ce0ec81667bffe7086149ac305b4bae62cb8a",
      "old_mode": 33188,
      "old_path": "python/uv/private/BUILD.bazel",
      "new_id": "cb73482ad84b76d052898120e7d2702ae3c2e46e",
      "new_mode": 33188,
      "new_path": "python/uv/private/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "695591e924099793c0654ca9f98a97e4c75a15bf",
      "old_mode": 33188,
      "old_path": "python/uv/private/lock.bzl",
      "new_id": "6080f135d8af0858997f10cc56a69885921abffe",
      "new_mode": 33188,
      "new_path": "python/uv/private/lock.bzl"
    },
    {
      "type": "modify",
      "old_id": "d4f4558c536c2912506aa8e7d6f0870e45e0f160",
      "old_mode": 33261,
      "old_path": "python/uv/private/template/uv_lock.bat",
      "new_id": "826e775f08599e6cb967bff1e958e39fbd285426",
      "new_mode": 33261,
      "new_path": "python/uv/private/template/uv_lock.bat"
    },
    {
      "type": "modify",
      "old_id": "a6dd6d3c39680173462e62013ccdda29818019dc",
      "old_mode": 33261,
      "old_path": "python/uv/private/template/uv_lock.sh",
      "new_id": "10d37fd5fb8d2f69d4f99e78dc51c0f1f91fc353",
      "new_mode": 33261,
      "new_path": "python/uv/private/template/uv_lock.sh"
    },
    {
      "type": "modify",
      "old_id": "2ea1b5a44a32c57041853f979e2cd06910713e5b",
      "old_mode": 33261,
      "old_path": "python/uv/private/template/uv_pip_compile.bat",
      "new_id": "a5bc6cf9ec97aa0bc4107c77784d42d45ca07ed8",
      "new_mode": 33261,
      "new_path": "python/uv/private/template/uv_pip_compile.bat"
    },
    {
      "type": "modify",
      "old_id": "7b56e0a547e07df3af76b94410577b8737ac344d",
      "old_mode": 33188,
      "old_path": "tests/multi_pypi/alpha/BUILD.bazel",
      "new_id": "15bb67645cb4872334dee82022113189a29b6840",
      "new_mode": 33188,
      "new_path": "tests/multi_pypi/alpha/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "febb6b72ae526406b5aeb83595f6b89b3dfee511",
      "old_mode": 33188,
      "old_path": "tests/multi_pypi/alpha/requirements.txt",
      "new_id": "35c2015574e14227381f42397d1226bc5166b272",
      "new_mode": 33188,
      "new_path": "tests/multi_pypi/alpha/requirements.txt"
    },
    {
      "type": "modify",
      "old_id": "7b56e0a547e07df3af76b94410577b8737ac344d",
      "old_mode": 33188,
      "old_path": "tests/multi_pypi/beta/BUILD.bazel",
      "new_id": "15bb67645cb4872334dee82022113189a29b6840",
      "new_mode": 33188,
      "new_path": "tests/multi_pypi/beta/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "de05f6dc9ab5835080dca7a29ab1a2cc18fb67bd",
      "old_mode": 33188,
      "old_path": "tests/multi_pypi/beta/requirements.txt",
      "new_id": "d4c93c2cfa1d7bb1419cf50d1e1e60b005e71816",
      "new_mode": 33188,
      "new_path": "tests/multi_pypi/beta/requirements.txt"
    },
    {
      "type": "modify",
      "old_id": "2de9147d993f78d2093bcaaac5c6557369ed31c3",
      "old_mode": 33188,
      "old_path": "tests/uv/lock/lock_run_test.py",
      "new_id": "139d8bb2c8ea6ade84ee26cdd5d4954a9747829b",
      "new_mode": 33188,
      "new_path": "tests/uv/lock/lock_run_test.py"
    },
    {
      "type": "modify",
      "old_id": "e3e035717fae40ab3fd4596a88dee6b8565b6cca",
      "old_mode": 33188,
      "old_path": "tests/uv/lock/lock_tests.bzl",
      "new_id": "3e15ef2053e180577bb7561d6bd121533b87d9a9",
      "new_mode": 33188,
      "new_path": "tests/uv/lock/lock_tests.bzl"
    },
    {
      "type": "modify",
      "old_id": "d73d206293471930b66b07695ab82c5f1b8e1942",
      "old_mode": 33188,
      "old_path": "tests/uv/lock/pyproject_toml/BUILD.bazel",
      "new_id": "c267b0f73a55853bcb9380b3bc432ad7001f3c1f",
      "new_mode": 33188,
      "new_path": "tests/uv/lock/pyproject_toml/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "5e060b03d28d0229abd0e393b60af5fc1542c8f5",
      "old_mode": 33188,
      "old_path": "tests/uv/lock/pyproject_toml/requirements.txt",
      "new_id": "d2e8d931c09725f032f8ee711bedb7a9c9f1bfc6",
      "new_mode": 33188,
      "new_path": "tests/uv/lock/pyproject_toml/requirements.txt"
    },
    {
      "type": "modify",
      "old_id": "5070d93d98fe5744965d66e223e53d8aa8606b87",
      "old_mode": 33188,
      "old_path": "tests/uv/lock/testdata/requirements.txt",
      "new_id": "bd9494266b1ca2c7d6a264dbf830e59529ef296f",
      "new_mode": 33188,
      "new_path": "tests/uv/lock/testdata/requirements.txt"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "52f64c5642e58278fd2caa6405cc75d513072340",
      "new_mode": 33261,
      "new_path": "tests/uv/lock/testdata/requirements_directory.txt"
    },
    {
      "type": "modify",
      "old_id": "aa1fabe2e381532213ef72bbbfd9b9ad225fd459",
      "old_mode": 33188,
      "old_path": "tests/uv/lock/workspaces/BUILD.bazel",
      "new_id": "235663ebce1fac5de66501947609280a2bc3b048",
      "new_mode": 33188,
      "new_path": "tests/uv/lock/workspaces/BUILD.bazel"
    },
    {
      "type": "modify",
      "old_id": "befcd6943687dd4fc07b4fe83cfeb4239ddfce72",
      "old_mode": 33188,
      "old_path": "tests/uv/lock/workspaces/requirements.txt",
      "new_id": "fdf9e9f8f6ed9d00d59a08a77ce873886b4dee53",
      "new_mode": 33188,
      "new_path": "tests/uv/lock/workspaces/requirements.txt"
    },
    {
      "type": "modify",
      "old_id": "f0e8d1e10da40ed29bb29514712f2bd0f89741d3",
      "old_mode": 33188,
      "old_path": "tools/publish/requirements_darwin.txt",
      "new_id": "eb97048d1b267866d3fd964f9f10fa8e1e9a8054",
      "new_mode": 33188,
      "new_path": "tools/publish/requirements_darwin.txt"
    },
    {
      "type": "modify",
      "old_id": "8e477081b8619acaf2faa6a63dafa1c9e0ead401",
      "old_mode": 33188,
      "old_path": "tools/publish/requirements_linux.txt",
      "new_id": "a9caddb0c032277aeb4e288423896bdfc61552c8",
      "new_mode": 33188,
      "new_path": "tools/publish/requirements_linux.txt"
    },
    {
      "type": "modify",
      "old_id": "e20fa07e2f123c946746ceed992089de71f1ab06",
      "old_mode": 33188,
      "old_path": "tools/publish/requirements_universal.txt",
      "new_id": "a0a28091ac0c65d947c50b74c4aab193699051ee",
      "new_mode": 33188,
      "new_path": "tools/publish/requirements_universal.txt"
    },
    {
      "type": "modify",
      "old_id": "98c85fca96aefb33741e0310620e864c59fb4286",
      "old_mode": 33188,
      "old_path": "tools/publish/requirements_windows.txt",
      "new_id": "95de3ce9336ea291bb95136359969f65f97f1b75",
      "new_mode": 33188,
      "new_path": "tools/publish/requirements_windows.txt"
    }
  ]
}
