astral-uv:charlie/int

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

Branch merges

Branch information

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

Recent commits

3b343ee... by Charlie Marsh <email address hidden>

Restructure interpreter queries

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

Prefer target Python version over current version for builds (#1040)

Extends #1029
Closes https://github.com/astral-sh/puffin/issues/1038

Instead of always using the current Python version for builds when a
target version is provided, we will do our best to use a compatible
Python version for builds.

Removes behavior where Python versions without patch versions were
always assumed to be the latest known patch version (previously
discussed in https://github.com/astral-sh/puffin/pull/534). While this
was convenient for resolutions which include packages which require
minimum patch versions e.g. `requires-python=">=3.7.4"`, it conflicts
with the idea that the target Python version you provide is the
_minimum_ compatible version. Additionally, it complicates interpreter
lookup as we cannot tell if the user has asked for that specific patch
version or not.

77dcb24... by konstin

Add some instructions about build dependencies (#1075)

You need to install cmake on windows, so i added a hint about using
`pipx install cmake`, and some more general notes on building and
testing puffin.

See #817

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

Remove some unused dependencies (#1077)

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

Avoid unzipping local wheels when fresh (#1076)

Since the archive is a single file in this case, we can rely on the
modification timestamp to check for freshness.

411613a... by konstin

No python prefix in packse scenarios (#1066)

In windows, `python3.9` and `python3.11` are not in `PATH`. Instead, we
should pass only the python version to `puffin venv -p` in packse
scenarios (#1039).

63f3434... by Charlie Marsh <email address hidden>

Use nanoid instead of uuid (#1074)

## Summary

Gives us equivalent randomness with ~half as many characters.

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

make some things guaranteed to be deterministic (#1065)

This PR replaces a few uses of hash maps/sets with btree maps/sets and
index maps/sets. This has the benefit of guaranteeing a deterministic
order of iteration.

I made these changes as part of looking into a flaky test.
Unfortunately, I'm not optimistic that anything here will actually fix
the flaky test, since I don't believe anything was actually dependent
on the order of iteration.

1b3a3f4... by Charlie Marsh <email address hidden>

Add `--refresh` behavior to the cache (#1057)

## Summary

This PR is an alternative approach to #949 which should be much safer.
As in #949, we add a `Refresh` policy to the cache. However, instead of
deleting entries from the cache the first time we read them, we now
check if the entry is sufficiently new (created after the start of the
command) if the refresh policy applies. If the entry is stale, then we
avoid reading it and continue onward, relying on the cache to
appropriately overwrite based on "new" data. (This relies on the
preceding PRs, which ensure the cache is append-only, and ensure that we
can atomically overwrite.)

Unfortunately, there are just a lot of paths through the cache, and
didn't data is handled with different policies, so I really had to go
through and consider the "right" behavior for each case. For example,
the HTTP requests can use `max-age=0, must-revalidate`. But for the
routes that are based on filesystem modification, we need to do
something slightly different.

Closes #945.

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

Track HTTP caches for URL wheels (#1071)

## Summary

This PR ensures that we store HTTP caching information for wheels.
Previously, we only stored these for source distributions. This will be
helpful for refresh, since we can avoid re-downloading wheels that are
unchanged per HTTP caching semantics.

There should be zero performance hit here for warm installs, and only an
extremely small hit for cold installs (writing the HTTP cache data to
disk). The hyperfine benchmarks reflect this.