mirror of https://github.com/astral-sh/uv
Compare commits
No commits in common. "main" and "0.9.16" have entirely different histories.
|
|
@ -1,81 +0,0 @@
|
|||
# /// script
|
||||
# requires-python = ">=3.12"
|
||||
# dependencies = []
|
||||
# ///
|
||||
|
||||
"""Post-edit hook to auto-format files after Claude edits."""
|
||||
|
||||
import json
|
||||
import subprocess
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
|
||||
def format_rust(file_path: str, cwd: str) -> None:
|
||||
"""Format Rust files with cargo fmt."""
|
||||
try:
|
||||
subprocess.run(
|
||||
["cargo", "fmt", "--", file_path],
|
||||
cwd=cwd,
|
||||
capture_output=True,
|
||||
)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
|
||||
def format_python(file_path: str, cwd: str) -> None:
|
||||
"""Format Python files with ruff."""
|
||||
try:
|
||||
subprocess.run(
|
||||
["uvx", "ruff", "format", file_path],
|
||||
cwd=cwd,
|
||||
capture_output=True,
|
||||
)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
|
||||
def format_prettier(file_path: str, cwd: str, prose_wrap: bool = False) -> None:
|
||||
"""Format files with prettier."""
|
||||
args = ["npx", "prettier", "--write"]
|
||||
if prose_wrap:
|
||||
args.extend(["--prose-wrap", "always"])
|
||||
args.append(file_path)
|
||||
try:
|
||||
subprocess.run(args, cwd=cwd, capture_output=True)
|
||||
except FileNotFoundError:
|
||||
pass
|
||||
|
||||
|
||||
def main() -> None:
|
||||
import os
|
||||
|
||||
input_data = json.load(sys.stdin)
|
||||
|
||||
tool_name = input_data.get("tool_name")
|
||||
tool_input = input_data.get("tool_input", {})
|
||||
file_path = tool_input.get("file_path")
|
||||
|
||||
# Only process Write, Edit, and MultiEdit tools
|
||||
if tool_name not in ("Write", "Edit", "MultiEdit"):
|
||||
return
|
||||
|
||||
if not file_path:
|
||||
return
|
||||
|
||||
cwd = os.environ.get("CLAUDE_PROJECT_DIR", os.getcwd())
|
||||
path = Path(file_path)
|
||||
ext = path.suffix
|
||||
|
||||
if ext == ".rs":
|
||||
format_rust(file_path, cwd)
|
||||
elif ext in (".py", ".pyi"):
|
||||
format_python(file_path, cwd)
|
||||
elif ext in (".json5", ".yaml", ".yml"):
|
||||
format_prettier(file_path, cwd)
|
||||
elif ext == ".md":
|
||||
format_prettier(file_path, cwd, prose_wrap=True)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
|
@ -1,15 +0,0 @@
|
|||
{
|
||||
"hooks": {
|
||||
"PostToolUse": [
|
||||
{
|
||||
"matcher": "Edit|Write|MultiEdit",
|
||||
"hooks": [
|
||||
{
|
||||
"type": "command",
|
||||
"command": "uv run .claude/hooks/post-edit-format.py"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
@ -98,7 +98,7 @@ jobs:
|
|||
|
||||
macos-x86_64:
|
||||
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-build') }}
|
||||
runs-on: depot-macos-14
|
||||
runs-on: macos-14
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
|
|
@ -157,7 +157,7 @@ jobs:
|
|||
|
||||
macos-aarch64:
|
||||
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-build') }}
|
||||
runs-on: depot-macos-14
|
||||
runs-on: macos-14
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
|
|
@ -417,7 +417,7 @@ jobs:
|
|||
|
||||
linux-arm:
|
||||
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-build') }}
|
||||
runs-on: depot-ubuntu-22.04-8
|
||||
runs-on: ubuntu-latest
|
||||
timeout-minutes: 30
|
||||
strategy:
|
||||
matrix:
|
||||
|
|
@ -956,7 +956,7 @@ jobs:
|
|||
|
||||
musllinux-cross:
|
||||
if: ${{ !contains(github.event.pull_request.labels.*.name, 'no-build') }}
|
||||
runs-on: depot-ubuntu-22.04-8
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
platform:
|
||||
|
|
|
|||
|
|
@ -184,13 +184,13 @@ jobs:
|
|||
- buildpack-deps:trixie,trixie,debian
|
||||
- debian:bookworm-slim,bookworm-slim
|
||||
- buildpack-deps:bookworm,bookworm
|
||||
- python:3.14-alpine3.23,python3.14-alpine3.23,python3.14-alpine
|
||||
- python:3.13-alpine3.23,python3.13-alpine3.23,python3.13-alpine
|
||||
- python:3.12-alpine3.23,python3.12-alpine3.23,python3.12-alpine
|
||||
- python:3.11-alpine3.23,python3.11-alpine3.23,python3.11-alpine
|
||||
- python:3.10-alpine3.23,python3.10-alpine3.23,python3.10-alpine
|
||||
- python:3.9-alpine3.22,python3.9-alpine3.22,python3.9-alpine
|
||||
- python:3.8-alpine3.20,python3.8-alpine3.20,python3.8-alpine
|
||||
- python:3.14-alpine,python3.14-alpine
|
||||
- python:3.13-alpine,python3.13-alpine
|
||||
- python:3.12-alpine,python3.12-alpine
|
||||
- python:3.11-alpine,python3.11-alpine
|
||||
- python:3.10-alpine,python3.10-alpine
|
||||
- python:3.9-alpine,python3.9-alpine
|
||||
- python:3.8-alpine,python3.8-alpine
|
||||
- python:3.14-trixie,python3.14-trixie
|
||||
- python:3.13-trixie,python3.13-trixie
|
||||
- python:3.12-trixie,python3.12-trixie
|
||||
|
|
|
|||
|
|
@ -27,8 +27,6 @@ jobs:
|
|||
outputs:
|
||||
# Flag that is raised when any code is changed
|
||||
code: ${{ steps.changed.outputs.code_any_changed }}
|
||||
# Flag that is raised when uv.schema.json is changed (e.g., in a release PR)
|
||||
schema: ${{ steps.changed.outputs.schema_changed }}
|
||||
steps:
|
||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||
with:
|
||||
|
|
@ -42,16 +40,10 @@ jobs:
|
|||
CHANGED_FILES=$(git diff --name-only ${{ github.event.pull_request.base.sha || 'origin/main' }}...HEAD)
|
||||
|
||||
CODE_CHANGED=false
|
||||
SCHEMA_CHANGED=false
|
||||
|
||||
while IFS= read -r file; do
|
||||
# Check if the schema file changed (e.g., in a release PR)
|
||||
if [[ "${file}" == "uv.schema.json" ]]; then
|
||||
echo "Detected schema change: ${file}"
|
||||
SCHEMA_CHANGED=true
|
||||
fi
|
||||
|
||||
if [[ "${file}" =~ ^docs/ ]]; then
|
||||
# Generated markdown and JSON files are checked during test runs.
|
||||
if [[ "${file}" =~ ^docs/ && ! "${file}" =~ ^docs/reference/(cli|settings).md && ! "${file}" =~ ^docs/reference/environment.md ]]; then
|
||||
echo "Skipping ${file} (matches docs/ pattern)"
|
||||
continue
|
||||
fi
|
||||
|
|
@ -78,7 +70,6 @@ jobs:
|
|||
|
||||
done <<< "${CHANGED_FILES}"
|
||||
echo "code_any_changed=${CODE_CHANGED}" >> "${GITHUB_OUTPUT}"
|
||||
echo "schema_changed=${SCHEMA_CHANGED}" >> "${GITHUB_OUTPUT}"
|
||||
lint:
|
||||
timeout-minutes: 10
|
||||
name: "lint"
|
||||
|
|
@ -217,12 +208,7 @@ jobs:
|
|||
with:
|
||||
save-if: ${{ github.ref == 'refs/heads/main' }}
|
||||
- name: "Generate all"
|
||||
run: cargo dev generate-all --mode dry-run
|
||||
- name: "Check sysconfig mappings"
|
||||
run: cargo dev generate-sysconfig-metadata --mode check
|
||||
- name: "Check JSON schema"
|
||||
if: ${{ needs.determine_changes.outputs.schema == 'true' }}
|
||||
run: cargo dev generate-json-schema --mode check
|
||||
run: cargo dev generate-all --mode check
|
||||
|
||||
cargo-shear:
|
||||
timeout-minutes: 10
|
||||
|
|
@ -233,7 +219,7 @@ jobs:
|
|||
with:
|
||||
persist-credentials: false
|
||||
- name: "Install cargo shear"
|
||||
uses: taiki-e/install-action@d850aa816998e5cf15f67a78c7b933f2a5033f8a # v2.63.3
|
||||
uses: taiki-e/install-action@a416ddeedbd372e614cc1386e8b642692f66865e # v2.57.1
|
||||
with:
|
||||
tool: cargo-shear
|
||||
- run: cargo shear
|
||||
|
|
@ -289,7 +275,6 @@ jobs:
|
|||
UV_HTTP_RETRIES: 5
|
||||
run: |
|
||||
cargo nextest run \
|
||||
--cargo-profile fast-build \
|
||||
--features python-patch,native-auth,secret-service \
|
||||
--workspace \
|
||||
--status-level skip --failure-output immediate-final --no-fail-fast -j 20 --final-status-level slow
|
||||
|
|
@ -331,7 +316,6 @@ jobs:
|
|||
UV_HTTP_RETRIES: 5
|
||||
run: |
|
||||
cargo nextest run \
|
||||
--cargo-profile fast-build \
|
||||
--no-default-features \
|
||||
--features python,python-managed,pypi,git,git-lfs,performance,crates-io,native-auth,apple-native \
|
||||
--workspace \
|
||||
|
|
@ -387,7 +371,6 @@ jobs:
|
|||
shell: bash
|
||||
run: |
|
||||
cargo nextest run \
|
||||
--cargo-profile fast-build \
|
||||
--no-default-features \
|
||||
--features python,pypi,python-managed,native-auth,windows-native \
|
||||
--workspace \
|
||||
|
|
@ -527,14 +510,6 @@ jobs:
|
|||
version: "0.9.13"
|
||||
|
||||
- uses: actions/setup-python@a26af69be951a213d495a4c3e4e4022e16d87065 # v5.6.0
|
||||
- uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2.8.0
|
||||
with:
|
||||
save-if: ${{ github.ref == 'refs/heads/main' }}
|
||||
- name: "Generate reference documentation"
|
||||
run: |
|
||||
cargo dev generate-options-reference
|
||||
cargo dev generate-cli-reference
|
||||
cargo dev generate-env-vars-reference
|
||||
- name: "Add SSH key"
|
||||
if: ${{ env.MKDOCS_INSIDERS_SSH_KEY_EXISTS == 'true' }}
|
||||
uses: webfactory/ssh-agent@a6f90b1f127823b31d4d4a8d96047790581349bd # v0.9.1
|
||||
|
|
@ -564,15 +539,15 @@ jobs:
|
|||
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
||||
|
||||
- name: "Build"
|
||||
run: cargo build --profile no-debug
|
||||
run: cargo build
|
||||
|
||||
- name: "Upload binary"
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
with:
|
||||
name: uv-linux-libc-${{ github.sha }}
|
||||
path: |
|
||||
./target/no-debug/uv
|
||||
./target/no-debug/uvx
|
||||
./target/debug/uv
|
||||
./target/debug/uvx
|
||||
retention-days: 1
|
||||
|
||||
build-binary-linux-aarch64:
|
||||
|
|
@ -591,15 +566,15 @@ jobs:
|
|||
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
||||
|
||||
- name: "Build"
|
||||
run: cargo build --profile no-debug
|
||||
run: cargo build
|
||||
|
||||
- name: "Upload binary"
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
with:
|
||||
name: uv-linux-aarch64-${{ github.sha }}
|
||||
path: |
|
||||
./target/no-debug/uv
|
||||
./target/no-debug/uvx
|
||||
./target/debug/uv
|
||||
./target/debug/uvx
|
||||
retention-days: 1
|
||||
|
||||
build-binary-linux-musl:
|
||||
|
|
@ -623,15 +598,15 @@ jobs:
|
|||
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
||||
|
||||
- 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"
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
with:
|
||||
name: uv-linux-musl-${{ github.sha }}
|
||||
path: |
|
||||
./target/x86_64-unknown-linux-musl/no-debug/uv
|
||||
./target/x86_64-unknown-linux-musl/no-debug/uvx
|
||||
./target/x86_64-unknown-linux-musl/debug/uv
|
||||
./target/x86_64-unknown-linux-musl/debug/uvx
|
||||
retention-days: 1
|
||||
|
||||
build-binary-macos-aarch64:
|
||||
|
|
@ -649,15 +624,15 @@ jobs:
|
|||
|
||||
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
||||
- name: "Build"
|
||||
run: cargo build --profile no-debug --bin uv --bin uvx
|
||||
run: cargo build --bin uv --bin uvx
|
||||
|
||||
- name: "Upload binary"
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
with:
|
||||
name: uv-macos-aarch64-${{ github.sha }}
|
||||
path: |
|
||||
./target/no-debug/uv
|
||||
./target/no-debug/uvx
|
||||
./target/debug/uv
|
||||
./target/debug/uvx
|
||||
retention-days: 1
|
||||
|
||||
build-binary-macos-x86_64:
|
||||
|
|
@ -675,15 +650,15 @@ jobs:
|
|||
|
||||
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
||||
- name: "Build"
|
||||
run: cargo build --profile no-debug --bin uv --bin uvx
|
||||
run: cargo build --bin uv --bin uvx
|
||||
|
||||
- name: "Upload binary"
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
with:
|
||||
name: uv-macos-x86_64-${{ github.sha }}
|
||||
path: |
|
||||
./target/no-debug/uv
|
||||
./target/no-debug/uvx
|
||||
./target/debug/uv
|
||||
./target/debug/uvx
|
||||
retention-days: 1
|
||||
|
||||
build-binary-windows-x86_64:
|
||||
|
|
@ -711,15 +686,15 @@ jobs:
|
|||
|
||||
- name: "Build"
|
||||
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"
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
with:
|
||||
name: uv-windows-x86_64-${{ github.sha }}
|
||||
path: |
|
||||
${{ env.UV_WORKSPACE }}/target/no-debug/uv.exe
|
||||
${{ env.UV_WORKSPACE }}/target/no-debug/uvx.exe
|
||||
${{ env.UV_WORKSPACE }}/target/debug/uv.exe
|
||||
${{ env.UV_WORKSPACE }}/target/debug/uvx.exe
|
||||
retention-days: 1
|
||||
|
||||
build-binary-windows-aarch64:
|
||||
|
|
@ -751,15 +726,15 @@ jobs:
|
|||
|
||||
- name: "Build"
|
||||
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"
|
||||
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
|
||||
with:
|
||||
name: uv-windows-aarch64-${{ github.sha }}
|
||||
path: |
|
||||
${{ env.UV_WORKSPACE }}/target/aarch64-pc-windows-msvc/no-debug/uv.exe
|
||||
${{ env.UV_WORKSPACE }}/target/aarch64-pc-windows-msvc/no-debug/uvx.exe
|
||||
${{ env.UV_WORKSPACE }}/target/aarch64-pc-windows-msvc/debug/uv.exe
|
||||
${{ env.UV_WORKSPACE }}/target/aarch64-pc-windows-msvc/debug/uvx.exe
|
||||
retention-days: 1
|
||||
|
||||
build-binary-msrv:
|
||||
|
|
@ -784,10 +759,10 @@ jobs:
|
|||
- name: "Install mold"
|
||||
uses: rui314/setup-mold@725a8794d15fc7563f59595bd9556495c0564878 # v1
|
||||
- uses: Swatinem/rust-cache@779680da715d629ac1d338a641029a2f4372abb5 # v2.8.2
|
||||
- run: cargo +${MSRV} build --profile no-debug
|
||||
- run: cargo +${MSRV} build
|
||||
env:
|
||||
MSRV: ${{ steps.msrv.outputs.value }}
|
||||
- run: ./target/no-debug/uv --version
|
||||
- run: ./target/debug/uv --version
|
||||
|
||||
build-binary-freebsd:
|
||||
needs: determine_changes
|
||||
|
|
@ -808,7 +783,7 @@ jobs:
|
|||
chmod +x 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
|
||||
uses: acj/freebsd-firecracker-action@a5a3fc1709c5b5368141a5699f10259aca3cd965 # v0.6.0
|
||||
|
|
@ -822,8 +797,8 @@ jobs:
|
|||
cat <<EOF > $include_path
|
||||
target
|
||||
target/x86_64-unknown-freebsd
|
||||
target/x86_64-unknown-freebsd/no-debug
|
||||
target/x86_64-unknown-freebsd/no-debug/uv
|
||||
target/x86_64-unknown-freebsd/debug
|
||||
target/x86_64-unknown-freebsd/debug/uv
|
||||
EOF
|
||||
|
||||
rsync -r -e "ssh" \
|
||||
|
|
@ -833,7 +808,7 @@ jobs:
|
|||
--exclude "*" \
|
||||
. firecracker:
|
||||
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
|
||||
./uv --version
|
||||
|
||||
|
|
@ -2067,22 +2042,22 @@ jobs:
|
|||
|
||||
# Test the main path (`build_wheel`) through pip
|
||||
./uv venv -v --seed
|
||||
./uv run --no-project python -m pip install -v test/packages/built-by-uv --find-links crates/uv-build/dist --no-index --no-deps
|
||||
./uv run --no-project python -m pip install -v scripts/packages/built-by-uv --find-links crates/uv-build/dist --no-index --no-deps
|
||||
./uv run --no-project python -c "from built_by_uv import greet; print(greet())"
|
||||
|
||||
# Test both `build_wheel` and `build_sdist` through uv
|
||||
./uv venv -c -v
|
||||
./uv build -v --force-pep517 test/packages/built-by-uv --find-links crates/uv-build/dist --offline
|
||||
./uv pip install -v test/packages/built-by-uv/dist/*.tar.gz --find-links crates/uv-build/dist --offline --no-deps
|
||||
./uv build -v --force-pep517 scripts/packages/built-by-uv --find-links crates/uv-build/dist --offline
|
||||
./uv pip install -v scripts/packages/built-by-uv/dist/*.tar.gz --find-links crates/uv-build/dist --offline --no-deps
|
||||
./uv run --no-project python -c "from built_by_uv import greet; print(greet())"
|
||||
|
||||
# Test both `build_wheel` and `build_sdist` through the official `build`
|
||||
rm -rf test/packages/built-by-uv/dist/
|
||||
rm -rf scripts/packages/built-by-uv/dist/
|
||||
./uv venv -c -v
|
||||
./uv pip install build
|
||||
# Add the uv binary to PATH for `build` to find
|
||||
PATH="$(pwd):$PATH" UV_OFFLINE=1 UV_FIND_LINKS=crates/uv-build/dist ./uv run --no-project python -m build -v --installer uv test/packages/built-by-uv
|
||||
./uv pip install -v test/packages/built-by-uv/dist/*.tar.gz --find-links crates/uv-build/dist --offline --no-deps
|
||||
PATH="$(pwd):$PATH" UV_OFFLINE=1 UV_FIND_LINKS=crates/uv-build/dist ./uv run --no-project python -m build -v --installer uv scripts/packages/built-by-uv
|
||||
./uv pip install -v scripts/packages/built-by-uv/dist/*.tar.gz --find-links crates/uv-build/dist --offline --no-deps
|
||||
./uv run --no-project python -c "from built_by_uv import greet; print(greet())"
|
||||
|
||||
cache-test-ubuntu:
|
||||
|
|
@ -2946,8 +2921,8 @@ jobs:
|
|||
sudo apt-get update
|
||||
sudo apt-get install -y libsasl2-dev libldap2-dev libkrb5-dev
|
||||
cargo run --bin uv -- venv --cache-dir .cache
|
||||
cargo run --bin uv -- pip compile test/requirements/jupyter.in --universal --exclude-newer 2024-08-08 --cache-dir .cache
|
||||
cargo run --bin uv -- pip compile test/requirements/airflow.in --universal --exclude-newer 2024-08-08 --cache-dir .cache
|
||||
cargo run --bin uv -- pip compile scripts/requirements/jupyter.in --universal --exclude-newer 2024-08-08 --cache-dir .cache
|
||||
cargo run --bin uv -- pip compile scripts/requirements/airflow.in --universal --exclude-newer 2024-08-08 --cache-dir .cache
|
||||
|
||||
- name: "Build benchmarks"
|
||||
run: cargo codspeed build --profile profiling -p uv-bench
|
||||
|
|
@ -2986,8 +2961,8 @@ jobs:
|
|||
sudo apt-get update
|
||||
sudo apt-get install -y libsasl2-dev libldap2-dev libkrb5-dev
|
||||
cargo run --bin uv -- venv --cache-dir .cache
|
||||
cargo run --bin uv -- pip compile test/requirements/jupyter.in --universal --exclude-newer 2024-08-08 --cache-dir .cache
|
||||
cargo run --bin uv -- pip compile test/requirements/airflow.in --universal --exclude-newer 2024-08-08 --cache-dir .cache
|
||||
cargo run --bin uv -- pip compile scripts/requirements/jupyter.in --universal --exclude-newer 2024-08-08 --cache-dir .cache
|
||||
cargo run --bin uv -- pip compile scripts/requirements/airflow.in --universal --exclude-newer 2024-08-08 --cache-dir .cache
|
||||
|
||||
- name: "Build benchmarks"
|
||||
run: cargo codspeed build --profile profiling -p uv-bench
|
||||
|
|
|
|||
|
|
@ -36,14 +36,6 @@ jobs:
|
|||
with:
|
||||
python-version: 3.12
|
||||
|
||||
- uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2.8.0
|
||||
|
||||
- name: "Generate reference documentation"
|
||||
run: |
|
||||
cargo dev generate-options-reference
|
||||
cargo dev generate-cli-reference
|
||||
cargo dev generate-env-vars-reference
|
||||
|
||||
- name: "Set docs display name"
|
||||
run: |
|
||||
version="${VERSION}"
|
||||
|
|
|
|||
|
|
@ -226,7 +226,6 @@ jobs:
|
|||
needs:
|
||||
- plan
|
||||
- host
|
||||
- custom-publish-pypi # DIRTY: see #16989
|
||||
if: ${{ !fromJson(needs.plan.outputs.val).announcement_is_prerelease || fromJson(needs.plan.outputs.val).publish_prereleases }}
|
||||
uses: ./.github/workflows/publish-crates.yml
|
||||
with:
|
||||
|
|
|
|||
|
|
@ -37,11 +37,6 @@ profile.json.gz
|
|||
# MkDocs
|
||||
/site
|
||||
|
||||
# Generated reference docs (use `cargo dev generate-all` to regenerate)
|
||||
/docs/reference/cli.md
|
||||
/docs/reference/environment.md
|
||||
/docs/reference/settings.md
|
||||
|
||||
# macOS
|
||||
**/.DS_Store
|
||||
|
||||
|
|
|
|||
|
|
@ -4,5 +4,5 @@ PREVIEW-CHANGELOG.md
|
|||
docs/reference/cli.md
|
||||
docs/reference/settings.md
|
||||
docs/reference/environment.md
|
||||
test/ecosystem/home-assistant-core/LICENSE.md
|
||||
ecosystem/home-assistant-core/LICENSE.md
|
||||
docs/guides/integration/gitlab.md
|
||||
|
|
|
|||
58
CHANGELOG.md
58
CHANGELOG.md
|
|
@ -3,64 +3,6 @@
|
|||
<!-- 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
|
||||
|
||||
Released on 2025-12-09.
|
||||
|
||||
### Enhancements
|
||||
|
||||
- Add `torch-tensorrt` and `torchao` to the PyTorch list ([#17053](https://github.com/astral-sh/uv/pull/17053))
|
||||
- Add hint for misplaced `--verbose` in `uv tool run` ([#17020](https://github.com/astral-sh/uv/pull/17020))
|
||||
- Add support for relative durations in `exclude-newer` (a.k.a., dependency cooldowns) ([#16814](https://github.com/astral-sh/uv/pull/16814))
|
||||
- Add support for relocatable nushell activation script ([#17036](https://github.com/astral-sh/uv/pull/17036))
|
||||
|
||||
### Bug fixes
|
||||
|
||||
- Respect dropped (but explicit) indexes in dependency groups ([#17012](https://github.com/astral-sh/uv/pull/17012))
|
||||
|
||||
### Documentation
|
||||
|
||||
- Improve `source-exclude` reference docs ([#16832](https://github.com/astral-sh/uv/pull/16832))
|
||||
- Recommend `UV_NO_DEV` in Docker installs ([#17030](https://github.com/astral-sh/uv/pull/17030))
|
||||
- Update `UV_VERSION` in docs for GitLab CI/CD ([#17040](https://github.com/astral-sh/uv/pull/17040))
|
||||
|
||||
## 0.9.16
|
||||
|
||||
Released on 2025-12-06.
|
||||
|
|
|
|||
|
|
@ -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
|
||||
```
|
||||
|
||||
## 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
|
||||
|
||||
Source distributions can run arbitrary code on build and can make unwanted modifications to your
|
||||
|
|
@ -136,7 +127,7 @@ Please refer to Ruff's
|
|||
it applies to uv, too.
|
||||
|
||||
We provide diverse sets of requirements for testing and benchmarking the resolver in
|
||||
`test/requirements` and for the installer in `test/requirements/compiled`.
|
||||
`scripts/requirements` and for the installer in `scripts/requirements/compiled`.
|
||||
|
||||
You can use `scripts/benchmark` to benchmark predefined workloads between uv versions and with other
|
||||
tools, e.g., from the `scripts/benchmark` directory:
|
||||
|
|
@ -147,7 +138,7 @@ uv run resolver \
|
|||
--poetry \
|
||||
--benchmark \
|
||||
resolve-cold \
|
||||
../test/requirements/trio.in
|
||||
../scripts/requirements/trio.in
|
||||
```
|
||||
|
||||
### Analyzing concurrency
|
||||
|
|
@ -157,7 +148,7 @@ visualize parallel requests and find any spots where uv is CPU-bound. Example us
|
|||
`uv-dev` respectively:
|
||||
|
||||
```shell
|
||||
RUST_LOG=uv=info TRACING_DURATIONS_FILE=target/traces/jupyter.ndjson cargo run --features tracing-durations-export --profile profiling -- pip compile test/requirements/jupyter.in
|
||||
RUST_LOG=uv=info TRACING_DURATIONS_FILE=target/traces/jupyter.ndjson cargo run --features tracing-durations-export --profile profiling -- pip compile scripts/requirements/jupyter.in
|
||||
```
|
||||
|
||||
```shell
|
||||
|
|
|
|||
|
|
@ -45,9 +45,9 @@ checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923"
|
|||
|
||||
[[package]]
|
||||
name = "ambient-id"
|
||||
version = "0.0.7"
|
||||
version = "0.0.6"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "b8cad022ed72ad2176498be1c097bb46e598193e92f3491ea0766980edeee168"
|
||||
checksum = "36b48a3b1ad866e5034859be45edd1ebba2f097289c8a34b61623c76f10480f3"
|
||||
dependencies = [
|
||||
"astral-reqwest-middleware",
|
||||
"reqwest",
|
||||
|
|
@ -1038,15 +1038,6 @@ dependencies = [
|
|||
"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]]
|
||||
name = "crossbeam-deque"
|
||||
version = "0.8.6"
|
||||
|
|
@ -1264,16 +1255,6 @@ dependencies = [
|
|||
"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]]
|
||||
name = "dispatch2"
|
||||
version = "0.3.0"
|
||||
|
|
@ -3462,9 +3443,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "rayon"
|
||||
version = "1.11.0"
|
||||
version = "1.10.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "368f01d005bf8fd9b1206fb6fa653e6c4a81ceb1466406b81792d87c5677a58f"
|
||||
checksum = "b418a60154510ca1a002a752ca9714984e21e4241e804d32555251faf8b78ffa"
|
||||
dependencies = [
|
||||
"either",
|
||||
"rayon-core",
|
||||
|
|
@ -3472,9 +3453,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "rayon-core"
|
||||
version = "1.13.0"
|
||||
version = "1.12.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "22e18b0f0062d30d4230b2e85ff77fdfe4326feb054b9783a3460d8435c8ab91"
|
||||
checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
|
||||
dependencies = [
|
||||
"crossbeam-deque",
|
||||
"crossbeam-utils",
|
||||
|
|
@ -4397,9 +4378,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "spdx"
|
||||
version = "0.13.2"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "35107b1c818f4e9cb9e6c4444ca560ba03b4ee1288dcecc6d7830c2023a7609e"
|
||||
checksum = "41cf87c0efffc158b9dde4d6e0567a43e4383adc4c949e687a2039732db2f23a"
|
||||
dependencies = [
|
||||
"smallvec",
|
||||
]
|
||||
|
|
@ -5406,7 +5387,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv"
|
||||
version = "0.9.18"
|
||||
version = "0.9.16"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anyhow",
|
||||
|
|
@ -5421,7 +5402,6 @@ dependencies = [
|
|||
"clap",
|
||||
"console 0.16.1",
|
||||
"ctrlc",
|
||||
"diskus",
|
||||
"dotenvy",
|
||||
"dunce",
|
||||
"embed-manifest",
|
||||
|
|
@ -5429,6 +5409,7 @@ dependencies = [
|
|||
"flate2",
|
||||
"fs-err",
|
||||
"futures",
|
||||
"h2",
|
||||
"http",
|
||||
"ignore",
|
||||
"indexmap",
|
||||
|
|
@ -5525,7 +5506,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-auth"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"arcstr",
|
||||
|
|
@ -5568,7 +5549,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-bench"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"codspeed-criterion-compat",
|
||||
|
|
@ -5595,7 +5576,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-bin-install"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"astral-reqwest-middleware",
|
||||
"astral-reqwest-retry",
|
||||
|
|
@ -5612,6 +5593,7 @@ dependencies = [
|
|||
"uv-client",
|
||||
"uv-distribution-filename",
|
||||
"uv-extract",
|
||||
"uv-fs",
|
||||
"uv-pep440",
|
||||
"uv-platform",
|
||||
"uv-redacted",
|
||||
|
|
@ -5619,7 +5601,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-build"
|
||||
version = "0.9.18"
|
||||
version = "0.9.16"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anyhow",
|
||||
|
|
@ -5631,7 +5613,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-build-backend"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"astral-version-ranges",
|
||||
"base64 0.22.1",
|
||||
|
|
@ -5647,7 +5629,7 @@ dependencies = [
|
|||
"schemars",
|
||||
"serde",
|
||||
"sha2",
|
||||
"spdx 0.13.2",
|
||||
"spdx 0.12.0",
|
||||
"tar",
|
||||
"tempfile",
|
||||
"thiserror 2.0.17",
|
||||
|
|
@ -5671,7 +5653,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-build-frontend"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"fs-err",
|
||||
|
|
@ -5709,7 +5691,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-cache"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"fs-err",
|
||||
|
|
@ -5719,7 +5701,6 @@ dependencies = [
|
|||
"same-file",
|
||||
"serde",
|
||||
"tempfile",
|
||||
"thiserror 2.0.17",
|
||||
"tracing",
|
||||
"uv-cache-info",
|
||||
"uv-cache-key",
|
||||
|
|
@ -5735,7 +5716,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-cache-info"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"fs-err",
|
||||
|
|
@ -5752,7 +5733,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-cache-key"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"hex",
|
||||
"memchr",
|
||||
|
|
@ -5764,7 +5745,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-cli"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anyhow",
|
||||
|
|
@ -5796,7 +5777,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-client"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"astral-reqwest-middleware",
|
||||
|
|
@ -5859,7 +5840,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-configuration"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"clap",
|
||||
|
|
@ -5888,14 +5869,14 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-console"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"console 0.16.1",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uv-dev"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anyhow",
|
||||
|
|
@ -5944,7 +5925,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-dirs"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"assert_fs",
|
||||
"etcetera",
|
||||
|
|
@ -5956,7 +5937,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-dispatch"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"futures",
|
||||
|
|
@ -5988,7 +5969,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-distribution"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"astral-reqwest-middleware",
|
||||
|
|
@ -6037,7 +6018,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-distribution-filename"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"insta",
|
||||
"memchr",
|
||||
|
|
@ -6054,7 +6035,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-distribution-types"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"arcstr",
|
||||
"astral-version-ranges",
|
||||
|
|
@ -6094,7 +6075,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-extract"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"astral-tokio-tar",
|
||||
"astral_async_zip",
|
||||
|
|
@ -6124,14 +6105,14 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-flags"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"bitflags 2.9.4",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uv-fs"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"backon",
|
||||
"dunce",
|
||||
|
|
@ -6155,7 +6136,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-git"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"astral-reqwest-middleware",
|
||||
|
|
@ -6181,7 +6162,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-git-types"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"serde",
|
||||
"thiserror 2.0.17",
|
||||
|
|
@ -6193,7 +6174,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-globfilter"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"fs-err",
|
||||
|
|
@ -6210,7 +6191,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-install-wheel"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"assert_fs",
|
||||
|
|
@ -6250,7 +6231,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-installer"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"async-channel",
|
||||
|
|
@ -6291,7 +6272,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-keyring"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"async-trait",
|
||||
"byteorder",
|
||||
|
|
@ -6308,7 +6289,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-logging"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"jiff",
|
||||
"owo-colors",
|
||||
|
|
@ -6318,7 +6299,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-macros"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"proc-macro2",
|
||||
"quote",
|
||||
|
|
@ -6328,7 +6309,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-metadata"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"astral_async_zip",
|
||||
"fs-err",
|
||||
|
|
@ -6345,7 +6326,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-normalize"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"rkyv",
|
||||
"schemars",
|
||||
|
|
@ -6355,7 +6336,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-once-map"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"dashmap",
|
||||
"futures",
|
||||
|
|
@ -6364,14 +6345,14 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-options-metadata"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"serde",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uv-pep440"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"astral-version-ranges",
|
||||
"indoc",
|
||||
|
|
@ -6385,7 +6366,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-pep508"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"arcstr",
|
||||
"astral-version-ranges",
|
||||
|
|
@ -6414,7 +6395,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-performance-memory-allocator"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"mimalloc",
|
||||
"tikv-jemallocator",
|
||||
|
|
@ -6422,7 +6403,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-platform"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"fs-err",
|
||||
"goblin",
|
||||
|
|
@ -6439,7 +6420,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-platform-tags"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"insta",
|
||||
"memchr",
|
||||
|
|
@ -6452,7 +6433,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-preview"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"bitflags 2.9.4",
|
||||
"thiserror 2.0.17",
|
||||
|
|
@ -6461,10 +6442,9 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-publish"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"ambient-id",
|
||||
"anstream",
|
||||
"astral-reqwest-middleware",
|
||||
"astral-reqwest-retry",
|
||||
"astral-tokio-tar",
|
||||
|
|
@ -6498,12 +6478,11 @@ dependencies = [
|
|||
"uv-redacted",
|
||||
"uv-static",
|
||||
"uv-warnings",
|
||||
"wiremock",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uv-pypi-types"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"hashbrown 0.16.1",
|
||||
|
|
@ -6535,7 +6514,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-python"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"assert_fs",
|
||||
|
|
@ -6597,7 +6576,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-redacted"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"ref-cast",
|
||||
"schemars",
|
||||
|
|
@ -6608,7 +6587,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-requirements"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"configparser",
|
||||
|
|
@ -6643,7 +6622,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-requirements-txt"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"assert_fs",
|
||||
|
|
@ -6676,7 +6655,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-resolver"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"arcstr",
|
||||
"astral-pubgrub",
|
||||
|
|
@ -6741,7 +6720,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-scripts"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"fs-err",
|
||||
"indoc",
|
||||
|
|
@ -6765,7 +6744,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-settings"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"fs-err",
|
||||
|
|
@ -6800,7 +6779,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-shell"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"fs-err",
|
||||
|
|
@ -6817,7 +6796,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-small-str"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"arcstr",
|
||||
"rkyv",
|
||||
|
|
@ -6827,7 +6806,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-state"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"fs-err",
|
||||
"tempfile",
|
||||
|
|
@ -6836,14 +6815,14 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-static"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"uv-macros",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uv-tool"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"fs-err",
|
||||
"pathdiff",
|
||||
|
|
@ -6872,7 +6851,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-torch"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"clap",
|
||||
"either",
|
||||
|
|
@ -6892,7 +6871,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-trampoline-builder"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"assert_cmd",
|
||||
|
|
@ -6909,7 +6888,7 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-types"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"dashmap",
|
||||
|
|
@ -6931,11 +6910,11 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-version"
|
||||
version = "0.9.18"
|
||||
version = "0.9.16"
|
||||
|
||||
[[package]]
|
||||
name = "uv-virtualenv"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"console 0.16.1",
|
||||
"fs-err",
|
||||
|
|
@ -6957,19 +6936,16 @@ dependencies = [
|
|||
|
||||
[[package]]
|
||||
name = "uv-warnings"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anstream",
|
||||
"anyhow",
|
||||
"indoc",
|
||||
"insta",
|
||||
"owo-colors",
|
||||
"rustc-hash",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "uv-workspace"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
dependencies = [
|
||||
"anyhow",
|
||||
"assert_fs",
|
||||
|
|
|
|||
133
Cargo.toml
133
Cargo.toml
|
|
@ -16,66 +16,66 @@ authors = ["uv"]
|
|||
license = "MIT OR Apache-2.0"
|
||||
|
||||
[workspace.dependencies]
|
||||
uv-auth = { version = "0.0.8", path = "crates/uv-auth" }
|
||||
uv-bin-install = { version = "0.0.8", path = "crates/uv-bin-install" }
|
||||
uv-build-backend = { version = "0.0.8", path = "crates/uv-build-backend" }
|
||||
uv-build-frontend = { version = "0.0.8", path = "crates/uv-build-frontend" }
|
||||
uv-cache = { version = "0.0.8", path = "crates/uv-cache" }
|
||||
uv-cache-info = { version = "0.0.8", path = "crates/uv-cache-info" }
|
||||
uv-cache-key = { version = "0.0.8", path = "crates/uv-cache-key" }
|
||||
uv-cli = { version = "0.0.8", path = "crates/uv-cli" }
|
||||
uv-client = { version = "0.0.8", path = "crates/uv-client" }
|
||||
uv-configuration = { version = "0.0.8", path = "crates/uv-configuration" }
|
||||
uv-console = { version = "0.0.8", path = "crates/uv-console" }
|
||||
uv-dirs = { version = "0.0.8", path = "crates/uv-dirs" }
|
||||
uv-dispatch = { version = "0.0.8", path = "crates/uv-dispatch" }
|
||||
uv-distribution = { version = "0.0.8", path = "crates/uv-distribution" }
|
||||
uv-distribution-filename = { version = "0.0.8", path = "crates/uv-distribution-filename" }
|
||||
uv-distribution-types = { version = "0.0.8", path = "crates/uv-distribution-types" }
|
||||
uv-extract = { version = "0.0.8", path = "crates/uv-extract" }
|
||||
uv-flags = { version = "0.0.8", path = "crates/uv-flags" }
|
||||
uv-fs = { version = "0.0.8", path = "crates/uv-fs", features = ["serde", "tokio"] }
|
||||
uv-git = { version = "0.0.8", path = "crates/uv-git" }
|
||||
uv-git-types = { version = "0.0.8", path = "crates/uv-git-types" }
|
||||
uv-globfilter = { version = "0.0.8", path = "crates/uv-globfilter" }
|
||||
uv-install-wheel = { version = "0.0.8", path = "crates/uv-install-wheel", default-features = false }
|
||||
uv-installer = { version = "0.0.8", path = "crates/uv-installer" }
|
||||
uv-keyring = { version = "0.0.8", path = "crates/uv-keyring" }
|
||||
uv-logging = { version = "0.0.8", path = "crates/uv-logging" }
|
||||
uv-macros = { version = "0.0.8", path = "crates/uv-macros" }
|
||||
uv-metadata = { version = "0.0.8", path = "crates/uv-metadata" }
|
||||
uv-normalize = { version = "0.0.8", path = "crates/uv-normalize" }
|
||||
uv-once-map = { version = "0.0.8", path = "crates/uv-once-map" }
|
||||
uv-options-metadata = { version = "0.0.8", path = "crates/uv-options-metadata" }
|
||||
uv-performance-memory-allocator = { version = "0.0.8", path = "crates/uv-performance-memory-allocator" }
|
||||
uv-pep440 = { version = "0.0.8", path = "crates/uv-pep440", features = ["tracing", "rkyv", "version-ranges"] }
|
||||
uv-pep508 = { version = "0.0.8", path = "crates/uv-pep508", features = ["non-pep508-extensions"] }
|
||||
uv-platform = { version = "0.0.8", path = "crates/uv-platform" }
|
||||
uv-platform-tags = { version = "0.0.8", path = "crates/uv-platform-tags" }
|
||||
uv-preview = { version = "0.0.8", path = "crates/uv-preview" }
|
||||
uv-publish = { version = "0.0.8", path = "crates/uv-publish" }
|
||||
uv-pypi-types = { version = "0.0.8", path = "crates/uv-pypi-types" }
|
||||
uv-python = { version = "0.0.8", path = "crates/uv-python" }
|
||||
uv-redacted = { version = "0.0.8", path = "crates/uv-redacted" }
|
||||
uv-requirements = { version = "0.0.8", path = "crates/uv-requirements" }
|
||||
uv-requirements-txt = { version = "0.0.8", path = "crates/uv-requirements-txt" }
|
||||
uv-resolver = { version = "0.0.8", path = "crates/uv-resolver" }
|
||||
uv-scripts = { version = "0.0.8", path = "crates/uv-scripts" }
|
||||
uv-settings = { version = "0.0.8", path = "crates/uv-settings" }
|
||||
uv-shell = { version = "0.0.8", path = "crates/uv-shell" }
|
||||
uv-small-str = { version = "0.0.8", path = "crates/uv-small-str" }
|
||||
uv-state = { version = "0.0.8", path = "crates/uv-state" }
|
||||
uv-static = { version = "0.0.8", path = "crates/uv-static" }
|
||||
uv-tool = { version = "0.0.8", path = "crates/uv-tool" }
|
||||
uv-torch = { version = "0.0.8", path = "crates/uv-torch" }
|
||||
uv-trampoline-builder = { version = "0.0.8", path = "crates/uv-trampoline-builder" }
|
||||
uv-types = { version = "0.0.8", path = "crates/uv-types" }
|
||||
uv-version = { version = "0.9.18", path = "crates/uv-version" }
|
||||
uv-virtualenv = { version = "0.0.8", path = "crates/uv-virtualenv" }
|
||||
uv-warnings = { version = "0.0.8", path = "crates/uv-warnings" }
|
||||
uv-workspace = { version = "0.0.8", path = "crates/uv-workspace" }
|
||||
uv-auth = { version = "0.0.6", path = "crates/uv-auth" }
|
||||
uv-bin-install = { version = "0.0.6", path = "crates/uv-bin-install" }
|
||||
uv-build-backend = { version = "0.0.6", path = "crates/uv-build-backend" }
|
||||
uv-build-frontend = { version = "0.0.6", path = "crates/uv-build-frontend" }
|
||||
uv-cache = { version = "0.0.6", path = "crates/uv-cache" }
|
||||
uv-cache-info = { version = "0.0.6", path = "crates/uv-cache-info" }
|
||||
uv-cache-key = { version = "0.0.6", path = "crates/uv-cache-key" }
|
||||
uv-cli = { version = "0.0.6", path = "crates/uv-cli" }
|
||||
uv-client = { version = "0.0.6", path = "crates/uv-client" }
|
||||
uv-configuration = { version = "0.0.6", path = "crates/uv-configuration" }
|
||||
uv-console = { version = "0.0.6", path = "crates/uv-console" }
|
||||
uv-dirs = { version = "0.0.6", path = "crates/uv-dirs" }
|
||||
uv-dispatch = { version = "0.0.6", path = "crates/uv-dispatch" }
|
||||
uv-distribution = { version = "0.0.6", path = "crates/uv-distribution" }
|
||||
uv-distribution-filename = { version = "0.0.6", path = "crates/uv-distribution-filename" }
|
||||
uv-distribution-types = { version = "0.0.6", path = "crates/uv-distribution-types" }
|
||||
uv-extract = { version = "0.0.6", path = "crates/uv-extract" }
|
||||
uv-flags = { version = "0.0.6", path = "crates/uv-flags" }
|
||||
uv-fs = { version = "0.0.6", path = "crates/uv-fs", features = ["serde", "tokio"] }
|
||||
uv-git = { version = "0.0.6", path = "crates/uv-git" }
|
||||
uv-git-types = { version = "0.0.6", path = "crates/uv-git-types" }
|
||||
uv-globfilter = { version = "0.0.6", path = "crates/uv-globfilter" }
|
||||
uv-install-wheel = { version = "0.0.6", path = "crates/uv-install-wheel", default-features = false }
|
||||
uv-installer = { version = "0.0.6", path = "crates/uv-installer" }
|
||||
uv-keyring = { version = "0.0.6", path = "crates/uv-keyring" }
|
||||
uv-logging = { version = "0.0.6", path = "crates/uv-logging" }
|
||||
uv-macros = { version = "0.0.6", path = "crates/uv-macros" }
|
||||
uv-metadata = { version = "0.0.6", path = "crates/uv-metadata" }
|
||||
uv-normalize = { version = "0.0.6", path = "crates/uv-normalize" }
|
||||
uv-once-map = { version = "0.0.6", path = "crates/uv-once-map" }
|
||||
uv-options-metadata = { version = "0.0.6", path = "crates/uv-options-metadata" }
|
||||
uv-performance-memory-allocator = { version = "0.0.6", path = "crates/uv-performance-memory-allocator" }
|
||||
uv-pep440 = { version = "0.0.6", path = "crates/uv-pep440", features = ["tracing", "rkyv", "version-ranges"] }
|
||||
uv-pep508 = { version = "0.0.6", path = "crates/uv-pep508", features = ["non-pep508-extensions"] }
|
||||
uv-platform = { version = "0.0.6", path = "crates/uv-platform" }
|
||||
uv-platform-tags = { version = "0.0.6", path = "crates/uv-platform-tags" }
|
||||
uv-preview = { version = "0.0.6", path = "crates/uv-preview" }
|
||||
uv-publish = { version = "0.0.6", path = "crates/uv-publish" }
|
||||
uv-pypi-types = { version = "0.0.6", path = "crates/uv-pypi-types" }
|
||||
uv-python = { version = "0.0.6", path = "crates/uv-python" }
|
||||
uv-redacted = { version = "0.0.6", path = "crates/uv-redacted" }
|
||||
uv-requirements = { version = "0.0.6", path = "crates/uv-requirements" }
|
||||
uv-requirements-txt = { version = "0.0.6", path = "crates/uv-requirements-txt" }
|
||||
uv-resolver = { version = "0.0.6", path = "crates/uv-resolver" }
|
||||
uv-scripts = { version = "0.0.6", path = "crates/uv-scripts" }
|
||||
uv-settings = { version = "0.0.6", path = "crates/uv-settings" }
|
||||
uv-shell = { version = "0.0.6", path = "crates/uv-shell" }
|
||||
uv-small-str = { version = "0.0.6", path = "crates/uv-small-str" }
|
||||
uv-state = { version = "0.0.6", path = "crates/uv-state" }
|
||||
uv-static = { version = "0.0.6", path = "crates/uv-static" }
|
||||
uv-tool = { version = "0.0.6", path = "crates/uv-tool" }
|
||||
uv-torch = { version = "0.0.6", path = "crates/uv-torch" }
|
||||
uv-trampoline-builder = { version = "0.0.6", path = "crates/uv-trampoline-builder" }
|
||||
uv-types = { version = "0.0.6", path = "crates/uv-types" }
|
||||
uv-version = { version = "0.9.16", path = "crates/uv-version" }
|
||||
uv-virtualenv = { version = "0.0.6", path = "crates/uv-virtualenv" }
|
||||
uv-warnings = { version = "0.0.6", path = "crates/uv-warnings" }
|
||||
uv-workspace = { version = "0.0.6", path = "crates/uv-workspace" }
|
||||
|
||||
ambient-id = { version = "0.0.7", default-features = false, features = ["astral-reqwest-middleware"] }
|
||||
ambient-id = { version = "0.0.6", default-features = false, features = ["astral-reqwest-middleware"] }
|
||||
anstream = { version = "0.6.15" }
|
||||
anyhow = { version = "1.0.89" }
|
||||
arcstr = { version = "1.2.0" }
|
||||
|
|
@ -103,7 +103,6 @@ ctrlc = { version = "3.4.5" }
|
|||
cyclonedx-bom = { version = "0.8.0" }
|
||||
dashmap = { version = "6.1.0" }
|
||||
data-encoding = { version = "2.6.0" }
|
||||
diskus = { version = "0.9.0", default-features = false }
|
||||
dotenvy = { version = "0.15.7" }
|
||||
dunce = { version = "1.0.5" }
|
||||
either = { version = "1.13.0" }
|
||||
|
|
@ -170,7 +169,7 @@ serde-untagged = { version = "0.1.6" }
|
|||
serde_json = { version = "1.0.128" }
|
||||
sha2 = { version = "0.10.8" }
|
||||
smallvec = { version = "1.13.2" }
|
||||
spdx = { version = "0.13.0" }
|
||||
spdx = { version = "0.12.0" }
|
||||
syn = { version = "2.0.77" }
|
||||
sys-info = { version = "0.9.1" }
|
||||
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 }
|
||||
whoami = { version = "1.6.0" }
|
||||
|
||||
[workspace.metadata.cargo-shear]
|
||||
ignored = ["flate2", "xz2", "h2", "uv-performance-memory-allocator"]
|
||||
|
||||
[workspace.lints.rust]
|
||||
unsafe_code = "warn"
|
||||
unreachable_pub = "warn"
|
||||
|
|
@ -310,21 +312,12 @@ strip = false
|
|||
debug = "full"
|
||||
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]
|
||||
inherits = "dev"
|
||||
opt-level = 1
|
||||
debug = 0
|
||||
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.minimal-size]
|
||||
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.
|
||||
|
||||
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
|
||||
|
||||
|
|
@ -192,12 +192,14 @@ uv installs Python and allows quickly switching between versions.
|
|||
Install multiple Python versions:
|
||||
|
||||
```console
|
||||
$ uv python install 3.12 3.13 3.14
|
||||
Installed 3 versions in 972ms
|
||||
+ cpython-3.12.12-macos-aarch64-none (python3.12)
|
||||
+ cpython-3.13.9-macos-aarch64-none (python3.13)
|
||||
+ cpython-3.14.0-macos-aarch64-none (python3.14)
|
||||
|
||||
$ uv python install 3.10 3.11 3.12
|
||||
Searching for Python versions matching: Python 3.10
|
||||
Searching for Python versions matching: Python 3.11
|
||||
Searching for Python versions matching: Python 3.12
|
||||
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:
|
||||
|
|
@ -268,6 +270,14 @@ Installed 43 packages in 208ms
|
|||
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
#### 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
|
||||
|
||||
uv's dependency resolver uses [PubGrub](https://github.com/pubgrub-rs/pubgrub) under the hood. We're
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
[files]
|
||||
extend-exclude = [
|
||||
"**/snapshots/",
|
||||
"test/ecosystem/**",
|
||||
"test/requirements/**/*.in",
|
||||
"ecosystem/**",
|
||||
"scripts/**/*.in",
|
||||
"crates/uv-build-frontend/src/pipreqs/mapping",
|
||||
]
|
||||
ignore-hidden = false
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-auth"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-auth).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-auth).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -129,15 +129,6 @@ enum TokenState {
|
|||
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.
|
||||
///
|
||||
/// Uses a cache to propagate credentials from previously seen requests and
|
||||
|
|
@ -159,8 +150,6 @@ pub struct AuthMiddleware {
|
|||
pyx_token_store: Option<PyxTokenStore>,
|
||||
/// Tokens to use for persistent credentials.
|
||||
pyx_token_state: Mutex<TokenState>,
|
||||
/// Cached S3 credentials to avoid running the credential helper multiple times.
|
||||
s3_credential_state: Mutex<S3CredentialState>,
|
||||
preview: Preview,
|
||||
}
|
||||
|
||||
|
|
@ -183,7 +172,6 @@ impl AuthMiddleware {
|
|||
base_client: None,
|
||||
pyx_token_store: None,
|
||||
pyx_token_state: Mutex::new(TokenState::Uninitialized),
|
||||
s3_credential_state: Mutex::new(S3CredentialState::Uninitialized),
|
||||
preview: Preview::default(),
|
||||
}
|
||||
}
|
||||
|
|
@ -690,27 +678,14 @@ impl AuthMiddleware {
|
|||
return Some(credentials);
|
||||
}
|
||||
|
||||
if S3EndpointProvider::is_s3_endpoint(url, self.preview) {
|
||||
let mut s3_state = self.s3_credential_state.lock().await;
|
||||
|
||||
// If the S3 credential state is uninitialized, initialize it.
|
||||
let credentials = match &*s3_state {
|
||||
S3CredentialState::Uninitialized => {
|
||||
trace!("Initializing S3 credentials for {url}");
|
||||
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 {
|
||||
if let Some(credentials) = S3EndpointProvider::credentials_for(url, self.preview)
|
||||
.map(Authentication::from)
|
||||
.map(Arc::new)
|
||||
{
|
||||
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 let Some(base_client) = self.base_client.as_ref() {
|
||||
|
|
|
|||
|
|
@ -66,8 +66,8 @@ static S3_ENDPOINT_REALM: LazyLock<Option<Realm>> = LazyLock::new(|| {
|
|||
pub(crate) struct S3EndpointProvider;
|
||||
|
||||
impl S3EndpointProvider {
|
||||
/// Returns `true` if the URL matches the configured S3 endpoint.
|
||||
pub(crate) fn is_s3_endpoint(url: &Url, preview: Preview) -> bool {
|
||||
/// Returns the credentials for the S3 endpoint, if available.
|
||||
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 !preview.is_enabled(PreviewFeatures::S3_ENDPOINT) {
|
||||
warn_user_once!(
|
||||
|
|
@ -79,17 +79,6 @@ impl S3EndpointProvider {
|
|||
// Treat any URL on the same domain or subdomain as available for S3 signing.
|
||||
let realm = RealmRef::from(url);
|
||||
if realm == s3_endpoint_realm || realm.is_subdomain_of(s3_endpoint_realm) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
false
|
||||
}
|
||||
|
||||
/// 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)
|
||||
|
|
@ -99,6 +88,10 @@ impl S3EndpointProvider {
|
|||
.map(Cow::Owned)
|
||||
.unwrap_or_else(|_| Cow::Borrowed("us-east-1"))
|
||||
});
|
||||
reqsign::aws::default_signer("s3", ®ion)
|
||||
let signer = reqsign::aws::default_signer("s3", ®ion);
|
||||
return Some(signer);
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-bench"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
publish = false
|
||||
authors = { workspace = true }
|
||||
|
|
@ -22,14 +22,14 @@ name = "uv"
|
|||
path = "benches/uv.rs"
|
||||
harness = false
|
||||
|
||||
[dev-dependencies]
|
||||
[dependencies]
|
||||
uv-cache = { workspace = true }
|
||||
uv-client = { workspace = true }
|
||||
uv-configuration = { workspace = true }
|
||||
uv-dispatch = { workspace = true }
|
||||
uv-distribution = { workspace = true }
|
||||
uv-distribution-types = { workspace = true }
|
||||
uv-extract = { workspace = true }
|
||||
uv-extract = { workspace = true, optional = true }
|
||||
uv-install-wheel = { workspace = true }
|
||||
uv-pep440 = { 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
|
||||
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-bench).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-bench).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-bin-install"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { workspace = true }
|
||||
rust-version = { workspace = true }
|
||||
|
|
@ -20,6 +20,7 @@ uv-cache = { workspace = true }
|
|||
uv-client = { workspace = true }
|
||||
uv-distribution-filename = { workspace = true }
|
||||
uv-extract = { workspace = true }
|
||||
uv-fs = { workspace = true }
|
||||
uv-pep440 = { workspace = true }
|
||||
uv-platform = { 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
|
||||
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-bin-install).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-bin-install).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -19,9 +19,10 @@ use tracing::debug;
|
|||
use url::Url;
|
||||
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_extract::{Error as ExtractError, stream};
|
||||
use uv_fs::LockedFileError;
|
||||
use uv_pep440::Version;
|
||||
use uv_platform::Platform;
|
||||
use uv_redacted::DisplaySafeUrl;
|
||||
|
|
@ -136,7 +137,7 @@ pub enum Error {
|
|||
Io(#[from] std::io::Error),
|
||||
|
||||
#[error(transparent)]
|
||||
Cache(#[from] CacheError),
|
||||
LockedFile(#[from] LockedFileError),
|
||||
|
||||
#[error("Failed to detect platform")]
|
||||
Platform(#[from] uv_platform::Error),
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-build-backend"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-build-backend).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-build-backend).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -599,7 +599,7 @@ mod tests {
|
|||
/// platform-independent deterministic builds.
|
||||
#[test]
|
||||
fn built_by_uv_building() {
|
||||
let built_by_uv = Path::new("../../test/packages/built-by-uv");
|
||||
let built_by_uv = Path::new("../../scripts/packages/built-by-uv");
|
||||
let src = TempDir::new().unwrap();
|
||||
for dir in [
|
||||
"src",
|
||||
|
|
@ -662,7 +662,7 @@ mod tests {
|
|||
// Check that the source dist is reproducible across platforms.
|
||||
assert_snapshot!(
|
||||
format!("{:x}", sha2::Sha256::digest(fs_err::read(&source_dist_path).unwrap())),
|
||||
@"bb74bff575b135bb39e5c9bce56349441fb0923bb8857e32a5eaf34ec1843967"
|
||||
@"871d1f859140721b67cbeaca074e7a2740c88c38028d0509eba87d1285f1da9e"
|
||||
);
|
||||
// Check both the files we report and the actual files
|
||||
assert_snapshot!(format_file_list(build.source_dist_list_files, src.path()), @r"
|
||||
|
|
|
|||
|
|
@ -70,9 +70,6 @@ pub struct BuildBackendSettings {
|
|||
pub default_excludes: bool,
|
||||
|
||||
/// Glob expressions which files and directories to exclude from the source distribution.
|
||||
///
|
||||
/// These exclusions are also applied to wheels to ensure that a wheel built from a source tree
|
||||
/// is consistent with a wheel built from a source distribution.
|
||||
#[option(
|
||||
default = r#"[]"#,
|
||||
value_type = "list[str]",
|
||||
|
|
|
|||
|
|
@ -299,10 +299,6 @@ impl TarGzWriter {
|
|||
impl DirectoryWriter for TarGzWriter {
|
||||
fn write_bytes(&mut self, path: &str, bytes: &[u8]) -> Result<(), Error> {
|
||||
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);
|
||||
// Reasonable default to avoid 0o000 permissions, the user's umask will be applied on
|
||||
// unpacking.
|
||||
|
|
@ -316,10 +312,6 @@ impl DirectoryWriter for TarGzWriter {
|
|||
fn write_file(&mut self, path: &str, file: &Path) -> Result<(), Error> {
|
||||
let metadata = fs_err::metadata(file)?;
|
||||
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
|
||||
#[cfg(unix)]
|
||||
let executable_bit = {
|
||||
|
|
|
|||
|
|
@ -840,7 +840,7 @@ mod test {
|
|||
#[test]
|
||||
fn test_prepare_metadata() {
|
||||
let metadata_dir = TempDir::new().unwrap();
|
||||
let built_by_uv = Path::new("../../test/packages/built-by-uv");
|
||||
let built_by_uv = Path::new("../../scripts/packages/built-by-uv");
|
||||
metadata(built_by_uv, metadata_dir.path(), "1.0.0+test").unwrap();
|
||||
|
||||
let mut files: Vec<_> = WalkDir::new(metadata_dir.path())
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-build-frontend"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-build-frontend).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-build-frontend).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-build"
|
||||
version = "0.9.18"
|
||||
version = "0.9.16"
|
||||
description = "A Python build backend"
|
||||
edition = { workspace = true }
|
||||
rust-version = { workspace = true }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[project]
|
||||
name = "uv-build"
|
||||
version = "0.9.18"
|
||||
version = "0.9.16"
|
||||
description = "The uv build backend"
|
||||
authors = [{ name = "Astral Software Inc.", email = "hey@astral.sh" }]
|
||||
requires-python = ">=3.8"
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-cache-info"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-cache-info).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-cache-info).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-cache-key"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-cache-key).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-cache-key).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-cache"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { workspace = true }
|
||||
rust-version = { workspace = true }
|
||||
|
|
@ -34,6 +34,5 @@ rustc-hash = { workspace = true }
|
|||
same-file = { workspace = true }
|
||||
serde = { workspace = true, features = ["derive"] }
|
||||
tempfile = { workspace = true }
|
||||
thiserror = { workspace = true }
|
||||
tracing = { 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
|
||||
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-cache).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-cache).
|
||||
|
||||
See uv's
|
||||
[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 crate::Cache;
|
||||
use clap::{Parser, ValueHint};
|
||||
use clap::Parser;
|
||||
use tracing::{debug, warn};
|
||||
|
||||
#[derive(Parser, Debug, Clone)]
|
||||
|
|
@ -27,7 +27,7 @@ pub struct CacheArgs {
|
|||
/// `%LOCALAPPDATA%\uv\cache` on Windows.
|
||||
///
|
||||
/// 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>,
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -35,17 +35,6 @@ mod wheel;
|
|||
/// Must be kept in-sync with the version in [`CacheBucket::to_str`].
|
||||
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.
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct CacheEntry(PathBuf);
|
||||
|
|
@ -91,14 +80,14 @@ impl CacheEntry {
|
|||
}
|
||||
|
||||
/// 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())?;
|
||||
Ok(LockedFile::acquire(
|
||||
LockedFile::acquire(
|
||||
self.path(),
|
||||
LockedFileMode::Exclusive,
|
||||
self.path().display(),
|
||||
)
|
||||
.await?)
|
||||
.await
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -125,14 +114,14 @@ impl CacheShard {
|
|||
}
|
||||
|
||||
/// 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())?;
|
||||
Ok(LockedFile::acquire(
|
||||
LockedFile::acquire(
|
||||
self.join(".lock"),
|
||||
LockedFileMode::Exclusive,
|
||||
self.display(),
|
||||
)
|
||||
.await?)
|
||||
.await
|
||||
}
|
||||
|
||||
/// Return the [`CacheShard`] as a [`PathBuf`].
|
||||
|
|
@ -402,7 +391,7 @@ impl Cache {
|
|||
}
|
||||
|
||||
/// 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.
|
||||
fs_err::create_dir_all(root)?;
|
||||
|
||||
|
|
@ -452,7 +441,7 @@ impl Cache {
|
|||
}
|
||||
|
||||
/// Initialize the [`Cache`].
|
||||
pub async fn init(self) -> Result<Self, Error> {
|
||||
pub async fn init(self) -> Result<Self, LockedFileError> {
|
||||
let root = &self.root;
|
||||
|
||||
Self::create_base_files(root)?;
|
||||
|
|
@ -477,18 +466,18 @@ impl Cache {
|
|||
);
|
||||
None
|
||||
}
|
||||
Err(err) => return Err(err.into()),
|
||||
Err(err) => return Err(err),
|
||||
};
|
||||
|
||||
Ok(Self {
|
||||
root: std::path::absolute(root).map_err(Error::Absolute)?,
|
||||
root: std::path::absolute(root)?,
|
||||
lock_file,
|
||||
..self
|
||||
})
|
||||
}
|
||||
|
||||
/// 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;
|
||||
|
||||
Self::create_base_files(root)?;
|
||||
|
|
@ -502,7 +491,7 @@ impl Cache {
|
|||
return Ok(None);
|
||||
};
|
||||
Ok(Some(Self {
|
||||
root: std::path::absolute(root).map_err(Error::Absolute)?,
|
||||
root: std::path::absolute(root)?,
|
||||
lock_file: Some(Arc::new(lock_file)),
|
||||
..self
|
||||
}))
|
||||
|
|
@ -542,7 +531,7 @@ impl Cache {
|
|||
/// Remove a package 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.
|
||||
let references = self.find_archive_references()?;
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-cli"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-cli).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-cli).
|
||||
|
||||
See uv's
|
||||
[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(),
|
||||
),
|
||||
link_mode,
|
||||
torch_backend: None,
|
||||
no_build: flag(no_build, build, "build"),
|
||||
no_build_package: Some(no_build_package),
|
||||
no_binary: flag(no_binary, binary, "binary"),
|
||||
|
|
@ -496,6 +495,5 @@ pub fn resolver_installer_options(
|
|||
Some(no_binary_package)
|
||||
},
|
||||
no_sources: if no_sources { Some(true) } else { None },
|
||||
torch_backend: None,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-client"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-client).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-client).
|
||||
|
||||
See uv's
|
||||
[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.
|
||||
///
|
||||
/// 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.
|
||||
#[derive(Debug, Clone, Copy, Default)]
|
||||
|
|
@ -104,8 +104,6 @@ pub enum RedirectPolicy {
|
|||
BypassMiddleware,
|
||||
/// Handle redirects manually, re-triggering our custom middleware for each request.
|
||||
RetriggerMiddleware,
|
||||
/// No redirect for non-cloneable (e.g., streaming) requests with custom redirect logic.
|
||||
NoRedirect,
|
||||
}
|
||||
|
||||
impl RedirectPolicy {
|
||||
|
|
@ -113,7 +111,6 @@ impl RedirectPolicy {
|
|||
match self {
|
||||
Self::BypassMiddleware => reqwest::redirect::Policy::default(),
|
||||
Self::RetriggerMiddleware => reqwest::redirect::Policy::none(),
|
||||
Self::NoRedirect => reqwest::redirect::Policy::none(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -732,7 +729,6 @@ impl RedirectClientWithMiddleware {
|
|||
match self.redirect_policy {
|
||||
RedirectPolicy::BypassMiddleware => self.client.execute(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::path::PathBuf;
|
||||
|
||||
use uv_cache::Error as CacheError;
|
||||
use uv_distribution_filename::{WheelFilename, WheelFilenameError};
|
||||
use uv_fs::LockedFileError;
|
||||
use uv_normalize::PackageName;
|
||||
use uv_redacted::DisplaySafeUrl;
|
||||
|
||||
|
|
@ -339,7 +339,7 @@ pub enum ErrorKind {
|
|||
CacheWrite(#[source] std::io::Error),
|
||||
|
||||
#[error("Failed to acquire lock on the client cache")]
|
||||
CacheLock(#[source] CacheError),
|
||||
CacheLock(#[source] LockedFileError),
|
||||
|
||||
#[error(transparent)]
|
||||
Io(std::io::Error),
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
pub use base_client::{
|
||||
AuthIntegration, BaseClient, BaseClientBuilder, DEFAULT_MAX_REDIRECTS, DEFAULT_RETRIES,
|
||||
ExtraMiddleware, RedirectClientWithMiddleware, RedirectPolicy, RequestBuilder,
|
||||
RetryParsingError, UvRetryableStrategy, is_transient_network_error,
|
||||
AuthIntegration, BaseClient, BaseClientBuilder, DEFAULT_RETRIES, ExtraMiddleware,
|
||||
RedirectClientWithMiddleware, RequestBuilder, RetryParsingError, UvRetryableStrategy,
|
||||
is_transient_network_error,
|
||||
};
|
||||
pub use cached_client::{CacheControl, CachedClient, CachedClientError, DataWithCachePolicy};
|
||||
pub use error::{Error, ErrorKind, WrappedReqwestError};
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-configuration"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-configuration).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-configuration).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -94,32 +94,3 @@ wheels/
|
|||
# Virtual environments
|
||||
.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]
|
||||
name = "uv-console"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-console).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-console).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-dev"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
publish = false
|
||||
|
||||
|
|
@ -79,4 +79,4 @@ performance-memory-allocator = ["dep:uv-performance-memory-allocator"]
|
|||
render = ["poloto", "resvg", "tagu"]
|
||||
|
||||
[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
|
||||
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-dev).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-dev).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -342,3 +342,31 @@ fn emit_possible_options(opt: &clap::Arg, output: &mut String) {
|
|||
output.push_str(&markdown::to_html(&value));
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::env;
|
||||
|
||||
use anyhow::Result;
|
||||
|
||||
use uv_static::EnvVars;
|
||||
|
||||
use crate::generate_all::Mode;
|
||||
|
||||
use super::{Args, main};
|
||||
|
||||
#[test]
|
||||
fn test_generate_cli_reference() -> Result<()> {
|
||||
// Skip this test in CI to avoid redundancy with the dedicated CI job
|
||||
if env::var_os(EnvVars::CI).is_some() {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let mode = if env::var(EnvVars::UV_UPDATE_SCHEMA).as_deref() == Ok("1") {
|
||||
Mode::Write
|
||||
} else {
|
||||
Mode::Check
|
||||
};
|
||||
main(&Args { mode })
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -106,3 +106,31 @@ fn render(var: &str, doc: &str, added_in: Option<&str>) -> String {
|
|||
format!("### `{var}`\n\n{doc}\n\n")
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::env;
|
||||
|
||||
use anyhow::Result;
|
||||
|
||||
use uv_static::EnvVars;
|
||||
|
||||
use crate::generate_all::Mode;
|
||||
|
||||
use super::{Args, main};
|
||||
|
||||
#[test]
|
||||
fn test_generate_env_vars_reference() -> Result<()> {
|
||||
// Skip this test in CI to avoid redundancy with the dedicated CI job
|
||||
if env::var_os(EnvVars::CI).is_some() {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let mode = if env::var(EnvVars::UV_UPDATE_SCHEMA).as_deref() == Ok("1") {
|
||||
Mode::Write
|
||||
} else {
|
||||
Mode::Check
|
||||
};
|
||||
main(&Args { mode })
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -387,3 +387,31 @@ impl Visit for CollectOptionsVisitor {
|
|||
self.fields.push((name.to_owned(), field));
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use std::env;
|
||||
|
||||
use anyhow::Result;
|
||||
|
||||
use uv_static::EnvVars;
|
||||
|
||||
use crate::generate_all::Mode;
|
||||
|
||||
use super::{Args, main};
|
||||
|
||||
#[test]
|
||||
fn test_generate_options_reference() -> Result<()> {
|
||||
// Skip this test in CI to avoid redundancy with the dedicated CI job
|
||||
if env::var_os(EnvVars::CI).is_some() {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
let mode = if env::var(EnvVars::UV_UPDATE_SCHEMA).as_deref() == Ok("1") {
|
||||
Mode::Write
|
||||
} else {
|
||||
Mode::Check
|
||||
};
|
||||
main(&Args { mode })
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@ use crate::ROOT_DIR;
|
|||
use crate::generate_all::Mode;
|
||||
|
||||
/// Contains current supported targets
|
||||
const TARGETS_YML_URL: &str = "https://raw.githubusercontent.com/astral-sh/python-build-standalone/refs/tags/20251209/cpython-unix/targets.yml";
|
||||
const TARGETS_YML_URL: &str = "https://raw.githubusercontent.com/astral-sh/python-build-standalone/refs/tags/20251205/cpython-unix/targets.yml";
|
||||
|
||||
#[derive(clap::Args)]
|
||||
pub(crate) struct Args {
|
||||
|
|
@ -130,7 +130,7 @@ async fn generate() -> Result<String> {
|
|||
output.push_str("//! DO NOT EDIT\n");
|
||||
output.push_str("//!\n");
|
||||
output.push_str("//! Generated with `cargo run dev generate-sysconfig-metadata`\n");
|
||||
output.push_str("//! Targets from <https://github.com/astral-sh/python-build-standalone/blob/20251209/cpython-unix/targets.yml>\n");
|
||||
output.push_str("//! Targets from <https://github.com/astral-sh/python-build-standalone/blob/20251205/cpython-unix/targets.yml>\n");
|
||||
output.push_str("//!\n");
|
||||
|
||||
// Disable clippy/fmt
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-dirs"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-dirs).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-dirs).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-dispatch"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-dispatch).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-dispatch).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-distribution-filename"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-distribution-filename).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-distribution-filename).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-distribution-types"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-distribution-types).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-distribution-types).
|
||||
|
||||
See uv's
|
||||
[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),
|
||||
}
|
||||
|
||||
impl<'a> InstalledVersion<'a> {
|
||||
impl InstalledVersion<'_> {
|
||||
/// If it is a URL, return its value.
|
||||
pub fn url(&self) -> Option<&'a DisplaySafeUrl> {
|
||||
pub fn url(&self) -> Option<&DisplaySafeUrl> {
|
||||
match self {
|
||||
Self::Version(_) => None,
|
||||
Self::Url(url, _) => Some(url),
|
||||
|
|
@ -169,7 +169,7 @@ impl<'a> InstalledVersion<'a> {
|
|||
}
|
||||
|
||||
/// If it is a version, return its value.
|
||||
pub fn version(&self) -> &'a Version {
|
||||
pub fn version(&self) -> &Version {
|
||||
match self {
|
||||
Self::Version(version) => version,
|
||||
Self::Url(_, version) => version,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-distribution"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-distribution).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-distribution).
|
||||
|
||||
See uv's
|
||||
[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 crate::metadata::MetadataError;
|
||||
use uv_cache::Error as CacheError;
|
||||
use uv_client::WrappedReqwestError;
|
||||
use uv_distribution_filename::{WheelFilename, WheelFilenameError};
|
||||
use uv_distribution_types::{InstalledDist, InstalledDistError, IsBuildBackendError};
|
||||
use uv_fs::Simplified;
|
||||
use uv_fs::{LockedFileError, Simplified};
|
||||
use uv_git::GitError;
|
||||
use uv_normalize::PackageName;
|
||||
use uv_pep440::{Version, VersionSpecifiers};
|
||||
|
|
@ -43,7 +42,7 @@ pub enum Error {
|
|||
#[error("Failed to write to the distribution cache")]
|
||||
CacheWrite(#[source] std::io::Error),
|
||||
#[error("Failed to acquire lock on the distribution cache")]
|
||||
CacheLock(#[source] CacheError),
|
||||
CacheLock(#[source] LockedFileError),
|
||||
#[error("Failed to deserialize cache entry")]
|
||||
CacheDecode(#[from] rmp_serde::decode::Error),
|
||||
#[error("Failed to serialize cache entry")]
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-extract"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-extract).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-extract).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-flags"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-flags).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-flags).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-fs"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-fs).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-fs).
|
||||
|
||||
See uv's
|
||||
[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::path::{Path, PathBuf};
|
||||
use std::sync::LazyLock;
|
||||
|
|
@ -60,18 +59,10 @@ pub enum LockedFileError {
|
|||
source: io::Error,
|
||||
},
|
||||
#[error(transparent)]
|
||||
Io(#[from] io::Error),
|
||||
#[error(transparent)]
|
||||
#[cfg(feature = "tokio")]
|
||||
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 {
|
||||
|
|
@ -81,8 +72,6 @@ impl LockedFileError {
|
|||
#[cfg(feature = "tokio")]
|
||||
Self::JoinError(_) => None,
|
||||
Self::Lock { source, .. } => Some(source),
|
||||
Self::CreateTemporary(err) => Some(err),
|
||||
Self::PersistTemporary { source, .. } => Some(source),
|
||||
Self::Io(err) => Some(err),
|
||||
}
|
||||
}
|
||||
|
|
@ -212,7 +201,7 @@ impl LockedFile {
|
|||
mode: LockedFileMode,
|
||||
resource: impl Display,
|
||||
) -> Result<Self, LockedFileError> {
|
||||
let file = Self::create(&path)?;
|
||||
let file = Self::create(path)?;
|
||||
let resource = resource.to_string();
|
||||
Self::lock_file(file, mode, &resource).await
|
||||
}
|
||||
|
|
@ -233,25 +222,10 @@ impl LockedFile {
|
|||
}
|
||||
|
||||
#[cfg(unix)]
|
||||
fn create(path: impl AsRef<Path>) -> Result<fs_err::File, LockedFileError> {
|
||||
use rustix::io::Errno;
|
||||
#[allow(clippy::disallowed_types)]
|
||||
use std::{fs::File, os::unix::fs::PermissionsExt};
|
||||
fn create(path: impl AsRef<Path>) -> Result<fs_err::File, std::io::Error> {
|
||||
use std::os::unix::fs::PermissionsExt;
|
||||
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 let Ok(file) = fs_err::OpenOptions::new()
|
||||
.read(true)
|
||||
|
|
@ -264,12 +238,16 @@ impl LockedFile {
|
|||
// Otherwise, create a temporary file with 666 permissions. We must set
|
||||
// permissions _after_ creating the file, to override the `umask`.
|
||||
let file = if let Some(parent) = path.as_ref().parent() {
|
||||
NamedTempFile::new_in(parent)
|
||||
NamedTempFile::new_in(parent)?
|
||||
} 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
|
||||
match file.persist_noclobber(path.as_ref()) {
|
||||
|
|
@ -280,60 +258,20 @@ impl LockedFile {
|
|||
.read(true)
|
||||
.write(true)
|
||||
.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 {
|
||||
let temp_path = err.file.into_temp_path();
|
||||
Err(LockedFileError::PersistTemporary {
|
||||
path: <tempfile::TempPath as AsRef<Path>>::as_ref(&temp_path).to_path_buf(),
|
||||
source: err.error,
|
||||
})
|
||||
Err(err.error)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[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()
|
||||
.read(true)
|
||||
.write(true)
|
||||
.create(true)
|
||||
.open(path.as_ref())
|
||||
.map_err(Into::into)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-git-types"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-git-types).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-git-types).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-git"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-git).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-git).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-globfilter"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
readme = "README.md"
|
||||
edition = { workspace = true }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-install-wheel"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
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
|
||||
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-install-wheel).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-install-wheel).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-installer"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-installer).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-installer).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-keyring"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { workspace = true }
|
||||
rust-version = { workspace = true }
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-logging"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-logging).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-logging).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-macros"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-macros).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-macros).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-metadata"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-metadata).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-metadata).
|
||||
|
||||
See uv's
|
||||
[crate versioning policy](https://docs.astral.sh/uv/reference/policies/versioning/#crate-versioning)
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
[package]
|
||||
name = "uv-normalize"
|
||||
version = "0.0.8"
|
||||
version = "0.0.6"
|
||||
description = "This is an internal component crate of uv"
|
||||
edition = { 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
|
||||
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-normalize).
|
||||
This version (0.0.6) is a component of [uv 0.9.16](https://crates.io/crates/uv/0.9.16). The source
|
||||
can be found [here](https://github.com/astral-sh/uv/blob/0.9.16/crates/uv-normalize).
|
||||
|
||||
See uv's
|
||||
[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