astral-uv:charlie/index

Last commit made on 2024-01-16
Get this branch:
git clone -b charlie/index https://git.launchpad.net/astral-uv

Branch merges

Branch information

Name:
charlie/index
Repository:
lp:astral-uv

Recent commits

8e7fbea... by Charlie Marsh <email address hidden>

Split version map out from resolver index

0f592b6... by Charlie Marsh <email address hidden>

Remove clone from `RegistryWheelIndex` (#937)

Doesn't need to own the package names.

2a69b27... by Charlie Marsh <email address hidden>

Use a standalone error type for `--find-links` registry (#936)

e71e3e8... by Charlie Marsh <email address hidden>

Refresh `BuildDispatch` when running pip install with `--reinstall` (#933)

## Summary

This fixes an extremely subtle bug in `pip install --reinstall`, whereby
if you depend on `setuptools` at the top level, we end up uninstalling
it after resolving, which breaks some cached state. If we have
`--reinstall`, we need to reset that cached state between resolving and
installing.

## Test Plan

Running `pip install --reinstall` with:

```txt
setuptools
devpi @ https://files.pythonhosted.org/packages/e4/f3/e334eb4dc930ccb677363e1305a3730003d203efbb023329e4b610e4515b/devpi-2.2.0.tar.gz
```

Fails on `main`, but passes.

116da6b... by Charlie Marsh <email address hidden>

Share in-flight map across resolutions (#932)

## Summary

This PR fixes a subtle bug in `pip install` when using `--reinstall`. If
a package depends on a build system directly (e.g., `waitress` depends
on `setuptools`), and then you have other packages that also need the
build system to build a source distribution, right now, we don't share
the `OnceMap` between those cases.

This lifts the `InFlight` tracking up a level, so that it's initialized
once per command, then shared everywhere.

## Test Plan

I'm having trouble coming up with an identical test-case and hesitant to
add this slow test to the suite... But if you run `pip install
--reinstall` with:

```
waitress @ git+https://github.com/zanieb/waitress
devpi-server @ git+https://github.com/zanieb/devpi#subdirectory=server
```

It fails consistently on `main` and passes here.

249ca10... by Charlie Marsh <email address hidden>

Move Puffin subcommands to a pip namespace (#921)

## Summary

This makes the separation clearer between the legacy `pip` API and the
API we'll add in the future for the package manager itself. It also
enables seamless `puffin pip` aliasing for those that want it.

Closes #918.

e54fdea... by Charlie Marsh <email address hidden>

Continue to respect `--find-links` with `--no-index` (#931)

Like `pip`, we should allow `--find-links` with `--no-index`.

42888a9... by Charlie Marsh <email address hidden>

Share flat index across resolutions (#930)

## Summary

This PR restructures the flat index fetching in a few ways:

1. It now lives in its own `FlatIndexClient`, since it felt a bit
awkward (in my opinion) for it to live in `RegistryClient`.
2. We now fetch the `FlatIndex` outside of the resolver. This has a few
benefits: (1) the resolver construct is no longer `async` and no longer
returns `Result`, which feels better for a resolver; and (2) we can
share the `FlatIndex` across resolutions rather than re-fetching it for
every source distribution build.

e6d7124... by Charlie Marsh <email address hidden>

Add an extra struct around the package-to-flat index map (#923)

## Summary

`FlatIndex` is now the thing that's keyed on `PackageName`, while
`FlatDistributions` is what used to be called `FlatIndex` (a map from
version to `PrioritizedDistribution`, for a single package). I find this
a bit clearer, since we can also remove the `from_files` that doesn't
return `Self`, which I had trouble following.

9a3f3d3... by Charlie Marsh <email address hidden>

Remove `PubGrubVersion` (#924)

## Summary

I'm running into some annoyances converting `&Version` to
`&PubGrubVersion` (which is just a wrapper type around `Version`), and I
realized... We don't even need `PubGrubVersion`?

The reason we "need" it today is due to the orphan trait rule: `Version`
is defined in `pep440_rs`, but we want to `impl
pubgrub::version::Version for Version` in the resolver crate.

Instead of introducing a new type here, which leads to a lot of
awkwardness around conversion and API isolation, what if we instead just
implement `pubgrub::version::Version` in `pep440_rs` via a feature? That
way, we can just use `Version` everywhere without any confusion and
conversion for the wrapper type.