Fix --no-emit-workspace with --all-packages on single-member workspaces#18098
Fix --no-emit-workspace with --all-packages on single-member workspaces#18098zanieb merged 3 commits intoastral-sh:mainfrom
--no-emit-workspace with --all-packages on single-member workspaces#18098Conversation
…le-member workspaces When a workspace contains a single member at the root, it is omitted from the lockfile's members set. The `--all-packages` flag selects the `InstallTarget::Workspace` variant, which returned `None` for `project_name()`. This meant that `include_package()` could not identify the root project as a workspace member to filter it out when `--no-emit-workspace` was passed. The fix returns the root project's name from `project_name()` when the lockfile's members set is empty, matching the existing fallback in `roots()`. Closes astral-sh#18070 https://claude.ai/code/session_01DwLXfeSGDiCyR5rrcn7kxj
Why is that, shouldn't we instead ensure that the members list is accurate? |
|
It's intentional behavior uv/crates/uv/src/commands/project/lock_target.rs Lines 151 to 156 in 50eb601 I don't think we should change it, since it'll churn lock files. If we see more problems, we can consider it. |
|
I think it's intended to avoid a noisy members manifest when you're not actually using a workspace. |
|
That's a confusing edge case to do this on the |
crates/uv/tests/it/export.rs
Outdated
| requires = ["setuptools>=42"] | ||
| build-backend = "setuptools.build_meta" |
There was a problem hiding this comment.
Here we don't build the project, We should use uv_build for all new test packages, it's faster and uses no network for the cases where we do.
This MR contains the following updates: | Package | Update | Change | |---|---|---| | [uv](https://github.com/astral-sh/uv) | patch | `0.10.4` → `0.10.6` | MR created with the help of [el-capitano/tools/renovate-bot](https://gitlab.com/el-capitano/tools/renovate-bot). **Proposed changes to behavior should be submitted there as MRs.** --- ### Release Notes <details> <summary>astral-sh/uv (uv)</summary> ### [`v0.10.6`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0106) [Compare Source](astral-sh/uv@0.10.5...0.10.6) Released on 2026-02-24. ##### Bug fixes - Apply lockfile marker normalization for fork markers ([#​18116](astral-sh/uv#18116)) - Fix Python version selection for scripts with a `requires-python` conflicting with `.python-version` ([#​18097](astral-sh/uv#18097)) - Preserve file permissions when using reflinks on Linux ([#​18187](astral-sh/uv#18187)) ##### Documentation - Remove verbose documentation from optional dependencies help text ([#​18180](astral-sh/uv#18180)) ### [`v0.10.5`](https://github.com/astral-sh/uv/blob/HEAD/CHANGELOG.md#0105) [Compare Source](astral-sh/uv@0.10.4...0.10.5) Released on 2026-02-23. ##### Enhancements - Add hint when named index is found in a parent config file ([#​18087](astral-sh/uv#18087)) - Add warning for `uv lock --frozen` ([#​17859](astral-sh/uv#17859)) - Attempt to use reflinks by default on Linux ([#​18117](astral-sh/uv#18117)) - Fallback to hardlinks after reflink failure before copying ([#​18104](astral-sh/uv#18104)) - Filter `pylock.toml` wheels by tags and `requires-python` ([#​18081](astral-sh/uv#18081)) - Validate wheel filenames are normalized during `uv publish` ([#​17783](astral-sh/uv#17783)) - Fix message when `exclude-newer` invalidates the lock file ([#​18100](astral-sh/uv#18100)) - Change the missing files log level to debug ([#​18075](astral-sh/uv#18075)) ##### Performance - Improve performance of repeated conflicts with an extra ([#​18094](astral-sh/uv#18094)) ##### Bug fixes - Fix `--no-emit-workspace` with `--all-packages` on single-member workspaces ([#​18098](astral-sh/uv#18098)) - Fix `UV_NO_DEFAULT_GROUPS` rejecting truthy values like `1` ([#​18057](astral-sh/uv#18057)) - Fix iOS detection ([#​17973](astral-sh/uv#17973)) - Propagate project-level conflicts to package extras ([#​18096](astral-sh/uv#18096)) - Use a global build concurrency semaphore ([#​18054](astral-sh/uv#18054)) ##### Documentation - Update documentation heading for environment variable files ([#​18122](astral-sh/uv#18122)) - Fix comment about `uv export` formats ([#​17900](astral-sh/uv#17900)) - Make it clear that Windows is supported in user- and system- level configuration docs ([#​18106](astral-sh/uv#18106)) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever MR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this MR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My4zMS4xIiwidXBkYXRlZEluVmVyIjoiNDMuMzEuOSIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiUmVub3ZhdGUgQm90IiwiYXV0b21hdGlvbjpib3QtYXV0aG9yZWQiLCJkZXBlbmRlbmN5LXR5cGU6OnBhdGNoIl19-->
Closes #18070
Fixes an issue where
--no-emit-workspace --all-packageswould incorrectly emit-e .(the workspace root) when the workspace contained only a single member at the root.When a workspace contains a single member at the root, that member is not included in the lockfile's
membersset (it's empty). The--all-packagesflag usesInstallTarget::Workspace, which returnedNoneforproject_name(). This meantinclude_package()had no way to identify the root project as a workspace member — neither theproject_namecheck nor themembers.contains()check could match it, so it passed through the--no-emit-workspacefilter.