uv/crates
Charlie Marsh a1f50418fd
Avoid erroring for source distributions with symlinks in archive (#1944)
## Summary

For context, we have three extraction paths:

- untar (async) - used for any `.tar.gz`, local or remote.
- unzip (async) - used to unzip remote wheels, or local or remote source
distributions.
- unzip (sync) - used to untar locally-available wheels into the cache.

We use three different crates for these:

- [`tokio-tar`](https://github.com/vorot93/tokio-tar)
- [`async-zip`](https://github.com/Majored/rs-async-zip)
- [`zip-rs`](https://github.com/zip-rs/zip)

These all seem to have different support for symlinks:

- `tokio-tar` tries to create a symlink (which works fine on Unix but
errors on Windows, since we typically don't have elevated permissions).
- `async-zip` _seems_ to write the target contents directly to the file
(which is what we want).
- `zip-rs` _apparently_ writes the _name_ of the target to the file
(which isn't what we want).

Thankfully, symlinks are not allowed in wheels
(https://github.com/pypa/pip/issues/5919,
https://discuss.python.org/t/symbolic-links-in-wheels/1945), so we can
ignore `zip-rs`.

For `tokio-tar`, we now _skip_ (and warn) if we see a symlink on
Windows. We could do what pip does, and recursively copy, but it's
difficult because we don't have `Seek` on the file. (Alternatively, we
could use hard links and junctions, though those also might need to
exist already.) Let's see how far this gets us.

(We also no longer attempt to set permissions on symlinks on Unix, which
caused another failure.)

Closes https://github.com/astral-sh/uv/issues/1858.
2024-02-24 03:22:13 +00:00
..
bench Rename to `uv` (#1302) 2024-02-15 11:19:46 -06:00
cache-key Retain passwords in Git URLs (#1717) 2024-02-21 00:12:56 +00:00
distribution-filename Bump insta from 1.34.0 to 1.35.1 (#1942) 2024-02-23 21:00:35 +00:00
distribution-types Gracefully handle virtual environments with conflicting packages (#1893) 2024-02-23 19:14:52 +00:00
gourgeist Improve interpreter discovery logging (#1909) 2024-02-23 18:43:46 +00:00
install-wheel-rs Generate versioned pip launchers (#1918) 2024-02-23 18:01:31 +00:00
once-map Remove unused deps (#1273) 2024-02-11 18:53:58 +00:00
pep440-rs pep440: fix version ordering (#1883) 2024-02-22 18:01:42 -05:00
pep508-rs Add compatibility for deprecated `python_implementation` marker (#1933) 2024-02-23 14:47:58 -05:00
platform-host platform-host: check /bin/sh, then /bin/dash and then /bin/ls (#1818) 2024-02-21 11:49:28 -05:00
platform-tags Treat ARM wheels as higher-priority than universal (#1843) 2024-02-22 01:38:56 +00:00
pypi-types Bump insta from 1.34.0 to 1.35.1 (#1942) 2024-02-23 21:00:35 +00:00
requirements-txt Bump insta from 1.34.0 to 1.35.1 (#1942) 2024-02-23 21:00:35 +00:00
uv Avoid erroring for source distributions with symlinks in archive (#1944) 2024-02-24 03:22:13 +00:00
uv-auth Ensure authentication is passed from the index url to distribution files (#1886) 2024-02-22 18:10:17 -06:00
uv-build Bump insta from 1.34.0 to 1.35.1 (#1942) 2024-02-23 21:00:35 +00:00
uv-cache pep440: fix version ordering (#1883) 2024-02-22 18:01:42 -05:00
uv-client Bump insta from 1.34.0 to 1.35.1 (#1942) 2024-02-23 21:00:35 +00:00
uv-dev Add support for `config_settings` in PEP 517 hooks (#1833) 2024-02-23 00:53:45 +00:00
uv-dispatch Add support for `config_settings` in PEP 517 hooks (#1833) 2024-02-23 00:53:45 +00:00
uv-distribution Allow non-nested archives for `hexdump` and others (#1564) 2024-02-16 23:17:36 -05:00
uv-extract Avoid erroring for source distributions with symlinks in archive (#1944) 2024-02-24 03:22:13 +00:00
uv-fs Apply percent-decoding to file-based URLs (#1541) 2024-02-16 16:11:16 -05:00
uv-git Improve error message when git ref cannot be fetched (#1826) 2024-02-22 01:22:00 +00:00
uv-installer Gracefully handle virtual environments with conflicting packages (#1893) 2024-02-23 19:14:52 +00:00
uv-interpreter Bump insta from 1.34.0 to 1.35.1 (#1942) 2024-02-23 21:00:35 +00:00
uv-normalize Backport changes from publish crates (#1739) 2024-02-20 19:33:27 +01:00
uv-resolver Bump insta from 1.34.0 to 1.35.1 (#1942) 2024-02-23 21:00:35 +00:00
uv-traits Add support for `config_settings` in PEP 517 hooks (#1833) 2024-02-23 00:53:45 +00:00
uv-trampoline Win Trampoline: Use Python executable path encoded in binary (#1803) 2024-02-22 16:10:02 +01:00
uv-warnings Rename to `uv` (#1302) 2024-02-15 11:19:46 -06:00
README.md Rename to `uv` (#1302) 2024-02-15 11:19:46 -06:00

README.md

Crates

bench

Functionality for benchmarking uv.

cache-key

Generic functionality for caching paths, URLs, and other resources across platforms.

distribution-filename

Parse built distribution (wheel) and source distribution (sdist) filenames to extract structured metadata.

distribution-types

Abstractions for representing built distributions (wheels) and source distributions (sdists), and the sources from which they can be downloaded.

gourgeist

A venv replacement to create virtual environments in Rust.

install-wheel-rs

Install built distributions (wheels) into a virtual environment.]

once-map

A waitmap-like concurrent hash map for executing tasks exactly once.

pep440-rs

Utilities for interacting with Python version numbers and specifiers.

pep508-rs

Utilities for interacting with PEP 508 dependency specifiers.

platform-host

Functionality for detecting the current platform (operating system, architecture, etc.).

platform-tags

Functionality for parsing and inferring Python platform tags as per PEP 425.

uv

Command-line interface for the uv package manager.

uv-build

A PEP 517-compatible build frontend for uv.

uv-cache

Functionality for caching Python packages and associated metadata.

uv-client

Client for interacting with PyPI-compatible HTTP APIs.

uv-dev

Development utilities for uv.

uv-dispatch

A centralized struct for resolving and building source distributions in isolated environments. Implements the traits defined in uv-traits.

uv-distribution

Client for interacting with built distributions (wheels) and source distributions (sdists). Capable of fetching metadata, distribution contents, etc.

uv-extract

Utilities for extracting files from archives.

uv-fs

Utilities for interacting with the filesystem.

uv-git

Functionality for interacting with Git repositories.

uv-installer

Functionality for installing Python packages into a virtual environment.

uv-interpreter

Functionality for detecting and leveraging the current Python interpreter.

uv-normalize

Normalize package and extra names as per Python specifications.

uv-package

Types and functionality for working with Python packages, e.g., parsing wheel files.

uv-resolver

Functionality for resolving Python packages and their dependencies.

uv-traits

Shared traits for uv, to avoid circular dependencies.

pypi-types

General-purpose type definitions for types used in PyPI-compatible APIs.

uv-warnings

User-facing warnings for uv.

requirements-txt

Functionality for parsing requirements.txt files.