astral-uv:zb/executable-name-system

Last commit made on 2024-06-20
Get this branch:
git clone -b zb/executable-name-system https://git.launchpad.net/astral-uv

Branch merges

Branch information

Name:
zb/executable-name-system
Repository:
lp:astral-uv

Recent commits

dcb0f21... by Zanie Blue <email address hidden>

Apply system Python filtering to executable name requests

13e532c... by Zanie Blue <email address hidden>

Add internal options for managing toolchain discovery preferences (#4416)

Adds support for the toolchain discovery preferences outlined in
https://github.com/astral-sh/uv/issues/4198 but we don't expose this to
users yet, I'll do that next to make it easier to review.

I've made some refactors in the toolchain discovery implementation to
enable this behavior and move us towards clearer abstractions. There's
still remaining work here, but I'd prefer tackle things in follow-ups
instead of expanding this pull request. I plan on opening a couple
before merging this.

I'd like to shift the public toolchain API to focus on discovering
either an **environment** or a **toolchain**. The first would be used by
commands that operate on an environment, while the latter would be used
by commands that just need an interpreter to create environments. I
haven't changed this here, but some of the refactors are in preparation
for supporting this idea.

In brief:

- We now allow different ordering of installed toolchain discovery based
on a `ToolchainPreference` type. This is the type we will expose to
users.
- `SystemPython` was changed into an `EnvironmentPreference` which is
used to determine if we should prefer virtual or system Python
environments.
- We drop the whole `ToolchainSources` selection concept, it was
confusing and the error messages from it were awkward. Most of the
functionality is now captured by the preference enums, but you can't do
things like "only find a toolchain from the parent interpreter" as
easily anymore.

b865341... by konstin

Use correct lock path for workspace dependencies (#4421)

Previously, distributions created through `Source::Workspace` would have
the absolute path as lock path. This didn't cause any problems, since in
`Urls` we would later overwrite those urls with the correct one created
from being workspace members by path.

Changing the order surfaced this. This change emits the correct lock
path. I've manually checked the difference with `dbg!`, this is not
observable on main, but on the diverging urls branch it fixes lockfile
creation.

fc7c318... by Andrew Gallant <email address hidden>

uv/tests: add sibling fork filter dependency test

This is from: https://github.com/astral-sh/packse/pull/197

10c950a... by Andrew Gallant <email address hidden>

scenarios: bump to packse 0.3.29

9595a51... by Andrew Gallant <email address hidden>

uv-resolver: filter out sibling dependencies in a fork

When a fork is created from a list of dependencies, we were previously
adding all other sibling dependencies to every fork created. But this
isn't actually quite right, since the fork created is always created by
some marker expression. And while it is definitively disjoint from any
directly conflicting dependency specification, it is also possibly
disjoint with other dependencies. For example, as reported in #4414:

```toml
dependencies = [
  "anyio==4.4.0 ; python_version >= '3.12'",
  "anyio==4.3.0 ; python_version < '3.12'",
  "b1 ; python_version >= '3.12'",
  "b2 ; python_version < '3.12'",
]
```

The first two `anyio` requirements are conflicting with non-overlapping
marker expressions, and so a fork is created. Prior to this commit,
*both* `b1` and `b2` would be added to each fork. But of course, `b2` is
impossible in the `anyio==4.4.0` fork because of disjoint marker
expressions.

So in this commit, we specifically filter out any sibling dependencies
that could find their way into a fork that have disjoint markers with
that fork. We are careful to do this both when a new fork is created
from an existing set of dependencies, and when adding new dependencies
to a fork.

Fixes #4414

34c7bc5... by Zanie Blue <email address hidden>

Refactor Python executable chain into lazy variables (#4318)

In preparation for changing the order dynamically in #4416

7b72b55... by Ibraheem Ahmed <email address hidden>

Opt-out `tool.uv.sources` support for `uv add` (#4406)

## Summary

After this change, `uv add` will try to use `tool.uv.sources` for all
source requirements. If a source cannot be resolved, i.e. an ambiguous
Git reference is provided, it will error. Git references can be
specified with the `--tag`, `--branch`, or `--rev` arguments. Editables
are also supported with `--editable`.

Users can opt-out of `tool.uv.sources` support with the `--raw` flag,
which will force uv to use `project.dependencies`.

Part of https://github.com/astral-sh/uv/issues/3959.

3c5b136... by konstin

Move adding dependencies for versions into dedicated method (#4410)

To support diverging urls, we have to check urls when adding
dependencies (after forking). To prepare for this, i've moved adding
dependencies for the current version to
`SolveState::add_package_version_dependencies` and removed the
duplication when checking for self-dependencies.

This changed is joined with a change in pubgrub
(https://github.com/astral-sh/pubgrub/pull/27) that simplifies the same
code path.

a68146d... by Zanie Blue <email address hidden>

Support toolchain requests with platform-tag style Python implementations and version (#4407)

Closes https://github.com/astral-sh/uv/issues/4399

---------

Co-authored-by: Andrew Gallant <email address hidden>