mirror of https://github.com/astral-sh/uv
Compare commits
No commits in common. "main" and "0.9.17" have entirely different histories.
|
|
@ -184,13 +184,13 @@ jobs:
|
||||||
- buildpack-deps:trixie,trixie,debian
|
- buildpack-deps:trixie,trixie,debian
|
||||||
- debian:bookworm-slim,bookworm-slim
|
- debian:bookworm-slim,bookworm-slim
|
||||||
- buildpack-deps:bookworm,bookworm
|
- buildpack-deps:bookworm,bookworm
|
||||||
- python:3.14-alpine3.23,python3.14-alpine3.23,python3.14-alpine
|
- python:3.14-alpine,python3.14-alpine
|
||||||
- python:3.13-alpine3.23,python3.13-alpine3.23,python3.13-alpine
|
- python:3.13-alpine,python3.13-alpine
|
||||||
- python:3.12-alpine3.23,python3.12-alpine3.23,python3.12-alpine
|
- python:3.12-alpine,python3.12-alpine
|
||||||
- python:3.11-alpine3.23,python3.11-alpine3.23,python3.11-alpine
|
- python:3.11-alpine,python3.11-alpine
|
||||||
- python:3.10-alpine3.23,python3.10-alpine3.23,python3.10-alpine
|
- python:3.10-alpine,python3.10-alpine
|
||||||
- python:3.9-alpine3.22,python3.9-alpine3.22,python3.9-alpine
|
- python:3.9-alpine,python3.9-alpine
|
||||||
- python:3.8-alpine3.20,python3.8-alpine3.20,python3.8-alpine
|
- python:3.8-alpine,python3.8-alpine
|
||||||
- python:3.14-trixie,python3.14-trixie
|
- python:3.14-trixie,python3.14-trixie
|
||||||
- python:3.13-trixie,python3.13-trixie
|
- python:3.13-trixie,python3.13-trixie
|
||||||
- python:3.12-trixie,python3.12-trixie
|
- python:3.12-trixie,python3.12-trixie
|
||||||
|
|
|
||||||
|
|
@ -233,7 +233,7 @@ jobs:
|
||||||
with:
|
with:
|
||||||
persist-credentials: false
|
persist-credentials: false
|
||||||
- name: "Install cargo shear"
|
- name: "Install cargo shear"
|
||||||
uses: taiki-e/install-action@d850aa816998e5cf15f67a78c7b933f2a5033f8a # v2.63.3
|
uses: taiki-e/install-action@a416ddeedbd372e614cc1386e8b642692f66865e # v2.57.1
|
||||||
with:
|
with:
|
||||||
tool: cargo-shear
|
tool: cargo-shear
|
||||||
- run: cargo shear
|
- run: cargo shear
|
||||||
|
|
@ -289,7 +289,6 @@ jobs:
|
||||||
UV_HTTP_RETRIES: 5
|
UV_HTTP_RETRIES: 5
|
||||||
run: |
|
run: |
|
||||||
cargo nextest run \
|
cargo nextest run \
|
||||||
--cargo-profile fast-build \
|
|
||||||
--features python-patch,native-auth,secret-service \
|
--features python-patch,native-auth,secret-service \
|
||||||
--workspace \
|
--workspace \
|
||||||
--status-level skip --failure-output immediate-final --no-fail-fast -j 20 --final-status-level slow
|
--status-level skip --failure-output immediate-final --no-fail-fast -j 20 --final-status-level slow
|
||||||
|
|
@ -331,7 +330,6 @@ jobs:
|
||||||
UV_HTTP_RETRIES: 5
|
UV_HTTP_RETRIES: 5
|
||||||
run: |
|
run: |
|
||||||
cargo nextest run \
|
cargo nextest run \
|
||||||
--cargo-profile fast-build \
|
|
||||||
--no-default-features \
|
--no-default-features \
|
||||||
--features python,python-managed,pypi,git,git-lfs,performance,crates-io,native-auth,apple-native \
|
--features python,python-managed,pypi,git,git-lfs,performance,crates-io,native-auth,apple-native \
|
||||||
--workspace \
|
--workspace \
|
||||||
|
|
@ -387,7 +385,6 @@ jobs:
|
||||||
shell: bash
|
shell: bash
|
||||||
run: |
|
run: |
|
||||||
cargo nextest run \
|
cargo nextest run \
|
||||||
--cargo-profile fast-build \
|
|
||||||
--no-default-features \
|
--no-default-features \
|
||||||
--features python,pypi,python-managed,native-auth,windows-native \
|
--features python,pypi,python-managed,native-auth,windows-native \
|
||||||
--workspace \
|
--workspace \
|
||||||
|
|
@ -564,15 +561,15 @@ jobs:
|
||||||
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
||||||
|
|
||||||
- name: "Build"
|
- name: "Build"
|
||||||
run: cargo build --profile no-debug
|
run: cargo build
|
||||||
|
|
||||||
- name: "Upload binary"
|
- name: "Upload binary"
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: uv-linux-libc-${{ github.sha }}
|
name: uv-linux-libc-${{ github.sha }}
|
||||||
path: |
|
path: |
|
||||||
./target/no-debug/uv
|
./target/debug/uv
|
||||||
./target/no-debug/uvx
|
./target/debug/uvx
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
build-binary-linux-aarch64:
|
build-binary-linux-aarch64:
|
||||||
|
|
@ -591,15 +588,15 @@ jobs:
|
||||||
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
||||||
|
|
||||||
- name: "Build"
|
- name: "Build"
|
||||||
run: cargo build --profile no-debug
|
run: cargo build
|
||||||
|
|
||||||
- name: "Upload binary"
|
- name: "Upload binary"
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: uv-linux-aarch64-${{ github.sha }}
|
name: uv-linux-aarch64-${{ github.sha }}
|
||||||
path: |
|
path: |
|
||||||
./target/no-debug/uv
|
./target/debug/uv
|
||||||
./target/no-debug/uvx
|
./target/debug/uvx
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
build-binary-linux-musl:
|
build-binary-linux-musl:
|
||||||
|
|
@ -623,15 +620,15 @@ jobs:
|
||||||
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
||||||
|
|
||||||
- name: "Build"
|
- name: "Build"
|
||||||
run: cargo build --profile no-debug --target x86_64-unknown-linux-musl --bin uv --bin uvx
|
run: cargo build --target x86_64-unknown-linux-musl --bin uv --bin uvx
|
||||||
|
|
||||||
- name: "Upload binary"
|
- name: "Upload binary"
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: uv-linux-musl-${{ github.sha }}
|
name: uv-linux-musl-${{ github.sha }}
|
||||||
path: |
|
path: |
|
||||||
./target/x86_64-unknown-linux-musl/no-debug/uv
|
./target/x86_64-unknown-linux-musl/debug/uv
|
||||||
./target/x86_64-unknown-linux-musl/no-debug/uvx
|
./target/x86_64-unknown-linux-musl/debug/uvx
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
build-binary-macos-aarch64:
|
build-binary-macos-aarch64:
|
||||||
|
|
@ -649,15 +646,15 @@ jobs:
|
||||||
|
|
||||||
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
||||||
- name: "Build"
|
- name: "Build"
|
||||||
run: cargo build --profile no-debug --bin uv --bin uvx
|
run: cargo build --bin uv --bin uvx
|
||||||
|
|
||||||
- name: "Upload binary"
|
- name: "Upload binary"
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: uv-macos-aarch64-${{ github.sha }}
|
name: uv-macos-aarch64-${{ github.sha }}
|
||||||
path: |
|
path: |
|
||||||
./target/no-debug/uv
|
./target/debug/uv
|
||||||
./target/no-debug/uvx
|
./target/debug/uvx
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
build-binary-macos-x86_64:
|
build-binary-macos-x86_64:
|
||||||
|
|
@ -675,15 +672,15 @@ jobs:
|
||||||
|
|
||||||
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
||||||
- name: "Build"
|
- name: "Build"
|
||||||
run: cargo build --profile no-debug --bin uv --bin uvx
|
run: cargo build --bin uv --bin uvx
|
||||||
|
|
||||||
- name: "Upload binary"
|
- name: "Upload binary"
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: uv-macos-x86_64-${{ github.sha }}
|
name: uv-macos-x86_64-${{ github.sha }}
|
||||||
path: |
|
path: |
|
||||||
./target/no-debug/uv
|
./target/debug/uv
|
||||||
./target/no-debug/uvx
|
./target/debug/uvx
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
build-binary-windows-x86_64:
|
build-binary-windows-x86_64:
|
||||||
|
|
@ -711,15 +708,15 @@ jobs:
|
||||||
|
|
||||||
- name: "Build"
|
- name: "Build"
|
||||||
working-directory: ${{ env.UV_WORKSPACE }}
|
working-directory: ${{ env.UV_WORKSPACE }}
|
||||||
run: cargo build --profile no-debug --bin uv --bin uvx
|
run: cargo build --bin uv --bin uvx
|
||||||
|
|
||||||
- name: "Upload binary"
|
- name: "Upload binary"
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: uv-windows-x86_64-${{ github.sha }}
|
name: uv-windows-x86_64-${{ github.sha }}
|
||||||
path: |
|
path: |
|
||||||
${{ env.UV_WORKSPACE }}/target/no-debug/uv.exe
|
${{ env.UV_WORKSPACE }}/target/debug/uv.exe
|
||||||
${{ env.UV_WORKSPACE }}/target/no-debug/uvx.exe
|
${{ env.UV_WORKSPACE }}/target/debug/uvx.exe
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
build-binary-windows-aarch64:
|
build-binary-windows-aarch64:
|
||||||
|
|
@ -751,15 +748,15 @@ jobs:
|
||||||
|
|
||||||
- name: "Build"
|
- name: "Build"
|
||||||
working-directory: ${{ env.UV_WORKSPACE }}
|
working-directory: ${{ env.UV_WORKSPACE }}
|
||||||
run: cargo build --profile no-debug --target aarch64-pc-windows-msvc
|
run: cargo build --target aarch64-pc-windows-msvc
|
||||||
|
|
||||||
- name: "Upload binary"
|
- name: "Upload binary"
|
||||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||||
with:
|
with:
|
||||||
name: uv-windows-aarch64-${{ github.sha }}
|
name: uv-windows-aarch64-${{ github.sha }}
|
||||||
path: |
|
path: |
|
||||||
${{ env.UV_WORKSPACE }}/target/aarch64-pc-windows-msvc/no-debug/uv.exe
|
${{ env.UV_WORKSPACE }}/target/aarch64-pc-windows-msvc/debug/uv.exe
|
||||||
${{ env.UV_WORKSPACE }}/target/aarch64-pc-windows-msvc/no-debug/uvx.exe
|
${{ env.UV_WORKSPACE }}/target/aarch64-pc-windows-msvc/debug/uvx.exe
|
||||||
retention-days: 1
|
retention-days: 1
|
||||||
|
|
||||||
build-binary-msrv:
|
build-binary-msrv:
|
||||||
|
|
@ -784,10 +781,10 @@ jobs:
|
||||||
- name: "Install mold"
|
- name: "Install mold"
|
||||||
uses: rui314/setup-mold@725a8794d15fc7563f59595bd9556495c0564878 # v1
|
uses: rui314/setup-mold@725a8794d15fc7563f59595bd9556495c0564878 # v1
|
||||||
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
||||||
- run: cargo +${MSRV} build --profile no-debug
|
- run: cargo +${MSRV} build
|
||||||
env:
|
env:
|
||||||
MSRV: ${{ steps.msrv.outputs.value }}
|
MSRV: ${{ steps.msrv.outputs.value }}
|
||||||
- run: ./target/no-debug/uv --version
|
- run: ./target/debug/uv --version
|
||||||
|
|
||||||
build-binary-freebsd:
|
build-binary-freebsd:
|
||||||
needs: determine_changes
|
needs: determine_changes
|
||||||
|
|
@ -808,7 +805,7 @@ jobs:
|
||||||
chmod +x cross
|
chmod +x cross
|
||||||
mv cross /usr/local/bin/cross
|
mv cross /usr/local/bin/cross
|
||||||
|
|
||||||
cross build --target x86_64-unknown-freebsd --profile no-debug
|
cross build --target x86_64-unknown-freebsd
|
||||||
|
|
||||||
- name: Test in Firecracker VM
|
- name: Test in Firecracker VM
|
||||||
uses: acj/freebsd-firecracker-action@a5a3fc1709c5b5368141a5699f10259aca3cd965 # v0.6.0
|
uses: acj/freebsd-firecracker-action@a5a3fc1709c5b5368141a5699f10259aca3cd965 # v0.6.0
|
||||||
|
|
@ -822,8 +819,8 @@ jobs:
|
||||||
cat <<EOF > $include_path
|
cat <<EOF > $include_path
|
||||||
target
|
target
|
||||||
target/x86_64-unknown-freebsd
|
target/x86_64-unknown-freebsd
|
||||||
target/x86_64-unknown-freebsd/no-debug
|
target/x86_64-unknown-freebsd/debug
|
||||||
target/x86_64-unknown-freebsd/no-debug/uv
|
target/x86_64-unknown-freebsd/debug/uv
|
||||||
EOF
|
EOF
|
||||||
|
|
||||||
rsync -r -e "ssh" \
|
rsync -r -e "ssh" \
|
||||||
|
|
@ -833,7 +830,7 @@ jobs:
|
||||||
--exclude "*" \
|
--exclude "*" \
|
||||||
. firecracker:
|
. firecracker:
|
||||||
run-in-vm: |
|
run-in-vm: |
|
||||||
mv target/x86_64-unknown-freebsd/no-debug/uv uv
|
mv target/x86_64-unknown-freebsd/debug/uv uv
|
||||||
chmod +x uv
|
chmod +x uv
|
||||||
./uv --version
|
./uv --version
|
||||||
|
|
||||||
|
|
|
||||||
37
CHANGELOG.md
37
CHANGELOG.md
|
|
@ -3,43 +3,6 @@
|
||||||
<!-- prettier-ignore-start -->
|
<!-- prettier-ignore-start -->
|
||||||
|
|
||||||
|
|
||||||
## 0.9.18
|
|
||||||
|
|
||||||
Released on 2025-12-16.
|
|
||||||
|
|
||||||
### Enhancements
|
|
||||||
|
|
||||||
- Add value hints to command line arguments to improve shell completion accuracy ([#17080](https://github.com/astral-sh/uv/pull/17080))
|
|
||||||
- Improve error handling in `uv publish` ([#17096](https://github.com/astral-sh/uv/pull/17096))
|
|
||||||
- Improve rendering of multiline error messages ([#17132](https://github.com/astral-sh/uv/pull/17132))
|
|
||||||
- Support redirects in `uv publish` ([#17130](https://github.com/astral-sh/uv/pull/17130))
|
|
||||||
- Include Docker images with the alpine version, e.g., `python3.x-alpine3.23` ([#17100](https://github.com/astral-sh/uv/pull/17100))
|
|
||||||
|
|
||||||
### Configuration
|
|
||||||
|
|
||||||
- Accept `--torch-backend` in `[tool.uv]` ([#17116](https://github.com/astral-sh/uv/pull/17116))
|
|
||||||
|
|
||||||
### Performance
|
|
||||||
|
|
||||||
- Speed up `uv cache size` ([#17015](https://github.com/astral-sh/uv/pull/17015))
|
|
||||||
- Initialize S3 signer once ([#17092](https://github.com/astral-sh/uv/pull/17092))
|
|
||||||
|
|
||||||
### Bug fixes
|
|
||||||
|
|
||||||
- Avoid panics due to reads on failed requests ([#17098](https://github.com/astral-sh/uv/pull/17098))
|
|
||||||
- Enforce latest-version in `@latest` requests ([#17114](https://github.com/astral-sh/uv/pull/17114))
|
|
||||||
- Explicitly set `EntryType` for file entries in tar ([#17043](https://github.com/astral-sh/uv/pull/17043))
|
|
||||||
- Ignore `pyproject.toml` index username in lockfile comparison ([#16995](https://github.com/astral-sh/uv/pull/16995))
|
|
||||||
- Relax error when using `uv add` with `UV_GIT_LFS` set ([#17127](https://github.com/astral-sh/uv/pull/17127))
|
|
||||||
- Support file locks on ExFAT on macOS ([#17115](https://github.com/astral-sh/uv/pull/17115))
|
|
||||||
- Change schema for `exclude-newer` into optional string ([#17121](https://github.com/astral-sh/uv/pull/17121))
|
|
||||||
|
|
||||||
### Documentation
|
|
||||||
|
|
||||||
- Drop arm musl caveat from Docker documentation ([#17111](https://github.com/astral-sh/uv/pull/17111))
|
|
||||||
- Fix version reference in resolver example ([#17085](https://github.com/astral-sh/uv/pull/17085))
|
|
||||||
- Better documentation for `exclude-newer*` ([#17079](https://github.com/astral-sh/uv/pull/17079))
|
|
||||||
|
|
||||||
## 0.9.17
|
## 0.9.17
|
||||||
|
|
||||||
Released on 2025-12-09.
|
Released on 2025-12-09.
|
||||||
|
|
|
||||||
|
|
@ -1,125 +0,0 @@
|
||||||
# Contributor Covenant Code of Conduct
|
|
||||||
|
|
||||||
- [Our Pledge](#our-pledge)
|
|
||||||
- [Our Standards](#our-standards)
|
|
||||||
- [Enforcement Responsibilities](#enforcement-responsibilities)
|
|
||||||
- [Scope](#scope)
|
|
||||||
- [Enforcement](#enforcement)
|
|
||||||
- [Enforcement Guidelines](#enforcement-guidelines)
|
|
||||||
- [1. Correction](#1-correction)
|
|
||||||
- [2. Warning](#2-warning)
|
|
||||||
- [3. Temporary Ban](#3-temporary-ban)
|
|
||||||
- [4. Permanent Ban](#4-permanent-ban)
|
|
||||||
- [Attribution](#attribution)
|
|
||||||
|
|
||||||
## Our Pledge
|
|
||||||
|
|
||||||
We as members, contributors, and leaders pledge to make participation in our community a
|
|
||||||
harassment-free experience for everyone, regardless of age, body size, visible or invisible
|
|
||||||
disability, ethnicity, sex characteristics, gender identity and expression, level of experience,
|
|
||||||
education, socio-economic status, nationality, personal appearance, race, religion, or sexual
|
|
||||||
identity and orientation.
|
|
||||||
|
|
||||||
We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and
|
|
||||||
healthy community.
|
|
||||||
|
|
||||||
## Our Standards
|
|
||||||
|
|
||||||
Examples of behavior that contributes to a positive environment for our community include:
|
|
||||||
|
|
||||||
- Demonstrating empathy and kindness toward other people
|
|
||||||
- Being respectful of differing opinions, viewpoints, and experiences
|
|
||||||
- Giving and gracefully accepting constructive feedback
|
|
||||||
- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the
|
|
||||||
experience
|
|
||||||
- Focusing on what is best not just for us as individuals, but for the overall community
|
|
||||||
|
|
||||||
Examples of unacceptable behavior include:
|
|
||||||
|
|
||||||
- The use of sexualized language or imagery, and sexual attention or advances of any kind
|
|
||||||
- Trolling, insulting or derogatory comments, and personal or political attacks
|
|
||||||
- Public or private harassment
|
|
||||||
- Publishing others' private information, such as a physical or email address, without their
|
|
||||||
explicit permission
|
|
||||||
- Other conduct which could reasonably be considered inappropriate in a professional setting
|
|
||||||
|
|
||||||
## Enforcement Responsibilities
|
|
||||||
|
|
||||||
Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior
|
|
||||||
and will take appropriate and fair corrective action in response to any behavior that they deem
|
|
||||||
inappropriate, threatening, offensive, or harmful.
|
|
||||||
|
|
||||||
Community leaders have the right and responsibility to remove, edit, or reject comments, commits,
|
|
||||||
code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and
|
|
||||||
will communicate reasons for moderation decisions when appropriate.
|
|
||||||
|
|
||||||
## Scope
|
|
||||||
|
|
||||||
This Code of Conduct applies within all community spaces, and also applies when an individual is
|
|
||||||
officially representing the community in public spaces. Examples of representing our community
|
|
||||||
include using an official e-mail address, posting via an official social media account, or acting as
|
|
||||||
an appointed representative at an online or offline event.
|
|
||||||
|
|
||||||
## Enforcement
|
|
||||||
|
|
||||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community
|
|
||||||
leaders responsible for enforcement at <hey@astral.sh>. All complaints will be reviewed and
|
|
||||||
investigated promptly and fairly.
|
|
||||||
|
|
||||||
All community leaders are obligated to respect the privacy and security of the reporter of any
|
|
||||||
incident.
|
|
||||||
|
|
||||||
## Enforcement Guidelines
|
|
||||||
|
|
||||||
Community leaders will follow these Community Impact Guidelines in determining the consequences for
|
|
||||||
any action they deem in violation of this Code of Conduct:
|
|
||||||
|
|
||||||
### 1. Correction
|
|
||||||
|
|
||||||
**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or
|
|
||||||
unwelcome in the community.
|
|
||||||
|
|
||||||
**Consequence**: A private, written warning from community leaders, providing clarity around the
|
|
||||||
nature of the violation and an explanation of why the behavior was inappropriate. A public apology
|
|
||||||
may be requested.
|
|
||||||
|
|
||||||
### 2. Warning
|
|
||||||
|
|
||||||
**Community Impact**: A violation through a single incident or series of actions.
|
|
||||||
|
|
||||||
**Consequence**: A warning with consequences for continued behavior. No interaction with the people
|
|
||||||
involved, including unsolicited interaction with those enforcing the Code of Conduct, for a
|
|
||||||
specified period of time. This includes avoiding interactions in community spaces as well as
|
|
||||||
external channels like social media. Violating these terms may lead to a temporary or permanent ban.
|
|
||||||
|
|
||||||
### 3. Temporary Ban
|
|
||||||
|
|
||||||
**Community Impact**: A serious violation of community standards, including sustained inappropriate
|
|
||||||
behavior.
|
|
||||||
|
|
||||||
**Consequence**: A temporary ban from any sort of interaction or public communication with the
|
|
||||||
community for a specified period of time. No public or private interaction with the people involved,
|
|
||||||
including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this
|
|
||||||
period. Violating these terms may lead to a permanent ban.
|
|
||||||
|
|
||||||
### 4. Permanent Ban
|
|
||||||
|
|
||||||
**Community Impact**: Demonstrating a pattern of violation of community standards, including
|
|
||||||
sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement
|
|
||||||
of classes of individuals.
|
|
||||||
|
|
||||||
**Consequence**: A permanent ban from any sort of public interaction within the community.
|
|
||||||
|
|
||||||
## Attribution
|
|
||||||
|
|
||||||
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 2.0, available
|
|
||||||
[here](https://www.contributor-covenant.org/version/2/0/code_of_conduct.html).
|
|
||||||
|
|
||||||
Community Impact Guidelines were inspired by
|
|
||||||
[Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity).
|
|
||||||
|
|
||||||
For answers to common questions about this code of conduct, see the
|
|
||||||
[FAQ](https://www.contributor-covenant.org/faq). Translations are available
|
|
||||||
[here](https://www.contributor-covenant.org/translations).
|
|
||||||
|
|
||||||
[homepage]: https://www.contributor-covenant.org
|
|
||||||
|
|
@ -102,15 +102,6 @@ cargo run -- venv
|
||||||
cargo run -- pip install requests
|
cargo run -- pip install requests
|
||||||
```
|
```
|
||||||
|
|
||||||
## Crate structure
|
|
||||||
|
|
||||||
Rust does not allow circular dependencies between crates. To visualize the crate hierarchy, install
|
|
||||||
[cargo-depgraph](https://github.com/jplatte/cargo-depgraph) and graphviz, then run:
|
|
||||||
|
|
||||||
```shell
|
|
||||||
cargo depgraph --dedup-transitive-deps --workspace-only | dot -Tpng > graph.png
|
|
||||||
```
|
|
||||||
|
|
||||||
## Running inside a Docker container
|
## Running inside a Docker container
|
||||||
|
|
||||||
Source distributions can run arbitrary code on build and can make unwanted modifications to your
|
Source distributions can run arbitrary code on build and can make unwanted modifications to your
|
||||||
|
|
|
||||||
|
|
@ -1038,15 +1038,6 @@ dependencies = [
|
||||||
"itertools 0.10.5",
|
"itertools 0.10.5",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "crossbeam-channel"
|
|
||||||
version = "0.5.15"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "82b8f8f868b36967f9606790d1903570de9ceaf870a7bf9fbbd3016d636a2cb2"
|
|
||||||
dependencies = [
|
|
||||||
"crossbeam-utils",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-deque"
|
name = "crossbeam-deque"
|
||||||
version = "0.8.6"
|
version = "0.8.6"
|
||||||
|
|
@ -1264,16 +1255,6 @@ dependencies = [
|
||||||
"windows-sys 0.61.0",
|
"windows-sys 0.61.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "diskus"
|
|
||||||
version = "0.9.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "ec07379c016f78e7ddcd953663b9ed17928ff384928d34d824ed7e463bd3d908"
|
|
||||||
dependencies = [
|
|
||||||
"crossbeam-channel",
|
|
||||||
"rayon",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dispatch2"
|
name = "dispatch2"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
|
|
@ -3462,9 +3443,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rayon"
|
name = "rayon"
|
||||||
version = "1.11.0"
|
version = "1.10.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
|
checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"either",
|
"either",
|
||||||
"rayon-core",
|
"rayon-core",
|
||||||
|
|
@ -3472,9 +3453,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rayon-core"
|
name = "rayon-core"
|
||||||
version = "1.13.0"
|
version = "1.12.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
|
checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"crossbeam-deque",
|
"crossbeam-deque",
|
||||||
"crossbeam-utils",
|
"crossbeam-utils",
|
||||||
|
|
@ -4397,9 +4378,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "spdx"
|
name = "spdx"
|
||||||
version = "0.13.2"
|
version = "0.12.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "35107b1c818f4e9cb9e6c4444ca560ba03b4ee1288dcecc6d7830c2023a7609e"
|
checksum = "41cf87c0efffc158b9dde4d6e0567a43e4383adc4c949e687a2039732db2f23a"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"smallvec",
|
"smallvec",
|
||||||
]
|
]
|
||||||
|
|
@ -5406,7 +5387,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv"
|
name = "uv"
|
||||||
version = "0.9.18"
|
version = "0.9.17"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
|
|
@ -5421,7 +5402,6 @@ dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"console 0.16.1",
|
"console 0.16.1",
|
||||||
"ctrlc",
|
"ctrlc",
|
||||||
"diskus",
|
|
||||||
"dotenvy",
|
"dotenvy",
|
||||||
"dunce",
|
"dunce",
|
||||||
"embed-manifest",
|
"embed-manifest",
|
||||||
|
|
@ -5429,6 +5409,7 @@ dependencies = [
|
||||||
"flate2",
|
"flate2",
|
||||||
"fs-err",
|
"fs-err",
|
||||||
"futures",
|
"futures",
|
||||||
|
"h2",
|
||||||
"http",
|
"http",
|
||||||
"ignore",
|
"ignore",
|
||||||
"indexmap",
|
"indexmap",
|
||||||
|
|
@ -5525,7 +5506,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-auth"
|
name = "uv-auth"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"arcstr",
|
"arcstr",
|
||||||
|
|
@ -5568,7 +5549,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-bench"
|
name = "uv-bench"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"codspeed-criterion-compat",
|
"codspeed-criterion-compat",
|
||||||
|
|
@ -5595,7 +5576,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-bin-install"
|
name = "uv-bin-install"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"astral-reqwest-middleware",
|
"astral-reqwest-middleware",
|
||||||
"astral-reqwest-retry",
|
"astral-reqwest-retry",
|
||||||
|
|
@ -5612,6 +5593,7 @@ dependencies = [
|
||||||
"uv-client",
|
"uv-client",
|
||||||
"uv-distribution-filename",
|
"uv-distribution-filename",
|
||||||
"uv-extract",
|
"uv-extract",
|
||||||
|
"uv-fs",
|
||||||
"uv-pep440",
|
"uv-pep440",
|
||||||
"uv-platform",
|
"uv-platform",
|
||||||
"uv-redacted",
|
"uv-redacted",
|
||||||
|
|
@ -5619,7 +5601,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-build"
|
name = "uv-build"
|
||||||
version = "0.9.18"
|
version = "0.9.17"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
|
|
@ -5631,7 +5613,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-build-backend"
|
name = "uv-build-backend"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"astral-version-ranges",
|
"astral-version-ranges",
|
||||||
"base64 0.22.1",
|
"base64 0.22.1",
|
||||||
|
|
@ -5647,7 +5629,7 @@ dependencies = [
|
||||||
"schemars",
|
"schemars",
|
||||||
"serde",
|
"serde",
|
||||||
"sha2",
|
"sha2",
|
||||||
"spdx 0.13.2",
|
"spdx 0.12.0",
|
||||||
"tar",
|
"tar",
|
||||||
"tempfile",
|
"tempfile",
|
||||||
"thiserror 2.0.17",
|
"thiserror 2.0.17",
|
||||||
|
|
@ -5671,7 +5653,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-build-frontend"
|
name = "uv-build-frontend"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"fs-err",
|
"fs-err",
|
||||||
|
|
@ -5709,7 +5691,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-cache"
|
name = "uv-cache"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"fs-err",
|
"fs-err",
|
||||||
|
|
@ -5719,7 +5701,6 @@ dependencies = [
|
||||||
"same-file",
|
"same-file",
|
||||||
"serde",
|
"serde",
|
||||||
"tempfile",
|
"tempfile",
|
||||||
"thiserror 2.0.17",
|
|
||||||
"tracing",
|
"tracing",
|
||||||
"uv-cache-info",
|
"uv-cache-info",
|
||||||
"uv-cache-key",
|
"uv-cache-key",
|
||||||
|
|
@ -5735,7 +5716,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-cache-info"
|
name = "uv-cache-info"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"fs-err",
|
"fs-err",
|
||||||
|
|
@ -5752,7 +5733,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-cache-key"
|
name = "uv-cache-key"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"hex",
|
"hex",
|
||||||
"memchr",
|
"memchr",
|
||||||
|
|
@ -5764,7 +5745,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-cli"
|
name = "uv-cli"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
|
|
@ -5796,7 +5777,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-client"
|
name = "uv-client"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"astral-reqwest-middleware",
|
"astral-reqwest-middleware",
|
||||||
|
|
@ -5859,7 +5840,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-configuration"
|
name = "uv-configuration"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"clap",
|
"clap",
|
||||||
|
|
@ -5888,14 +5869,14 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-console"
|
name = "uv-console"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console 0.16.1",
|
"console 0.16.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-dev"
|
name = "uv-dev"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anyhow",
|
"anyhow",
|
||||||
|
|
@ -5944,7 +5925,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-dirs"
|
name = "uv-dirs"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"assert_fs",
|
"assert_fs",
|
||||||
"etcetera",
|
"etcetera",
|
||||||
|
|
@ -5956,7 +5937,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-dispatch"
|
name = "uv-dispatch"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"futures",
|
"futures",
|
||||||
|
|
@ -5988,7 +5969,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-distribution"
|
name = "uv-distribution"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"astral-reqwest-middleware",
|
"astral-reqwest-middleware",
|
||||||
|
|
@ -6037,7 +6018,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-distribution-filename"
|
name = "uv-distribution-filename"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"insta",
|
"insta",
|
||||||
"memchr",
|
"memchr",
|
||||||
|
|
@ -6054,7 +6035,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-distribution-types"
|
name = "uv-distribution-types"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arcstr",
|
"arcstr",
|
||||||
"astral-version-ranges",
|
"astral-version-ranges",
|
||||||
|
|
@ -6094,7 +6075,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-extract"
|
name = "uv-extract"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"astral-tokio-tar",
|
"astral-tokio-tar",
|
||||||
"astral_async_zip",
|
"astral_async_zip",
|
||||||
|
|
@ -6124,14 +6105,14 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-flags"
|
name = "uv-flags"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.9.4",
|
"bitflags 2.9.4",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-fs"
|
name = "uv-fs"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"backon",
|
"backon",
|
||||||
"dunce",
|
"dunce",
|
||||||
|
|
@ -6155,7 +6136,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-git"
|
name = "uv-git"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"astral-reqwest-middleware",
|
"astral-reqwest-middleware",
|
||||||
|
|
@ -6181,7 +6162,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-git-types"
|
name = "uv-git-types"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
"thiserror 2.0.17",
|
"thiserror 2.0.17",
|
||||||
|
|
@ -6193,7 +6174,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-globfilter"
|
name = "uv-globfilter"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"fs-err",
|
"fs-err",
|
||||||
|
|
@ -6210,7 +6191,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-install-wheel"
|
name = "uv-install-wheel"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"assert_fs",
|
"assert_fs",
|
||||||
|
|
@ -6250,7 +6231,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-installer"
|
name = "uv-installer"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"async-channel",
|
"async-channel",
|
||||||
|
|
@ -6291,7 +6272,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-keyring"
|
name = "uv-keyring"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"byteorder",
|
"byteorder",
|
||||||
|
|
@ -6308,7 +6289,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-logging"
|
name = "uv-logging"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"jiff",
|
"jiff",
|
||||||
"owo-colors",
|
"owo-colors",
|
||||||
|
|
@ -6318,7 +6299,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-macros"
|
name = "uv-macros"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"proc-macro2",
|
"proc-macro2",
|
||||||
"quote",
|
"quote",
|
||||||
|
|
@ -6328,7 +6309,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-metadata"
|
name = "uv-metadata"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"astral_async_zip",
|
"astral_async_zip",
|
||||||
"fs-err",
|
"fs-err",
|
||||||
|
|
@ -6345,7 +6326,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-normalize"
|
name = "uv-normalize"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"rkyv",
|
"rkyv",
|
||||||
"schemars",
|
"schemars",
|
||||||
|
|
@ -6355,7 +6336,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-once-map"
|
name = "uv-once-map"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"dashmap",
|
"dashmap",
|
||||||
"futures",
|
"futures",
|
||||||
|
|
@ -6364,14 +6345,14 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-options-metadata"
|
name = "uv-options-metadata"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-pep440"
|
name = "uv-pep440"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"astral-version-ranges",
|
"astral-version-ranges",
|
||||||
"indoc",
|
"indoc",
|
||||||
|
|
@ -6385,7 +6366,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-pep508"
|
name = "uv-pep508"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arcstr",
|
"arcstr",
|
||||||
"astral-version-ranges",
|
"astral-version-ranges",
|
||||||
|
|
@ -6414,7 +6395,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-performance-memory-allocator"
|
name = "uv-performance-memory-allocator"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"mimalloc",
|
"mimalloc",
|
||||||
"tikv-jemallocator",
|
"tikv-jemallocator",
|
||||||
|
|
@ -6422,7 +6403,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-platform"
|
name = "uv-platform"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fs-err",
|
"fs-err",
|
||||||
"goblin",
|
"goblin",
|
||||||
|
|
@ -6439,7 +6420,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-platform-tags"
|
name = "uv-platform-tags"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"insta",
|
"insta",
|
||||||
"memchr",
|
"memchr",
|
||||||
|
|
@ -6452,7 +6433,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-preview"
|
name = "uv-preview"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"bitflags 2.9.4",
|
"bitflags 2.9.4",
|
||||||
"thiserror 2.0.17",
|
"thiserror 2.0.17",
|
||||||
|
|
@ -6461,10 +6442,9 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-publish"
|
name = "uv-publish"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ambient-id",
|
"ambient-id",
|
||||||
"anstream",
|
|
||||||
"astral-reqwest-middleware",
|
"astral-reqwest-middleware",
|
||||||
"astral-reqwest-retry",
|
"astral-reqwest-retry",
|
||||||
"astral-tokio-tar",
|
"astral-tokio-tar",
|
||||||
|
|
@ -6498,12 +6478,11 @@ dependencies = [
|
||||||
"uv-redacted",
|
"uv-redacted",
|
||||||
"uv-static",
|
"uv-static",
|
||||||
"uv-warnings",
|
"uv-warnings",
|
||||||
"wiremock",
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-pypi-types"
|
name = "uv-pypi-types"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"hashbrown 0.16.1",
|
"hashbrown 0.16.1",
|
||||||
|
|
@ -6535,7 +6514,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-python"
|
name = "uv-python"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"assert_fs",
|
"assert_fs",
|
||||||
|
|
@ -6597,7 +6576,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-redacted"
|
name = "uv-redacted"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ref-cast",
|
"ref-cast",
|
||||||
"schemars",
|
"schemars",
|
||||||
|
|
@ -6608,7 +6587,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-requirements"
|
name = "uv-requirements"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"configparser",
|
"configparser",
|
||||||
|
|
@ -6643,7 +6622,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-requirements-txt"
|
name = "uv-requirements-txt"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"assert_fs",
|
"assert_fs",
|
||||||
|
|
@ -6676,7 +6655,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-resolver"
|
name = "uv-resolver"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arcstr",
|
"arcstr",
|
||||||
"astral-pubgrub",
|
"astral-pubgrub",
|
||||||
|
|
@ -6741,7 +6720,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-scripts"
|
name = "uv-scripts"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fs-err",
|
"fs-err",
|
||||||
"indoc",
|
"indoc",
|
||||||
|
|
@ -6765,7 +6744,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-settings"
|
name = "uv-settings"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"fs-err",
|
"fs-err",
|
||||||
|
|
@ -6800,7 +6779,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-shell"
|
name = "uv-shell"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"fs-err",
|
"fs-err",
|
||||||
|
|
@ -6817,7 +6796,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-small-str"
|
name = "uv-small-str"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"arcstr",
|
"arcstr",
|
||||||
"rkyv",
|
"rkyv",
|
||||||
|
|
@ -6827,7 +6806,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-state"
|
name = "uv-state"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fs-err",
|
"fs-err",
|
||||||
"tempfile",
|
"tempfile",
|
||||||
|
|
@ -6836,14 +6815,14 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-static"
|
name = "uv-static"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"uv-macros",
|
"uv-macros",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-tool"
|
name = "uv-tool"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fs-err",
|
"fs-err",
|
||||||
"pathdiff",
|
"pathdiff",
|
||||||
|
|
@ -6872,7 +6851,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-torch"
|
name = "uv-torch"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"clap",
|
"clap",
|
||||||
"either",
|
"either",
|
||||||
|
|
@ -6892,7 +6871,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-trampoline-builder"
|
name = "uv-trampoline-builder"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"assert_cmd",
|
"assert_cmd",
|
||||||
|
|
@ -6909,7 +6888,7 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-types"
|
name = "uv-types"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"dashmap",
|
"dashmap",
|
||||||
|
|
@ -6931,11 +6910,11 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-version"
|
name = "uv-version"
|
||||||
version = "0.9.18"
|
version = "0.9.17"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-virtualenv"
|
name = "uv-virtualenv"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"console 0.16.1",
|
"console 0.16.1",
|
||||||
"fs-err",
|
"fs-err",
|
||||||
|
|
@ -6957,19 +6936,16 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-warnings"
|
name = "uv-warnings"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anstream",
|
"anstream",
|
||||||
"anyhow",
|
|
||||||
"indoc",
|
|
||||||
"insta",
|
|
||||||
"owo-colors",
|
"owo-colors",
|
||||||
"rustc-hash",
|
"rustc-hash",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "uv-workspace"
|
name = "uv-workspace"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"anyhow",
|
"anyhow",
|
||||||
"assert_fs",
|
"assert_fs",
|
||||||
|
|
|
||||||
131
Cargo.toml
131
Cargo.toml
|
|
@ -16,64 +16,64 @@ authors = ["uv"]
|
||||||
license = "MIT OR Apache-2.0"
|
license = "MIT OR Apache-2.0"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
uv-auth = { version = "0.0.8", path = "crates/uv-auth" }
|
uv-auth = { version = "0.0.7", path = "crates/uv-auth" }
|
||||||
uv-bin-install = { version = "0.0.8", path = "crates/uv-bin-install" }
|
uv-bin-install = { version = "0.0.7", path = "crates/uv-bin-install" }
|
||||||
uv-build-backend = { version = "0.0.8", path = "crates/uv-build-backend" }
|
uv-build-backend = { version = "0.0.7", path = "crates/uv-build-backend" }
|
||||||
uv-build-frontend = { version = "0.0.8", path = "crates/uv-build-frontend" }
|
uv-build-frontend = { version = "0.0.7", path = "crates/uv-build-frontend" }
|
||||||
uv-cache = { version = "0.0.8", path = "crates/uv-cache" }
|
uv-cache = { version = "0.0.7", path = "crates/uv-cache" }
|
||||||
uv-cache-info = { version = "0.0.8", path = "crates/uv-cache-info" }
|
uv-cache-info = { version = "0.0.7", path = "crates/uv-cache-info" }
|
||||||
uv-cache-key = { version = "0.0.8", path = "crates/uv-cache-key" }
|
uv-cache-key = { version = "0.0.7", path = "crates/uv-cache-key" }
|
||||||
uv-cli = { version = "0.0.8", path = "crates/uv-cli" }
|
uv-cli = { version = "0.0.7", path = "crates/uv-cli" }
|
||||||
uv-client = { version = "0.0.8", path = "crates/uv-client" }
|
uv-client = { version = "0.0.7", path = "crates/uv-client" }
|
||||||
uv-configuration = { version = "0.0.8", path = "crates/uv-configuration" }
|
uv-configuration = { version = "0.0.7", path = "crates/uv-configuration" }
|
||||||
uv-console = { version = "0.0.8", path = "crates/uv-console" }
|
uv-console = { version = "0.0.7", path = "crates/uv-console" }
|
||||||
uv-dirs = { version = "0.0.8", path = "crates/uv-dirs" }
|
uv-dirs = { version = "0.0.7", path = "crates/uv-dirs" }
|
||||||
uv-dispatch = { version = "0.0.8", path = "crates/uv-dispatch" }
|
uv-dispatch = { version = "0.0.7", path = "crates/uv-dispatch" }
|
||||||
uv-distribution = { version = "0.0.8", path = "crates/uv-distribution" }
|
uv-distribution = { version = "0.0.7", path = "crates/uv-distribution" }
|
||||||
uv-distribution-filename = { version = "0.0.8", path = "crates/uv-distribution-filename" }
|
uv-distribution-filename = { version = "0.0.7", path = "crates/uv-distribution-filename" }
|
||||||
uv-distribution-types = { version = "0.0.8", path = "crates/uv-distribution-types" }
|
uv-distribution-types = { version = "0.0.7", path = "crates/uv-distribution-types" }
|
||||||
uv-extract = { version = "0.0.8", path = "crates/uv-extract" }
|
uv-extract = { version = "0.0.7", path = "crates/uv-extract" }
|
||||||
uv-flags = { version = "0.0.8", path = "crates/uv-flags" }
|
uv-flags = { version = "0.0.7", path = "crates/uv-flags" }
|
||||||
uv-fs = { version = "0.0.8", path = "crates/uv-fs", features = ["serde", "tokio"] }
|
uv-fs = { version = "0.0.7", path = "crates/uv-fs", features = ["serde", "tokio"] }
|
||||||
uv-git = { version = "0.0.8", path = "crates/uv-git" }
|
uv-git = { version = "0.0.7", path = "crates/uv-git" }
|
||||||
uv-git-types = { version = "0.0.8", path = "crates/uv-git-types" }
|
uv-git-types = { version = "0.0.7", path = "crates/uv-git-types" }
|
||||||
uv-globfilter = { version = "0.0.8", path = "crates/uv-globfilter" }
|
uv-globfilter = { version = "0.0.7", path = "crates/uv-globfilter" }
|
||||||
uv-install-wheel = { version = "0.0.8", path = "crates/uv-install-wheel", default-features = false }
|
uv-install-wheel = { version = "0.0.7", path = "crates/uv-install-wheel", default-features = false }
|
||||||
uv-installer = { version = "0.0.8", path = "crates/uv-installer" }
|
uv-installer = { version = "0.0.7", path = "crates/uv-installer" }
|
||||||
uv-keyring = { version = "0.0.8", path = "crates/uv-keyring" }
|
uv-keyring = { version = "0.0.7", path = "crates/uv-keyring" }
|
||||||
uv-logging = { version = "0.0.8", path = "crates/uv-logging" }
|
uv-logging = { version = "0.0.7", path = "crates/uv-logging" }
|
||||||
uv-macros = { version = "0.0.8", path = "crates/uv-macros" }
|
uv-macros = { version = "0.0.7", path = "crates/uv-macros" }
|
||||||
uv-metadata = { version = "0.0.8", path = "crates/uv-metadata" }
|
uv-metadata = { version = "0.0.7", path = "crates/uv-metadata" }
|
||||||
uv-normalize = { version = "0.0.8", path = "crates/uv-normalize" }
|
uv-normalize = { version = "0.0.7", path = "crates/uv-normalize" }
|
||||||
uv-once-map = { version = "0.0.8", path = "crates/uv-once-map" }
|
uv-once-map = { version = "0.0.7", path = "crates/uv-once-map" }
|
||||||
uv-options-metadata = { version = "0.0.8", path = "crates/uv-options-metadata" }
|
uv-options-metadata = { version = "0.0.7", path = "crates/uv-options-metadata" }
|
||||||
uv-performance-memory-allocator = { version = "0.0.8", path = "crates/uv-performance-memory-allocator" }
|
uv-performance-memory-allocator = { version = "0.0.7", path = "crates/uv-performance-memory-allocator" }
|
||||||
uv-pep440 = { version = "0.0.8", path = "crates/uv-pep440", features = ["tracing", "rkyv", "version-ranges"] }
|
uv-pep440 = { version = "0.0.7", path = "crates/uv-pep440", features = ["tracing", "rkyv", "version-ranges"] }
|
||||||
uv-pep508 = { version = "0.0.8", path = "crates/uv-pep508", features = ["non-pep508-extensions"] }
|
uv-pep508 = { version = "0.0.7", path = "crates/uv-pep508", features = ["non-pep508-extensions"] }
|
||||||
uv-platform = { version = "0.0.8", path = "crates/uv-platform" }
|
uv-platform = { version = "0.0.7", path = "crates/uv-platform" }
|
||||||
uv-platform-tags = { version = "0.0.8", path = "crates/uv-platform-tags" }
|
uv-platform-tags = { version = "0.0.7", path = "crates/uv-platform-tags" }
|
||||||
uv-preview = { version = "0.0.8", path = "crates/uv-preview" }
|
uv-preview = { version = "0.0.7", path = "crates/uv-preview" }
|
||||||
uv-publish = { version = "0.0.8", path = "crates/uv-publish" }
|
uv-publish = { version = "0.0.7", path = "crates/uv-publish" }
|
||||||
uv-pypi-types = { version = "0.0.8", path = "crates/uv-pypi-types" }
|
uv-pypi-types = { version = "0.0.7", path = "crates/uv-pypi-types" }
|
||||||
uv-python = { version = "0.0.8", path = "crates/uv-python" }
|
uv-python = { version = "0.0.7", path = "crates/uv-python" }
|
||||||
uv-redacted = { version = "0.0.8", path = "crates/uv-redacted" }
|
uv-redacted = { version = "0.0.7", path = "crates/uv-redacted" }
|
||||||
uv-requirements = { version = "0.0.8", path = "crates/uv-requirements" }
|
uv-requirements = { version = "0.0.7", path = "crates/uv-requirements" }
|
||||||
uv-requirements-txt = { version = "0.0.8", path = "crates/uv-requirements-txt" }
|
uv-requirements-txt = { version = "0.0.7", path = "crates/uv-requirements-txt" }
|
||||||
uv-resolver = { version = "0.0.8", path = "crates/uv-resolver" }
|
uv-resolver = { version = "0.0.7", path = "crates/uv-resolver" }
|
||||||
uv-scripts = { version = "0.0.8", path = "crates/uv-scripts" }
|
uv-scripts = { version = "0.0.7", path = "crates/uv-scripts" }
|
||||||
uv-settings = { version = "0.0.8", path = "crates/uv-settings" }
|
uv-settings = { version = "0.0.7", path = "crates/uv-settings" }
|
||||||
uv-shell = { version = "0.0.8", path = "crates/uv-shell" }
|
uv-shell = { version = "0.0.7", path = "crates/uv-shell" }
|
||||||
uv-small-str = { version = "0.0.8", path = "crates/uv-small-str" }
|
uv-small-str = { version = "0.0.7", path = "crates/uv-small-str" }
|
||||||
uv-state = { version = "0.0.8", path = "crates/uv-state" }
|
uv-state = { version = "0.0.7", path = "crates/uv-state" }
|
||||||
uv-static = { version = "0.0.8", path = "crates/uv-static" }
|
uv-static = { version = "0.0.7", path = "crates/uv-static" }
|
||||||
uv-tool = { version = "0.0.8", path = "crates/uv-tool" }
|
uv-tool = { version = "0.0.7", path = "crates/uv-tool" }
|
||||||
uv-torch = { version = "0.0.8", path = "crates/uv-torch" }
|
uv-torch = { version = "0.0.7", path = "crates/uv-torch" }
|
||||||
uv-trampoline-builder = { version = "0.0.8", path = "crates/uv-trampoline-builder" }
|
uv-trampoline-builder = { version = "0.0.7", path = "crates/uv-trampoline-builder" }
|
||||||
uv-types = { version = "0.0.8", path = "crates/uv-types" }
|
uv-types = { version = "0.0.7", path = "crates/uv-types" }
|
||||||
uv-version = { version = "0.9.18", path = "crates/uv-version" }
|
uv-version = { version = "0.9.17", path = "crates/uv-version" }
|
||||||
uv-virtualenv = { version = "0.0.8", path = "crates/uv-virtualenv" }
|
uv-virtualenv = { version = "0.0.7", path = "crates/uv-virtualenv" }
|
||||||
uv-warnings = { version = "0.0.8", path = "crates/uv-warnings" }
|
uv-warnings = { version = "0.0.7", path = "crates/uv-warnings" }
|
||||||
uv-workspace = { version = "0.0.8", path = "crates/uv-workspace" }
|
uv-workspace = { version = "0.0.7", path = "crates/uv-workspace" }
|
||||||
|
|
||||||
ambient-id = { version = "0.0.7", default-features = false, features = ["astral-reqwest-middleware"] }
|
ambient-id = { version = "0.0.7", default-features = false, features = ["astral-reqwest-middleware"] }
|
||||||
anstream = { version = "0.6.15" }
|
anstream = { version = "0.6.15" }
|
||||||
|
|
@ -103,7 +103,6 @@ ctrlc = { version = "3.4.5" }
|
||||||
cyclonedx-bom = { version = "0.8.0" }
|
cyclonedx-bom = { version = "0.8.0" }
|
||||||
dashmap = { version = "6.1.0" }
|
dashmap = { version = "6.1.0" }
|
||||||
data-encoding = { version = "2.6.0" }
|
data-encoding = { version = "2.6.0" }
|
||||||
diskus = { version = "0.9.0", default-features = false }
|
|
||||||
dotenvy = { version = "0.15.7" }
|
dotenvy = { version = "0.15.7" }
|
||||||
dunce = { version = "1.0.5" }
|
dunce = { version = "1.0.5" }
|
||||||
either = { version = "1.13.0" }
|
either = { version = "1.13.0" }
|
||||||
|
|
@ -170,7 +169,7 @@ serde-untagged = { version = "0.1.6" }
|
||||||
serde_json = { version = "1.0.128" }
|
serde_json = { version = "1.0.128" }
|
||||||
sha2 = { version = "0.10.8" }
|
sha2 = { version = "0.10.8" }
|
||||||
smallvec = { version = "1.13.2" }
|
smallvec = { version = "1.13.2" }
|
||||||
spdx = { version = "0.13.0" }
|
spdx = { version = "0.12.0" }
|
||||||
syn = { version = "2.0.77" }
|
syn = { version = "2.0.77" }
|
||||||
sys-info = { version = "0.9.1" }
|
sys-info = { version = "0.9.1" }
|
||||||
tar = { version = "0.4.43" }
|
tar = { version = "0.4.43" }
|
||||||
|
|
@ -225,6 +224,9 @@ test-log = { version = "0.2.16", features = ["trace"], default-features = false
|
||||||
tokio-rustls = { version = "0.26.2", default-features = false }
|
tokio-rustls = { version = "0.26.2", default-features = false }
|
||||||
whoami = { version = "1.6.0" }
|
whoami = { version = "1.6.0" }
|
||||||
|
|
||||||
|
[workspace.metadata.cargo-shear]
|
||||||
|
ignored = ["flate2", "xz2", "h2", "uv-performance-memory-allocator"]
|
||||||
|
|
||||||
[workspace.lints.rust]
|
[workspace.lints.rust]
|
||||||
unsafe_code = "warn"
|
unsafe_code = "warn"
|
||||||
unreachable_pub = "warn"
|
unreachable_pub = "warn"
|
||||||
|
|
@ -310,21 +312,12 @@ strip = false
|
||||||
debug = "full"
|
debug = "full"
|
||||||
lto = false
|
lto = false
|
||||||
|
|
||||||
# Profile for fast test execution: Skip debug info generation, and
|
|
||||||
# apply basic optimization, which speed up build and running tests.
|
|
||||||
[profile.fast-build]
|
[profile.fast-build]
|
||||||
inherits = "dev"
|
inherits = "dev"
|
||||||
opt-level = 1
|
opt-level = 1
|
||||||
debug = 0
|
debug = 0
|
||||||
strip = "debuginfo"
|
strip = "debuginfo"
|
||||||
|
|
||||||
# Profile for faster builds: Skip debug info generation, for faster
|
|
||||||
# builds of smaller binaries.
|
|
||||||
[profile.no-debug]
|
|
||||||
inherits = "dev"
|
|
||||||
debug = 0
|
|
||||||
strip = "debuginfo"
|
|
||||||
|
|
||||||
# Profile to build a minimally sized binary for uv-build
|
# Profile to build a minimally sized binary for uv-build
|
||||||
[profile.minimal-size]
|
[profile.minimal-size]
|
||||||
inherits = "release"
|
inherits = "release"
|
||||||
|
|
|
||||||
33
README.md
33
README.md
|
|
@ -42,7 +42,7 @@ An extremely fast Python package and project manager, written in Rust.
|
||||||
- 🖥️ Supports macOS, Linux, and Windows.
|
- 🖥️ Supports macOS, Linux, and Windows.
|
||||||
|
|
||||||
uv is backed by [Astral](https://astral.sh), the creators of
|
uv is backed by [Astral](https://astral.sh), the creators of
|
||||||
[Ruff](https://github.com/astral-sh/ruff) and [ty](https://github.com/astral-sh/ty).
|
[Ruff](https://github.com/astral-sh/ruff).
|
||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
|
|
@ -192,12 +192,14 @@ uv installs Python and allows quickly switching between versions.
|
||||||
Install multiple Python versions:
|
Install multiple Python versions:
|
||||||
|
|
||||||
```console
|
```console
|
||||||
$ uv python install 3.12 3.13 3.14
|
$ uv python install 3.10 3.11 3.12
|
||||||
Installed 3 versions in 972ms
|
Searching for Python versions matching: Python 3.10
|
||||||
+ cpython-3.12.12-macos-aarch64-none (python3.12)
|
Searching for Python versions matching: Python 3.11
|
||||||
+ cpython-3.13.9-macos-aarch64-none (python3.13)
|
Searching for Python versions matching: Python 3.12
|
||||||
+ cpython-3.14.0-macos-aarch64-none (python3.14)
|
Installed 3 versions in 3.42s
|
||||||
|
+ cpython-3.10.14-macos-aarch64-none
|
||||||
|
+ cpython-3.11.9-macos-aarch64-none
|
||||||
|
+ cpython-3.12.4-macos-aarch64-none
|
||||||
```
|
```
|
||||||
|
|
||||||
Download Python versions as needed:
|
Download Python versions as needed:
|
||||||
|
|
@ -268,6 +270,14 @@ Installed 43 packages in 208ms
|
||||||
|
|
||||||
See the [pip interface documentation](https://docs.astral.sh/uv/pip/index/) to get started.
|
See the [pip interface documentation](https://docs.astral.sh/uv/pip/index/) to get started.
|
||||||
|
|
||||||
|
## Platform support
|
||||||
|
|
||||||
|
See uv's [platform support](https://docs.astral.sh/uv/reference/platforms/) document.
|
||||||
|
|
||||||
|
## Versioning policy
|
||||||
|
|
||||||
|
See uv's [versioning policy](https://docs.astral.sh/uv/reference/versioning/) document.
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
|
|
||||||
We are passionate about supporting contributors of all levels of experience and would love to see
|
We are passionate about supporting contributors of all levels of experience and would love to see
|
||||||
|
|
@ -284,15 +294,6 @@ It's pronounced as "you - vee" ([`/juː viː/`](https://en.wikipedia.org/wiki/He
|
||||||
|
|
||||||
Just "uv", please. See the [style guide](./STYLE.md#styling-uv) for details.
|
Just "uv", please. See the [style guide](./STYLE.md#styling-uv) for details.
|
||||||
|
|
||||||
#### What platforms does uv support?
|
|
||||||
|
|
||||||
See uv's [platform support](https://docs.astral.sh/uv/reference/platforms/) document.
|
|
||||||
|
|
||||||
#### Is uv ready for production?
|
|
||||||
|
|
||||||
Yes, uv is stable and widely used in production. See uv's
|
|
||||||
[versioning policy](https://docs.astral.sh/uv/reference/versioning/) document for details.
|
|
||||||
|
|
||||||
## Acknowledgements
|
## Acknowledgements
|
||||||
|
|
||||||
uv's dependency resolver uses [PubGrub](https://github.com/pubgrub-rs/pubgrub) under the hood. We're
|
uv's dependency resolver uses [PubGrub](https://github.com/pubgrub-rs/pubgrub) under the hood. We're
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-auth"
|
name = "uv-auth"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-auth).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-auth).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -129,15 +129,6 @@ enum TokenState {
|
||||||
Initialized(Option<AccessToken>),
|
Initialized(Option<AccessToken>),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
|
||||||
enum S3CredentialState {
|
|
||||||
/// The S3 credential state has not yet been initialized.
|
|
||||||
Uninitialized,
|
|
||||||
/// The S3 credential state has been initialized, with either a signer or `None` if
|
|
||||||
/// no S3 endpoint is configured.
|
|
||||||
Initialized(Option<Arc<Authentication>>),
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A middleware that adds basic authentication to requests.
|
/// A middleware that adds basic authentication to requests.
|
||||||
///
|
///
|
||||||
/// Uses a cache to propagate credentials from previously seen requests and
|
/// Uses a cache to propagate credentials from previously seen requests and
|
||||||
|
|
@ -159,8 +150,6 @@ pub struct AuthMiddleware {
|
||||||
pyx_token_store: Option<PyxTokenStore>,
|
pyx_token_store: Option<PyxTokenStore>,
|
||||||
/// Tokens to use for persistent credentials.
|
/// Tokens to use for persistent credentials.
|
||||||
pyx_token_state: Mutex<TokenState>,
|
pyx_token_state: Mutex<TokenState>,
|
||||||
/// Cached S3 credentials to avoid running the credential helper multiple times.
|
|
||||||
s3_credential_state: Mutex<S3CredentialState>,
|
|
||||||
preview: Preview,
|
preview: Preview,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -183,7 +172,6 @@ impl AuthMiddleware {
|
||||||
base_client: None,
|
base_client: None,
|
||||||
pyx_token_store: None,
|
pyx_token_store: None,
|
||||||
pyx_token_state: Mutex::new(TokenState::Uninitialized),
|
pyx_token_state: Mutex::new(TokenState::Uninitialized),
|
||||||
s3_credential_state: Mutex::new(S3CredentialState::Uninitialized),
|
|
||||||
preview: Preview::default(),
|
preview: Preview::default(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -690,26 +678,13 @@ impl AuthMiddleware {
|
||||||
return Some(credentials);
|
return Some(credentials);
|
||||||
}
|
}
|
||||||
|
|
||||||
if S3EndpointProvider::is_s3_endpoint(url, self.preview) {
|
if let Some(credentials) = S3EndpointProvider::credentials_for(url, self.preview)
|
||||||
let mut s3_state = self.s3_credential_state.lock().await;
|
.map(Authentication::from)
|
||||||
|
.map(Arc::new)
|
||||||
// If the S3 credential state is uninitialized, initialize it.
|
{
|
||||||
let credentials = match &*s3_state {
|
debug!("Found S3 credentials for {url}");
|
||||||
S3CredentialState::Uninitialized => {
|
self.cache().fetches.done(key, Some(credentials.clone()));
|
||||||
trace!("Initializing S3 credentials for {url}");
|
return Some(credentials);
|
||||||
let signer = S3EndpointProvider::create_signer();
|
|
||||||
let credentials = Arc::new(Authentication::from(signer));
|
|
||||||
*s3_state = S3CredentialState::Initialized(Some(credentials.clone()));
|
|
||||||
Some(credentials)
|
|
||||||
}
|
|
||||||
S3CredentialState::Initialized(credentials) => credentials.clone(),
|
|
||||||
};
|
|
||||||
|
|
||||||
if let Some(credentials) = credentials {
|
|
||||||
debug!("Found S3 credentials for {url}");
|
|
||||||
self.cache().fetches.done(key, Some(credentials.clone()));
|
|
||||||
return Some(credentials);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If this is a known URL, authenticate it via the token store.
|
// If this is a known URL, authenticate it via the token store.
|
||||||
|
|
|
||||||
|
|
@ -66,8 +66,8 @@ static S3_ENDPOINT_REALM: LazyLock<Option<Realm>> = LazyLock::new(|| {
|
||||||
pub(crate) struct S3EndpointProvider;
|
pub(crate) struct S3EndpointProvider;
|
||||||
|
|
||||||
impl S3EndpointProvider {
|
impl S3EndpointProvider {
|
||||||
/// Returns `true` if the URL matches the configured S3 endpoint.
|
/// Returns the credentials for the S3 endpoint, if available.
|
||||||
pub(crate) fn is_s3_endpoint(url: &Url, preview: Preview) -> bool {
|
pub(crate) fn credentials_for(url: &Url, preview: Preview) -> Option<DefaultSigner> {
|
||||||
if let Some(s3_endpoint_realm) = S3_ENDPOINT_REALM.as_ref().map(RealmRef::from) {
|
if let Some(s3_endpoint_realm) = S3_ENDPOINT_REALM.as_ref().map(RealmRef::from) {
|
||||||
if !preview.is_enabled(PreviewFeatures::S3_ENDPOINT) {
|
if !preview.is_enabled(PreviewFeatures::S3_ENDPOINT) {
|
||||||
warn_user_once!(
|
warn_user_once!(
|
||||||
|
|
@ -79,26 +79,19 @@ impl S3EndpointProvider {
|
||||||
// Treat any URL on the same domain or subdomain as available for S3 signing.
|
// Treat any URL on the same domain or subdomain as available for S3 signing.
|
||||||
let realm = RealmRef::from(url);
|
let realm = RealmRef::from(url);
|
||||||
if realm == s3_endpoint_realm || realm.is_subdomain_of(s3_endpoint_realm) {
|
if realm == s3_endpoint_realm || realm.is_subdomain_of(s3_endpoint_realm) {
|
||||||
return true;
|
// TODO(charlie): Can `reqsign` infer the region for us? Profiles, for example,
|
||||||
|
// often have a region set already.
|
||||||
|
let region = std::env::var(EnvVars::AWS_REGION)
|
||||||
|
.map(Cow::Owned)
|
||||||
|
.unwrap_or_else(|_| {
|
||||||
|
std::env::var(EnvVars::AWS_DEFAULT_REGION)
|
||||||
|
.map(Cow::Owned)
|
||||||
|
.unwrap_or_else(|_| Cow::Borrowed("us-east-1"))
|
||||||
|
});
|
||||||
|
let signer = reqsign::aws::default_signer("s3", ®ion);
|
||||||
|
return Some(signer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
false
|
None
|
||||||
}
|
|
||||||
|
|
||||||
/// Creates a new S3 signer with the configured region.
|
|
||||||
///
|
|
||||||
/// This is potentially expensive as it may invoke credential helpers, so the result
|
|
||||||
/// should be cached.
|
|
||||||
pub(crate) fn create_signer() -> DefaultSigner {
|
|
||||||
// TODO(charlie): Can `reqsign` infer the region for us? Profiles, for example,
|
|
||||||
// often have a region set already.
|
|
||||||
let region = std::env::var(EnvVars::AWS_REGION)
|
|
||||||
.map(Cow::Owned)
|
|
||||||
.unwrap_or_else(|_| {
|
|
||||||
std::env::var(EnvVars::AWS_DEFAULT_REGION)
|
|
||||||
.map(Cow::Owned)
|
|
||||||
.unwrap_or_else(|_| Cow::Borrowed("us-east-1"))
|
|
||||||
});
|
|
||||||
reqsign::aws::default_signer("s3", ®ion)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-bench"
|
name = "uv-bench"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
publish = false
|
publish = false
|
||||||
authors = { workspace = true }
|
authors = { workspace = true }
|
||||||
|
|
@ -22,14 +22,14 @@ name = "uv"
|
||||||
path = "benches/uv.rs"
|
path = "benches/uv.rs"
|
||||||
harness = false
|
harness = false
|
||||||
|
|
||||||
[dev-dependencies]
|
[dependencies]
|
||||||
uv-cache = { workspace = true }
|
uv-cache = { workspace = true }
|
||||||
uv-client = { workspace = true }
|
uv-client = { workspace = true }
|
||||||
uv-configuration = { workspace = true }
|
uv-configuration = { workspace = true }
|
||||||
uv-dispatch = { workspace = true }
|
uv-dispatch = { workspace = true }
|
||||||
uv-distribution = { workspace = true }
|
uv-distribution = { workspace = true }
|
||||||
uv-distribution-types = { workspace = true }
|
uv-distribution-types = { workspace = true }
|
||||||
uv-extract = { workspace = true }
|
uv-extract = { workspace = true, optional = true }
|
||||||
uv-install-wheel = { workspace = true }
|
uv-install-wheel = { workspace = true }
|
||||||
uv-pep440 = { workspace = true }
|
uv-pep440 = { workspace = true }
|
||||||
uv-pep508 = { workspace = true }
|
uv-pep508 = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-bench).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-bench).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-bin-install"
|
name = "uv-bin-install"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
@ -20,6 +20,7 @@ uv-cache = { workspace = true }
|
||||||
uv-client = { workspace = true }
|
uv-client = { workspace = true }
|
||||||
uv-distribution-filename = { workspace = true }
|
uv-distribution-filename = { workspace = true }
|
||||||
uv-extract = { workspace = true }
|
uv-extract = { workspace = true }
|
||||||
|
uv-fs = { workspace = true }
|
||||||
uv-pep440 = { workspace = true }
|
uv-pep440 = { workspace = true }
|
||||||
uv-platform = { workspace = true }
|
uv-platform = { workspace = true }
|
||||||
uv-redacted = { workspace = true }
|
uv-redacted = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-bin-install).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-bin-install).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,10 @@ use tracing::debug;
|
||||||
use url::Url;
|
use url::Url;
|
||||||
use uv_distribution_filename::SourceDistExtension;
|
use uv_distribution_filename::SourceDistExtension;
|
||||||
|
|
||||||
use uv_cache::{Cache, CacheBucket, CacheEntry, Error as CacheError};
|
use uv_cache::{Cache, CacheBucket, CacheEntry};
|
||||||
use uv_client::{BaseClient, is_transient_network_error};
|
use uv_client::{BaseClient, is_transient_network_error};
|
||||||
use uv_extract::{Error as ExtractError, stream};
|
use uv_extract::{Error as ExtractError, stream};
|
||||||
|
use uv_fs::LockedFileError;
|
||||||
use uv_pep440::Version;
|
use uv_pep440::Version;
|
||||||
use uv_platform::Platform;
|
use uv_platform::Platform;
|
||||||
use uv_redacted::DisplaySafeUrl;
|
use uv_redacted::DisplaySafeUrl;
|
||||||
|
|
@ -136,7 +137,7 @@ pub enum Error {
|
||||||
Io(#[from] std::io::Error),
|
Io(#[from] std::io::Error),
|
||||||
|
|
||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
Cache(#[from] CacheError),
|
LockedFile(#[from] LockedFileError),
|
||||||
|
|
||||||
#[error("Failed to detect platform")]
|
#[error("Failed to detect platform")]
|
||||||
Platform(#[from] uv_platform::Error),
|
Platform(#[from] uv_platform::Error),
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-build-backend"
|
name = "uv-build-backend"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-build-backend).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-build-backend).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -662,7 +662,7 @@ mod tests {
|
||||||
// Check that the source dist is reproducible across platforms.
|
// Check that the source dist is reproducible across platforms.
|
||||||
assert_snapshot!(
|
assert_snapshot!(
|
||||||
format!("{:x}", sha2::Sha256::digest(fs_err::read(&source_dist_path).unwrap())),
|
format!("{:x}", sha2::Sha256::digest(fs_err::read(&source_dist_path).unwrap())),
|
||||||
@"bb74bff575b135bb39e5c9bce56349441fb0923bb8857e32a5eaf34ec1843967"
|
@"871d1f859140721b67cbeaca074e7a2740c88c38028d0509eba87d1285f1da9e"
|
||||||
);
|
);
|
||||||
// Check both the files we report and the actual files
|
// Check both the files we report and the actual files
|
||||||
assert_snapshot!(format_file_list(build.source_dist_list_files, src.path()), @r"
|
assert_snapshot!(format_file_list(build.source_dist_list_files, src.path()), @r"
|
||||||
|
|
|
||||||
|
|
@ -299,10 +299,6 @@ impl TarGzWriter {
|
||||||
impl DirectoryWriter for TarGzWriter {
|
impl DirectoryWriter for TarGzWriter {
|
||||||
fn write_bytes(&mut self, path: &str, bytes: &[u8]) -> Result<(), Error> {
|
fn write_bytes(&mut self, path: &str, bytes: &[u8]) -> Result<(), Error> {
|
||||||
let mut header = Header::new_gnu();
|
let mut header = Header::new_gnu();
|
||||||
// Work around bug in Python's std tar module
|
|
||||||
// https://github.com/python/cpython/issues/141707
|
|
||||||
// https://github.com/astral-sh/uv/pull/17043#issuecomment-3636841022
|
|
||||||
header.set_entry_type(EntryType::Regular);
|
|
||||||
header.set_size(bytes.len() as u64);
|
header.set_size(bytes.len() as u64);
|
||||||
// Reasonable default to avoid 0o000 permissions, the user's umask will be applied on
|
// Reasonable default to avoid 0o000 permissions, the user's umask will be applied on
|
||||||
// unpacking.
|
// unpacking.
|
||||||
|
|
@ -316,10 +312,6 @@ impl DirectoryWriter for TarGzWriter {
|
||||||
fn write_file(&mut self, path: &str, file: &Path) -> Result<(), Error> {
|
fn write_file(&mut self, path: &str, file: &Path) -> Result<(), Error> {
|
||||||
let metadata = fs_err::metadata(file)?;
|
let metadata = fs_err::metadata(file)?;
|
||||||
let mut header = Header::new_gnu();
|
let mut header = Header::new_gnu();
|
||||||
// Work around bug in Python's std tar module
|
|
||||||
// https://github.com/python/cpython/issues/141707
|
|
||||||
// https://github.com/astral-sh/uv/pull/17043#issuecomment-3636841022
|
|
||||||
header.set_entry_type(EntryType::Regular);
|
|
||||||
// Preserve the executable bit, especially for scripts
|
// Preserve the executable bit, especially for scripts
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
let executable_bit = {
|
let executable_bit = {
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-build-frontend"
|
name = "uv-build-frontend"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-build-frontend).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-build-frontend).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-build"
|
name = "uv-build"
|
||||||
version = "0.9.18"
|
version = "0.9.17"
|
||||||
description = "A Python build backend"
|
description = "A Python build backend"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[project]
|
[project]
|
||||||
name = "uv-build"
|
name = "uv-build"
|
||||||
version = "0.9.18"
|
version = "0.9.17"
|
||||||
description = "The uv build backend"
|
description = "The uv build backend"
|
||||||
authors = [{ name = "Astral Software Inc.", email = "hey@astral.sh" }]
|
authors = [{ name = "Astral Software Inc.", email = "hey@astral.sh" }]
|
||||||
requires-python = ">=3.8"
|
requires-python = ">=3.8"
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-cache-info"
|
name = "uv-cache-info"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-cache-info).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-cache-info).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-cache-key"
|
name = "uv-cache-key"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-cache-key).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-cache-key).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-cache"
|
name = "uv-cache"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
@ -34,6 +34,5 @@ rustc-hash = { workspace = true }
|
||||||
same-file = { workspace = true }
|
same-file = { workspace = true }
|
||||||
serde = { workspace = true, features = ["derive"] }
|
serde = { workspace = true, features = ["derive"] }
|
||||||
tempfile = { workspace = true }
|
tempfile = { workspace = true }
|
||||||
thiserror = { workspace = true }
|
|
||||||
tracing = { workspace = true }
|
tracing = { workspace = true }
|
||||||
walkdir = { workspace = true }
|
walkdir = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-cache).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-cache).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ use std::path::{Path, PathBuf};
|
||||||
use uv_static::EnvVars;
|
use uv_static::EnvVars;
|
||||||
|
|
||||||
use crate::Cache;
|
use crate::Cache;
|
||||||
use clap::{Parser, ValueHint};
|
use clap::Parser;
|
||||||
use tracing::{debug, warn};
|
use tracing::{debug, warn};
|
||||||
|
|
||||||
#[derive(Parser, Debug, Clone)]
|
#[derive(Parser, Debug, Clone)]
|
||||||
|
|
@ -27,7 +27,7 @@ pub struct CacheArgs {
|
||||||
/// `%LOCALAPPDATA%\uv\cache` on Windows.
|
/// `%LOCALAPPDATA%\uv\cache` on Windows.
|
||||||
///
|
///
|
||||||
/// To view the location of the cache directory, run `uv cache dir`.
|
/// To view the location of the cache directory, run `uv cache dir`.
|
||||||
#[arg(global = true, long, env = EnvVars::UV_CACHE_DIR, value_hint = ValueHint::DirPath)]
|
#[arg(global = true, long, env = EnvVars::UV_CACHE_DIR)]
|
||||||
pub cache_dir: Option<PathBuf>,
|
pub cache_dir: Option<PathBuf>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,17 +35,6 @@ mod wheel;
|
||||||
/// Must be kept in-sync with the version in [`CacheBucket::to_str`].
|
/// Must be kept in-sync with the version in [`CacheBucket::to_str`].
|
||||||
pub const ARCHIVE_VERSION: u8 = 0;
|
pub const ARCHIVE_VERSION: u8 = 0;
|
||||||
|
|
||||||
/// Error locking a cache entry or shard
|
|
||||||
#[derive(Debug, thiserror::Error)]
|
|
||||||
pub enum Error {
|
|
||||||
#[error(transparent)]
|
|
||||||
Io(#[from] io::Error),
|
|
||||||
#[error("Could not make the path absolute")]
|
|
||||||
Absolute(#[source] io::Error),
|
|
||||||
#[error("Could not acquire lock")]
|
|
||||||
Acquire(#[from] LockedFileError),
|
|
||||||
}
|
|
||||||
|
|
||||||
/// A [`CacheEntry`] which may or may not exist yet.
|
/// A [`CacheEntry`] which may or may not exist yet.
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub struct CacheEntry(PathBuf);
|
pub struct CacheEntry(PathBuf);
|
||||||
|
|
@ -91,14 +80,14 @@ impl CacheEntry {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Acquire the [`CacheEntry`] as an exclusive lock.
|
/// Acquire the [`CacheEntry`] as an exclusive lock.
|
||||||
pub async fn lock(&self) -> Result<LockedFile, Error> {
|
pub async fn lock(&self) -> Result<LockedFile, LockedFileError> {
|
||||||
fs_err::create_dir_all(self.dir())?;
|
fs_err::create_dir_all(self.dir())?;
|
||||||
Ok(LockedFile::acquire(
|
LockedFile::acquire(
|
||||||
self.path(),
|
self.path(),
|
||||||
LockedFileMode::Exclusive,
|
LockedFileMode::Exclusive,
|
||||||
self.path().display(),
|
self.path().display(),
|
||||||
)
|
)
|
||||||
.await?)
|
.await
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -125,14 +114,14 @@ impl CacheShard {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Acquire the cache entry as an exclusive lock.
|
/// Acquire the cache entry as an exclusive lock.
|
||||||
pub async fn lock(&self) -> Result<LockedFile, Error> {
|
pub async fn lock(&self) -> Result<LockedFile, LockedFileError> {
|
||||||
fs_err::create_dir_all(self.as_ref())?;
|
fs_err::create_dir_all(self.as_ref())?;
|
||||||
Ok(LockedFile::acquire(
|
LockedFile::acquire(
|
||||||
self.join(".lock"),
|
self.join(".lock"),
|
||||||
LockedFileMode::Exclusive,
|
LockedFileMode::Exclusive,
|
||||||
self.display(),
|
self.display(),
|
||||||
)
|
)
|
||||||
.await?)
|
.await
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Return the [`CacheShard`] as a [`PathBuf`].
|
/// Return the [`CacheShard`] as a [`PathBuf`].
|
||||||
|
|
@ -402,7 +391,7 @@ impl Cache {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Populate the cache scaffold.
|
/// Populate the cache scaffold.
|
||||||
fn create_base_files(root: &PathBuf) -> io::Result<()> {
|
fn create_base_files(root: &PathBuf) -> Result<(), io::Error> {
|
||||||
// Create the cache directory, if it doesn't exist.
|
// Create the cache directory, if it doesn't exist.
|
||||||
fs_err::create_dir_all(root)?;
|
fs_err::create_dir_all(root)?;
|
||||||
|
|
||||||
|
|
@ -452,7 +441,7 @@ impl Cache {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initialize the [`Cache`].
|
/// Initialize the [`Cache`].
|
||||||
pub async fn init(self) -> Result<Self, Error> {
|
pub async fn init(self) -> Result<Self, LockedFileError> {
|
||||||
let root = &self.root;
|
let root = &self.root;
|
||||||
|
|
||||||
Self::create_base_files(root)?;
|
Self::create_base_files(root)?;
|
||||||
|
|
@ -477,18 +466,18 @@ impl Cache {
|
||||||
);
|
);
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
Err(err) => return Err(err.into()),
|
Err(err) => return Err(err),
|
||||||
};
|
};
|
||||||
|
|
||||||
Ok(Self {
|
Ok(Self {
|
||||||
root: std::path::absolute(root).map_err(Error::Absolute)?,
|
root: std::path::absolute(root)?,
|
||||||
lock_file,
|
lock_file,
|
||||||
..self
|
..self
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Initialize the [`Cache`], assuming that there are no other uv processes running.
|
/// Initialize the [`Cache`], assuming that there are no other uv processes running.
|
||||||
pub fn init_no_wait(self) -> Result<Option<Self>, Error> {
|
pub fn init_no_wait(self) -> Result<Option<Self>, io::Error> {
|
||||||
let root = &self.root;
|
let root = &self.root;
|
||||||
|
|
||||||
Self::create_base_files(root)?;
|
Self::create_base_files(root)?;
|
||||||
|
|
@ -502,7 +491,7 @@ impl Cache {
|
||||||
return Ok(None);
|
return Ok(None);
|
||||||
};
|
};
|
||||||
Ok(Some(Self {
|
Ok(Some(Self {
|
||||||
root: std::path::absolute(root).map_err(Error::Absolute)?,
|
root: std::path::absolute(root)?,
|
||||||
lock_file: Some(Arc::new(lock_file)),
|
lock_file: Some(Arc::new(lock_file)),
|
||||||
..self
|
..self
|
||||||
}))
|
}))
|
||||||
|
|
@ -542,7 +531,7 @@ impl Cache {
|
||||||
/// Remove a package from the cache.
|
/// Remove a package from the cache.
|
||||||
///
|
///
|
||||||
/// Returns the number of entries removed from the cache.
|
/// Returns the number of entries removed from the cache.
|
||||||
pub fn remove(&self, name: &PackageName) -> io::Result<Removal> {
|
pub fn remove(&self, name: &PackageName) -> Result<Removal, io::Error> {
|
||||||
// Collect the set of referenced archives.
|
// Collect the set of referenced archives.
|
||||||
let references = self.find_archive_references()?;
|
let references = self.find_archive_references()?;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-cli"
|
name = "uv-cli"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-cli).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-cli).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -366,7 +366,6 @@ pub fn resolver_options(
|
||||||
exclude_newer_package.unwrap_or_default(),
|
exclude_newer_package.unwrap_or_default(),
|
||||||
),
|
),
|
||||||
link_mode,
|
link_mode,
|
||||||
torch_backend: None,
|
|
||||||
no_build: flag(no_build, build, "build"),
|
no_build: flag(no_build, build, "build"),
|
||||||
no_build_package: Some(no_build_package),
|
no_build_package: Some(no_build_package),
|
||||||
no_binary: flag(no_binary, binary, "binary"),
|
no_binary: flag(no_binary, binary, "binary"),
|
||||||
|
|
@ -496,6 +495,5 @@ pub fn resolver_installer_options(
|
||||||
Some(no_binary_package)
|
Some(no_binary_package)
|
||||||
},
|
},
|
||||||
no_sources: if no_sources { Some(true) } else { None },
|
no_sources: if no_sources { Some(true) } else { None },
|
||||||
torch_backend: None,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-client"
|
name = "uv-client"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-client).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-client).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -50,7 +50,7 @@ pub const DEFAULT_RETRIES: u32 = 3;
|
||||||
/// Maximum number of redirects to follow before giving up.
|
/// Maximum number of redirects to follow before giving up.
|
||||||
///
|
///
|
||||||
/// This is the default used by [`reqwest`].
|
/// This is the default used by [`reqwest`].
|
||||||
pub const DEFAULT_MAX_REDIRECTS: u32 = 10;
|
const DEFAULT_MAX_REDIRECTS: u32 = 10;
|
||||||
|
|
||||||
/// Selectively skip parts or the entire auth middleware.
|
/// Selectively skip parts or the entire auth middleware.
|
||||||
#[derive(Debug, Clone, Copy, Default)]
|
#[derive(Debug, Clone, Copy, Default)]
|
||||||
|
|
@ -104,8 +104,6 @@ pub enum RedirectPolicy {
|
||||||
BypassMiddleware,
|
BypassMiddleware,
|
||||||
/// Handle redirects manually, re-triggering our custom middleware for each request.
|
/// Handle redirects manually, re-triggering our custom middleware for each request.
|
||||||
RetriggerMiddleware,
|
RetriggerMiddleware,
|
||||||
/// No redirect for non-cloneable (e.g., streaming) requests with custom redirect logic.
|
|
||||||
NoRedirect,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RedirectPolicy {
|
impl RedirectPolicy {
|
||||||
|
|
@ -113,7 +111,6 @@ impl RedirectPolicy {
|
||||||
match self {
|
match self {
|
||||||
Self::BypassMiddleware => reqwest::redirect::Policy::default(),
|
Self::BypassMiddleware => reqwest::redirect::Policy::default(),
|
||||||
Self::RetriggerMiddleware => reqwest::redirect::Policy::none(),
|
Self::RetriggerMiddleware => reqwest::redirect::Policy::none(),
|
||||||
Self::NoRedirect => reqwest::redirect::Policy::none(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -732,7 +729,6 @@ impl RedirectClientWithMiddleware {
|
||||||
match self.redirect_policy {
|
match self.redirect_policy {
|
||||||
RedirectPolicy::BypassMiddleware => self.client.execute(req).await,
|
RedirectPolicy::BypassMiddleware => self.client.execute(req).await,
|
||||||
RedirectPolicy::RetriggerMiddleware => self.execute_with_redirect_handling(req).await,
|
RedirectPolicy::RetriggerMiddleware => self.execute_with_redirect_handling(req).await,
|
||||||
RedirectPolicy::NoRedirect => self.client.execute(req).await,
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@ use std::fmt::{Display, Formatter};
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
use std::path::PathBuf;
|
use std::path::PathBuf;
|
||||||
|
|
||||||
use uv_cache::Error as CacheError;
|
|
||||||
use uv_distribution_filename::{WheelFilename, WheelFilenameError};
|
use uv_distribution_filename::{WheelFilename, WheelFilenameError};
|
||||||
|
use uv_fs::LockedFileError;
|
||||||
use uv_normalize::PackageName;
|
use uv_normalize::PackageName;
|
||||||
use uv_redacted::DisplaySafeUrl;
|
use uv_redacted::DisplaySafeUrl;
|
||||||
|
|
||||||
|
|
@ -339,7 +339,7 @@ pub enum ErrorKind {
|
||||||
CacheWrite(#[source] std::io::Error),
|
CacheWrite(#[source] std::io::Error),
|
||||||
|
|
||||||
#[error("Failed to acquire lock on the client cache")]
|
#[error("Failed to acquire lock on the client cache")]
|
||||||
CacheLock(#[source] CacheError),
|
CacheLock(#[source] LockedFileError),
|
||||||
|
|
||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
Io(std::io::Error),
|
Io(std::io::Error),
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
pub use base_client::{
|
pub use base_client::{
|
||||||
AuthIntegration, BaseClient, BaseClientBuilder, DEFAULT_MAX_REDIRECTS, DEFAULT_RETRIES,
|
AuthIntegration, BaseClient, BaseClientBuilder, DEFAULT_RETRIES, ExtraMiddleware,
|
||||||
ExtraMiddleware, RedirectClientWithMiddleware, RedirectPolicy, RequestBuilder,
|
RedirectClientWithMiddleware, RequestBuilder, RetryParsingError, UvRetryableStrategy,
|
||||||
RetryParsingError, UvRetryableStrategy, is_transient_network_error,
|
is_transient_network_error,
|
||||||
};
|
};
|
||||||
pub use cached_client::{CacheControl, CachedClient, CachedClientError, DataWithCachePolicy};
|
pub use cached_client::{CacheControl, CachedClient, CachedClientError, DataWithCachePolicy};
|
||||||
pub use error::{Error, ErrorKind, WrappedReqwestError};
|
pub use error::{Error, ErrorKind, WrappedReqwestError};
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-configuration"
|
name = "uv-configuration"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-configuration).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-configuration).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -94,32 +94,3 @@ wheels/
|
||||||
# Virtual environments
|
# Virtual environments
|
||||||
.venv
|
.venv
|
||||||
";
|
";
|
||||||
|
|
||||||
/// Setting for Git LFS (Large File Storage) support.
|
|
||||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
|
|
||||||
pub enum GitLfsSetting {
|
|
||||||
/// Git LFS is disabled (default).
|
|
||||||
#[default]
|
|
||||||
Disabled,
|
|
||||||
/// Git LFS is enabled. Tracks whether it came from an environment variable.
|
|
||||||
Enabled { from_env: bool },
|
|
||||||
}
|
|
||||||
|
|
||||||
impl GitLfsSetting {
|
|
||||||
pub fn new(from_arg: Option<bool>, from_env: Option<bool>) -> Self {
|
|
||||||
match (from_arg, from_env) {
|
|
||||||
(Some(true), _) => Self::Enabled { from_env: false },
|
|
||||||
(_, Some(true)) => Self::Enabled { from_env: true },
|
|
||||||
_ => Self::Disabled,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl From<GitLfsSetting> for Option<bool> {
|
|
||||||
fn from(setting: GitLfsSetting) -> Self {
|
|
||||||
match setting {
|
|
||||||
GitLfsSetting::Enabled { .. } => Some(true),
|
|
||||||
GitLfsSetting::Disabled => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-console"
|
name = "uv-console"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-console).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-console).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-dev"
|
name = "uv-dev"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
publish = false
|
publish = false
|
||||||
|
|
||||||
|
|
@ -79,4 +79,4 @@ performance-memory-allocator = ["dep:uv-performance-memory-allocator"]
|
||||||
render = ["poloto", "resvg", "tagu"]
|
render = ["poloto", "resvg", "tagu"]
|
||||||
|
|
||||||
[package.metadata.cargo-shear]
|
[package.metadata.cargo-shear]
|
||||||
ignored = ["uv-performance-memory-allocator"]
|
ignored = ["flate2", "uv-extract", "uv-performance-memory-allocator"]
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-dev).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-dev).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-dirs"
|
name = "uv-dirs"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-dirs).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-dirs).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-dispatch"
|
name = "uv-dispatch"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-dispatch).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-dispatch).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-distribution-filename"
|
name = "uv-distribution-filename"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-distribution-filename).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-distribution-filename).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-distribution-types"
|
name = "uv-distribution-types"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-distribution-types).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-distribution-types).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -159,9 +159,9 @@ pub enum InstalledVersion<'a> {
|
||||||
Url(&'a DisplaySafeUrl, &'a Version),
|
Url(&'a DisplaySafeUrl, &'a Version),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<'a> InstalledVersion<'a> {
|
impl InstalledVersion<'_> {
|
||||||
/// If it is a URL, return its value.
|
/// If it is a URL, return its value.
|
||||||
pub fn url(&self) -> Option<&'a DisplaySafeUrl> {
|
pub fn url(&self) -> Option<&DisplaySafeUrl> {
|
||||||
match self {
|
match self {
|
||||||
Self::Version(_) => None,
|
Self::Version(_) => None,
|
||||||
Self::Url(url, _) => Some(url),
|
Self::Url(url, _) => Some(url),
|
||||||
|
|
@ -169,7 +169,7 @@ impl<'a> InstalledVersion<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// If it is a version, return its value.
|
/// If it is a version, return its value.
|
||||||
pub fn version(&self) -> &'a Version {
|
pub fn version(&self) -> &Version {
|
||||||
match self {
|
match self {
|
||||||
Self::Version(version) => version,
|
Self::Version(version) => version,
|
||||||
Self::Url(_, version) => version,
|
Self::Url(_, version) => version,
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-distribution"
|
name = "uv-distribution"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-distribution).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-distribution).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -5,11 +5,10 @@ use tokio::task::JoinError;
|
||||||
use zip::result::ZipError;
|
use zip::result::ZipError;
|
||||||
|
|
||||||
use crate::metadata::MetadataError;
|
use crate::metadata::MetadataError;
|
||||||
use uv_cache::Error as CacheError;
|
|
||||||
use uv_client::WrappedReqwestError;
|
use uv_client::WrappedReqwestError;
|
||||||
use uv_distribution_filename::{WheelFilename, WheelFilenameError};
|
use uv_distribution_filename::{WheelFilename, WheelFilenameError};
|
||||||
use uv_distribution_types::{InstalledDist, InstalledDistError, IsBuildBackendError};
|
use uv_distribution_types::{InstalledDist, InstalledDistError, IsBuildBackendError};
|
||||||
use uv_fs::Simplified;
|
use uv_fs::{LockedFileError, Simplified};
|
||||||
use uv_git::GitError;
|
use uv_git::GitError;
|
||||||
use uv_normalize::PackageName;
|
use uv_normalize::PackageName;
|
||||||
use uv_pep440::{Version, VersionSpecifiers};
|
use uv_pep440::{Version, VersionSpecifiers};
|
||||||
|
|
@ -43,7 +42,7 @@ pub enum Error {
|
||||||
#[error("Failed to write to the distribution cache")]
|
#[error("Failed to write to the distribution cache")]
|
||||||
CacheWrite(#[source] std::io::Error),
|
CacheWrite(#[source] std::io::Error),
|
||||||
#[error("Failed to acquire lock on the distribution cache")]
|
#[error("Failed to acquire lock on the distribution cache")]
|
||||||
CacheLock(#[source] CacheError),
|
CacheLock(#[source] LockedFileError),
|
||||||
#[error("Failed to deserialize cache entry")]
|
#[error("Failed to deserialize cache entry")]
|
||||||
CacheDecode(#[from] rmp_serde::decode::Error),
|
CacheDecode(#[from] rmp_serde::decode::Error),
|
||||||
#[error("Failed to serialize cache entry")]
|
#[error("Failed to serialize cache entry")]
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-extract"
|
name = "uv-extract"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-extract).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-extract).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-flags"
|
name = "uv-flags"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-flags).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-flags).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-fs"
|
name = "uv-fs"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-fs).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-fs).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,3 @@
|
||||||
use std::convert::Into;
|
|
||||||
use std::fmt::Display;
|
use std::fmt::Display;
|
||||||
use std::path::{Path, PathBuf};
|
use std::path::{Path, PathBuf};
|
||||||
use std::sync::LazyLock;
|
use std::sync::LazyLock;
|
||||||
|
|
@ -60,18 +59,10 @@ pub enum LockedFileError {
|
||||||
source: io::Error,
|
source: io::Error,
|
||||||
},
|
},
|
||||||
#[error(transparent)]
|
#[error(transparent)]
|
||||||
|
Io(#[from] io::Error),
|
||||||
|
#[error(transparent)]
|
||||||
#[cfg(feature = "tokio")]
|
#[cfg(feature = "tokio")]
|
||||||
JoinError(#[from] tokio::task::JoinError),
|
JoinError(#[from] tokio::task::JoinError),
|
||||||
#[error("Could not create temporary file")]
|
|
||||||
CreateTemporary(#[source] io::Error),
|
|
||||||
#[error("Could not persist temporary file `{}`", path.user_display())]
|
|
||||||
PersistTemporary {
|
|
||||||
path: PathBuf,
|
|
||||||
#[source]
|
|
||||||
source: io::Error,
|
|
||||||
},
|
|
||||||
#[error(transparent)]
|
|
||||||
Io(#[from] io::Error),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
impl LockedFileError {
|
impl LockedFileError {
|
||||||
|
|
@ -81,8 +72,6 @@ impl LockedFileError {
|
||||||
#[cfg(feature = "tokio")]
|
#[cfg(feature = "tokio")]
|
||||||
Self::JoinError(_) => None,
|
Self::JoinError(_) => None,
|
||||||
Self::Lock { source, .. } => Some(source),
|
Self::Lock { source, .. } => Some(source),
|
||||||
Self::CreateTemporary(err) => Some(err),
|
|
||||||
Self::PersistTemporary { source, .. } => Some(source),
|
|
||||||
Self::Io(err) => Some(err),
|
Self::Io(err) => Some(err),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -212,7 +201,7 @@ impl LockedFile {
|
||||||
mode: LockedFileMode,
|
mode: LockedFileMode,
|
||||||
resource: impl Display,
|
resource: impl Display,
|
||||||
) -> Result<Self, LockedFileError> {
|
) -> Result<Self, LockedFileError> {
|
||||||
let file = Self::create(&path)?;
|
let file = Self::create(path)?;
|
||||||
let resource = resource.to_string();
|
let resource = resource.to_string();
|
||||||
Self::lock_file(file, mode, &resource).await
|
Self::lock_file(file, mode, &resource).await
|
||||||
}
|
}
|
||||||
|
|
@ -233,25 +222,10 @@ impl LockedFile {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(unix)]
|
#[cfg(unix)]
|
||||||
fn create(path: impl AsRef<Path>) -> Result<fs_err::File, LockedFileError> {
|
fn create(path: impl AsRef<Path>) -> Result<fs_err::File, std::io::Error> {
|
||||||
use rustix::io::Errno;
|
use std::os::unix::fs::PermissionsExt;
|
||||||
#[allow(clippy::disallowed_types)]
|
|
||||||
use std::{fs::File, os::unix::fs::PermissionsExt};
|
|
||||||
use tempfile::NamedTempFile;
|
use tempfile::NamedTempFile;
|
||||||
|
|
||||||
/// The permissions the lockfile should end up with
|
|
||||||
const DESIRED_MODE: u32 = 0o666;
|
|
||||||
|
|
||||||
#[allow(clippy::disallowed_types)]
|
|
||||||
fn try_set_permissions(file: &File, path: &Path) {
|
|
||||||
if let Err(err) = file.set_permissions(std::fs::Permissions::from_mode(DESIRED_MODE)) {
|
|
||||||
warn!(
|
|
||||||
"Failed to set permissions on temporary file `{path}`: {err}",
|
|
||||||
path = path.user_display()
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// If path already exists, return it.
|
// If path already exists, return it.
|
||||||
if let Ok(file) = fs_err::OpenOptions::new()
|
if let Ok(file) = fs_err::OpenOptions::new()
|
||||||
.read(true)
|
.read(true)
|
||||||
|
|
@ -264,12 +238,16 @@ impl LockedFile {
|
||||||
// Otherwise, create a temporary file with 666 permissions. We must set
|
// Otherwise, create a temporary file with 666 permissions. We must set
|
||||||
// permissions _after_ creating the file, to override the `umask`.
|
// permissions _after_ creating the file, to override the `umask`.
|
||||||
let file = if let Some(parent) = path.as_ref().parent() {
|
let file = if let Some(parent) = path.as_ref().parent() {
|
||||||
NamedTempFile::new_in(parent)
|
NamedTempFile::new_in(parent)?
|
||||||
} else {
|
} else {
|
||||||
NamedTempFile::new()
|
NamedTempFile::new()?
|
||||||
|
};
|
||||||
|
if let Err(err) = file
|
||||||
|
.as_file()
|
||||||
|
.set_permissions(std::fs::Permissions::from_mode(0o666))
|
||||||
|
{
|
||||||
|
warn!("Failed to set permissions on temporary file: {err}");
|
||||||
}
|
}
|
||||||
.map_err(LockedFileError::CreateTemporary)?;
|
|
||||||
try_set_permissions(file.as_file(), file.path());
|
|
||||||
|
|
||||||
// Try to move the file to path, but if path exists now, just open path
|
// Try to move the file to path, but if path exists now, just open path
|
||||||
match file.persist_noclobber(path.as_ref()) {
|
match file.persist_noclobber(path.as_ref()) {
|
||||||
|
|
@ -280,60 +258,20 @@ impl LockedFile {
|
||||||
.read(true)
|
.read(true)
|
||||||
.write(true)
|
.write(true)
|
||||||
.open(path.as_ref())
|
.open(path.as_ref())
|
||||||
.map_err(Into::into)
|
|
||||||
} else if matches!(
|
|
||||||
Errno::from_io_error(&err.error),
|
|
||||||
Some(Errno::NOTSUP | Errno::INVAL)
|
|
||||||
) {
|
|
||||||
// Fallback in case `persist_noclobber`, which uses `renameat2` or
|
|
||||||
// `renameatx_np` under the hood, is not supported by the FS. Linux reports this
|
|
||||||
// with `EINVAL` and MacOS with `ENOTSUP`. For these reasons and many others,
|
|
||||||
// there isn't an ErrorKind we can use here, and in fact on MacOS `ENOTSUP` gets
|
|
||||||
// mapped to `ErrorKind::Other`
|
|
||||||
|
|
||||||
// There is a race here where another process has just created the file, and we
|
|
||||||
// try to open it and get permission errors because the other process hasn't set
|
|
||||||
// the permission bits yet. This will lead to a transient failure, but unlike
|
|
||||||
// alternative approaches it won't ever lead to a situation where two processes
|
|
||||||
// are locking two different files. Also, since `persist_noclobber` is more
|
|
||||||
// likely to not be supported on special filesystems which don't have permission
|
|
||||||
// bits, it's less likely to ever matter.
|
|
||||||
let file = fs_err::OpenOptions::new()
|
|
||||||
.read(true)
|
|
||||||
.write(true)
|
|
||||||
.create(true)
|
|
||||||
.open(path.as_ref())?;
|
|
||||||
|
|
||||||
// We don't want to `try_set_permissions` in cases where another user's process
|
|
||||||
// has already created the lockfile and changed its permissions because we might
|
|
||||||
// not have permission to change the permissions which would produce a confusing
|
|
||||||
// warning.
|
|
||||||
if file
|
|
||||||
.metadata()
|
|
||||||
.is_ok_and(|metadata| metadata.permissions().mode() != DESIRED_MODE)
|
|
||||||
{
|
|
||||||
try_set_permissions(file.file(), path.as_ref());
|
|
||||||
}
|
|
||||||
Ok(file)
|
|
||||||
} else {
|
} else {
|
||||||
let temp_path = err.file.into_temp_path();
|
Err(err.error)
|
||||||
Err(LockedFileError::PersistTemporary {
|
|
||||||
path: <tempfile::TempPath as AsRef<Path>>::as_ref(&temp_path).to_path_buf(),
|
|
||||||
source: err.error,
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(not(unix))]
|
#[cfg(not(unix))]
|
||||||
fn create(path: impl AsRef<Path>) -> Result<fs_err::File, LockedFileError> {
|
fn create(path: impl AsRef<Path>) -> std::io::Result<fs_err::File> {
|
||||||
fs_err::OpenOptions::new()
|
fs_err::OpenOptions::new()
|
||||||
.read(true)
|
.read(true)
|
||||||
.write(true)
|
.write(true)
|
||||||
.create(true)
|
.create(true)
|
||||||
.open(path.as_ref())
|
.open(path.as_ref())
|
||||||
.map_err(Into::into)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-git-types"
|
name = "uv-git-types"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-git-types).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-git-types).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-git"
|
name = "uv-git"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-git).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-git).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-globfilter"
|
name = "uv-globfilter"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-install-wheel"
|
name = "uv-install-wheel"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
keywords = ["wheel", "python"]
|
keywords = ["wheel", "python"]
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-install-wheel).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-install-wheel).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-installer"
|
name = "uv-installer"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-installer).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-installer).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-keyring"
|
name = "uv-keyring"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-logging"
|
name = "uv-logging"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-logging).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-logging).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-macros"
|
name = "uv-macros"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-macros).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-macros).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-metadata"
|
name = "uv-metadata"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-metadata).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-metadata).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-normalize"
|
name = "uv-normalize"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-normalize).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-normalize).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-once-map"
|
name = "uv-once-map"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-once-map).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-once-map).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-options-metadata"
|
name = "uv-options-metadata"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-options-metadata).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-options-metadata).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-pep440"
|
name = "uv-pep440"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
license = "Apache-2.0 OR BSD-2-Clause"
|
license = "Apache-2.0 OR BSD-2-Clause"
|
||||||
include = ["/src", "Changelog.md", "License-Apache", "License-BSD", "Readme.md", "pyproject.toml"]
|
include = ["/src", "Changelog.md", "License-Apache", "License-BSD", "Readme.md", "pyproject.toml"]
|
||||||
|
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
<!-- This file is generated. DO NOT EDIT -->
|
|
||||||
|
|
||||||
# uv-pep440
|
|
||||||
|
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
|
||||||
is unstable and will have frequent breaking changes.
|
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-pep440).
|
|
||||||
|
|
||||||
See uv's
|
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
|
||||||
for details on versioning.
|
|
||||||
|
|
@ -0,0 +1,44 @@
|
||||||
|
# PEP440 in rust
|
||||||
|
|
||||||
|
[](https://crates.io/crates/pep440_rs)
|
||||||
|
[](https://pypi.org/project/pep440_rs)
|
||||||
|
|
||||||
|
A library for python version numbers and specifiers, implementing
|
||||||
|
[PEP 440](https://peps.python.org/pep-0440). See
|
||||||
|
[Reimplementing PEP 440](https://cohost.org/konstin/post/514863-reimplementing-pep-4) for some
|
||||||
|
background.
|
||||||
|
|
||||||
|
Higher level bindings to the requirements syntax are available in
|
||||||
|
[pep508_rs](https://github.com/konstin/pep508_rs).
|
||||||
|
|
||||||
|
```rust
|
||||||
|
use std::str::FromStr;
|
||||||
|
use pep440_rs::{parse_version_specifiers, Version, VersionSpecifier};
|
||||||
|
|
||||||
|
let version = Version::from_str("1.19").unwrap();
|
||||||
|
let version_specifier = VersionSpecifier::from_str("==1.*").unwrap();
|
||||||
|
assert!(version_specifier.contains(&version));
|
||||||
|
let version_specifiers = parse_version_specifiers(">=1.16, <2.0").unwrap();
|
||||||
|
assert!(version_specifiers.contains(&version));
|
||||||
|
```
|
||||||
|
|
||||||
|
PEP 440 has a lot of unintuitive features, including:
|
||||||
|
|
||||||
|
- An epoch that you can prefix the version with, e.g., `1!1.2.3`. Lower epoch always means lower
|
||||||
|
version (`1.0 <=2!0.1`)
|
||||||
|
- Post versions, which can be attached to both stable releases and pre-releases
|
||||||
|
- Dev versions, which can be attached to both stable releases and pre-releases. When attached to a
|
||||||
|
pre-release the dev version is ordered just below the normal pre-release, however when attached to
|
||||||
|
a stable version, the dev version is sorted before a pre-releases
|
||||||
|
- Pre-release handling is a mess: "Pre-releases of any kind, including developmental releases, are
|
||||||
|
implicitly excluded from all version specifiers, unless they are already present on the system,
|
||||||
|
explicitly requested by the user, or if the only available version that satisfies the version
|
||||||
|
specifier is a pre-release.". This means that we can't say whether a specifier matches without
|
||||||
|
also looking at the environment
|
||||||
|
- Pre-release vs. pre-release incl. dev is fuzzy
|
||||||
|
- Local versions on top of all the others, which are added with a + and have implicitly typed string
|
||||||
|
and number segments
|
||||||
|
- No semver-caret (`^`), but a pseudo-semver tilde (`~=`)
|
||||||
|
- Ordering contradicts matching: We have, e.g., `1.0+local > 1.0` when sorting, but `==1.0` matches
|
||||||
|
`1.0+local`. While the ordering of versions itself is a total order the version matching needs to
|
||||||
|
catch all sorts of special cases
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-pep508"
|
name = "uv-pep508"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
include = ["/src", "Changelog.md", "License-Apache", "License-BSD", "Readme.md", "pyproject.toml"]
|
include = ["/src", "Changelog.md", "License-Apache", "License-BSD", "Readme.md", "pyproject.toml"]
|
||||||
license = "Apache-2.0 OR BSD-2-Clause"
|
license = "Apache-2.0 OR BSD-2-Clause"
|
||||||
|
|
|
||||||
|
|
@ -1,13 +0,0 @@
|
||||||
<!-- This file is generated. DO NOT EDIT -->
|
|
||||||
|
|
||||||
# uv-pep508
|
|
||||||
|
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
|
||||||
is unstable and will have frequent breaking changes.
|
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-pep508).
|
|
||||||
|
|
||||||
See uv's
|
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
|
||||||
for details on versioning.
|
|
||||||
|
|
@ -0,0 +1,31 @@
|
||||||
|
# Dependency specifiers (PEP 508) in Rust
|
||||||
|
|
||||||
|
[](https://crates.io/crates/pep508_rs)
|
||||||
|
[](https://pypi.org/project/pep508_rs)
|
||||||
|
|
||||||
|
A library for
|
||||||
|
[dependency specifiers](https://packaging.python.org/en/latest/specifications/dependency-specifiers/),
|
||||||
|
previously known as [PEP 508](https://peps.python.org/pep-0508/).
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
```rust
|
||||||
|
use std::str::FromStr;
|
||||||
|
use pep508_rs::Requirement;
|
||||||
|
|
||||||
|
let marker = r#"requests [security,tests] >= 2.8.1, == 2.8.* ; python_version > "3.8""#;
|
||||||
|
let dependency_specification = Requirement::from_str(marker).unwrap();
|
||||||
|
assert_eq!(dependency_specification.name, "requests");
|
||||||
|
assert_eq!(dependency_specification.extras, Some(vec!["security".to_string(), "tests".to_string()]));
|
||||||
|
```
|
||||||
|
|
||||||
|
## Markers
|
||||||
|
|
||||||
|
Markers allow you to install dependencies only in specific environments (python version, operating
|
||||||
|
system, architecture, etc.) or when a specific feature is activated. E.g., you can say
|
||||||
|
`importlib-metadata ; python_version < "3.8"` or `itsdangerous (>=1.1.0) ; extra == 'security'`.
|
||||||
|
Unfortunately, the marker grammar has some oversights (e.g.
|
||||||
|
<https://github.com/pypa/packaging.python.org/pull/1181>) and the design of comparisons (PEP 440
|
||||||
|
comparisons with lexicographic fallback) leads to confusing outcomes. This implementation tries to
|
||||||
|
carefully validate everything and emit warnings whenever bogus comparisons with unintended semantics
|
||||||
|
are made.
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-performance-memory-allocator"
|
name = "uv-performance-memory-allocator"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,9 +5,9 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found
|
can be found
|
||||||
[here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-performance-memory-allocator).
|
[here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-performance-memory-allocator).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
[package]
|
[package]
|
||||||
name = "uv-platform-tags"
|
name = "uv-platform-tags"
|
||||||
version = "0.0.8"
|
version = "0.0.7"
|
||||||
description = "This is an internal component crate of uv"
|
description = "This is an internal component crate of uv"
|
||||||
edition = { workspace = true }
|
edition = { workspace = true }
|
||||||
rust-version = { workspace = true }
|
rust-version = { workspace = true }
|
||||||
|
|
|
||||||
|
|
@ -5,8 +5,8 @@
|
||||||
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
This crate is an internal component of [uv](https://crates.io/crates/uv). The Rust API exposed here
|
||||||
is unstable and will have frequent breaking changes.
|
is unstable and will have frequent breaking changes.
|
||||||
|
|
||||||
This version (0.0.8) is a component of [uv 0.9.18](https://crates.io/crates/uv/0.9.18). The source
|
This version (0.0.7) is a component of [uv 0.9.17](https://crates.io/crates/uv/0.9.17). The source
|
||||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.18/crates/uv-platform-tags).
|
can be found [here](https://github.com/astral-sh/uv/blob/0.9.17/crates/uv-platform-tags).
|
||||||
|
|
||||||
See uv's
|
See uv's
|
||||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue