astral-uv:charlie/sha

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

Branch merges

Branch information

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

Recent commits

53283cd... by Charlie Marsh <email address hidden>

Add dedicated bench

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

Rayon

71c9a87... by Charlie Marsh <email address hidden>

With seahash

5886e3a... by Charlie Marsh <email address hidden>

Add benchmarks

3902126... by konstin

Windows launchers using posy trampolines (#1092)

## Background

In virtual environments, we want to install python programs as console
commands, e.g. `black .` over `python -m black .`. They may be called
[entrypoints](https://packaging.python.org/en/latest/specifications/entry-points/)
or scripts. For entrypoints, we're given a module name and function to
call in that module.

On Unix, we generate a minimal python script launcher. Text files are
runnable on unix by adding a shebang at their top, e.g.

```python
#!/usr/bin/env python
```

will make the operating system run the file with the current python
interpreter. A venv launcher for black in `/home/ferris/colorize/.venv`
(module name: `black`, function to call: `patched_main`) would look like
this:

```python
#!/home/ferris/colorize/.venv/bin/python
# -*- coding: utf-8 -*-
import re
import sys
from black import patched_main
if __name__ == "__main__":
    sys.argv[0] = re.sub(r"(-script\.pyw|\.exe)?$", "", sys.argv[0])
    sys.exit(patched_main())
```

On windows, this doesn't work, we can only rely on launching `.exe`
files.

## Summary

We use posy's rust implementation of a trampoline, which is based on
distlib's c++ implementation. We pre-build a minimal exe and append the
launcher script as stored zip archive behind it. The exe will look for
the venv python interpreter next to it and use it to execute the
appended script.

The changes in this PR make the `black` entrypoint work:

```powershell
cargo run -- venv .venv
cargo run -q -- pip install black
.\.venv\Scripts\black --version
```

Integration with our existing tests will be done in follow-up PRs.

## Implementation and Details

I've vendored the posy trampoline crate. It is a formatted, renamed and
slightly changed for embedding version of
https://github.com/njsmith/posy/pull/28.

The posy launchers are smaller than the distlib launchers, 16K vs 106K
for black. Currently only `x86_64-pc-windows-msvc` is supported. The
crate requires a nightly compiler for its no-std binary size tricks.

On windows, an application can be launched with a console or without (to
create windows instead), which needs two different launchers. The gui
launcher will subsequently use `pythonw.exe` while the console launcher
uses `python.exe`.

f1d3b08... by konstin

Add missing version to pip sync test (#1121)

The test started failing due to a newer version on pypi.

361a203... by Charlie Marsh <email address hidden>

Add `--no-annotate` and `--no-header` flags (#1117)

Closes #1107.
Closes #1108.

7755f98... by Charlie Marsh <email address hidden>

Support extras in editable requirements (#1113)

## Summary

This PR adds support for requirements like `-e .[d]`.

Closes #1091.

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

Remove refresh checks from the install plan (#1119)

## Summary

Rather than checking cache freshness in the install plan, it's a lot
simple to have the install plan _never_ return cached data when the
refresh policy is in place, and then rely on the distribution database
to check for freshness. The original implementation didn't support this,
since the distribution database was rebuilding things too often. Now, it
rarely rebuilds (it's much better about this), so it seems conceptually
much simpler to split up the responsibilities like this.

50057cd... by Charlie Marsh <email address hidden>

Re-add Cargo's known hosts checking (#1118)

## Summary

This ensures that (like Cargo) we don't suffer from
https://github.com/advisories/GHSA-r5w3-xm58-jv6j, by way of checking
known hosts when fetching via `libgit2`.

The implementation is taken from Cargo itself, modified to remove all
configuration, since we don't yet support configuration for known hosts,
etc.

Closes #285.