Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package python-uv for openSUSE:Factory checked in at 2025-08-12 17:05:16 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-uv (Old) and /work/SRC/openSUSE:Factory/.python-uv.new.1085 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-uv" Tue Aug 12 17:05:16 2025 rev:41 rq:1298991 version:0.8.9 Changes: -------- --- /work/SRC/openSUSE:Factory/python-uv/python-uv.changes 2025-08-09 20:06:48.195733968 +0200 +++ /work/SRC/openSUSE:Factory/.python-uv.new.1085/python-uv.changes 2025-08-12 17:06:59.905335770 +0200 @@ -1,0 +2,13 @@ +Tue Aug 12 09:30:49 UTC 2025 - Ondřej Súkup <mimi...@gmail.com> + +- update to 0.8.9 + * Enhancements + * Add --reinstall flag to uv python upgrade + * Bug fixes + * Include build settings in cache key for registry source distribution lookups + * Avoid creating bin links on uv python upgrade if they don't already exist + * Respect system proxies on macOS and Windows + * Documentation + * Add the 3.14 classifier + +------------------------------------------------------------------- Old: ---- python-uv-0.8.8.tar.gz New: ---- python-uv-0.8.9.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-uv.spec ++++++ --- /var/tmp/diff_new_pack.OWHQ0p/_old 2025-08-12 17:07:01.601406619 +0200 +++ /var/tmp/diff_new_pack.OWHQ0p/_new 2025-08-12 17:07:01.605406786 +0200 @@ -33,7 +33,7 @@ %bcond_without libalternatives %{?sle15_python_module_pythons} Name: python-uv -Version: 0.8.8 +Version: 0.8.9 Release: 0 Summary: A Python package installer and resolver, written in Rust License: Apache-2.0 OR MIT ++++++ python-uv-0.8.8.tar.gz -> python-uv-0.8.9.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/.github/workflows/ci.yml new/uv-0.8.9/.github/workflows/ci.yml --- old/uv-0.8.8/.github/workflows/ci.yml 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/.github/workflows/ci.yml 2025-08-12 04:07:59.000000000 +0200 @@ -221,7 +221,7 @@ with: persist-credentials: false - - uses: rui314/setup-mold@702b1908b5edf30d71a8d1666b724e0f0c6fa035 # v1 + - uses: rui314/setup-mold@7344740a9418dcdcb481c7df83d9fbd1d5072d7d # v1 - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2.8.0 @@ -259,7 +259,7 @@ with: persist-credentials: false - - uses: rui314/setup-mold@702b1908b5edf30d71a8d1666b724e0f0c6fa035 # v1 + - uses: rui314/setup-mold@7344740a9418dcdcb481c7df83d9fbd1d5072d7d # v1 - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2.8.0 @@ -493,7 +493,7 @@ with: persist-credentials: false - - uses: rui314/setup-mold@702b1908b5edf30d71a8d1666b724e0f0c6fa035 # v1 + - uses: rui314/setup-mold@7344740a9418dcdcb481c7df83d9fbd1d5072d7d # v1 - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2.8.0 @@ -520,7 +520,7 @@ with: persist-credentials: false - - uses: rui314/setup-mold@702b1908b5edf30d71a8d1666b724e0f0c6fa035 # v1 + - uses: rui314/setup-mold@7344740a9418dcdcb481c7df83d9fbd1d5072d7d # v1 - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2.8.0 @@ -547,7 +547,7 @@ with: persist-credentials: false - - uses: rui314/setup-mold@702b1908b5edf30d71a8d1666b724e0f0c6fa035 # v1 + - uses: rui314/setup-mold@7344740a9418dcdcb481c7df83d9fbd1d5072d7d # v1 - name: "Setup musl" run: | @@ -579,7 +579,7 @@ with: persist-credentials: false - - uses: rui314/setup-mold@702b1908b5edf30d71a8d1666b724e0f0c6fa035 # v1 + - uses: rui314/setup-mold@7344740a9418dcdcb481c7df83d9fbd1d5072d7d # v1 - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2.8.0 - name: "Build" @@ -605,7 +605,7 @@ with: persist-credentials: false - - uses: rui314/setup-mold@702b1908b5edf30d71a8d1666b724e0f0c6fa035 # v1 + - uses: rui314/setup-mold@7344740a9418dcdcb481c7df83d9fbd1d5072d7d # v1 - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2.8.0 - name: "Build" @@ -716,7 +716,7 @@ env: MSRV: ${{ steps.msrv.outputs.value }} - name: "Install mold" - uses: rui314/setup-mold@702b1908b5edf30d71a8d1666b724e0f0c6fa035 # v1 + uses: rui314/setup-mold@7344740a9418dcdcb481c7df83d9fbd1d5072d7d # v1 - uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 # v2.8.0 - run: cargo +${MSRV} build env: @@ -1695,7 +1695,7 @@ credentials_json: "${{ secrets.GCP_SERVICE_ACCOUNT_KEY }}" - name: "Set up GCP SDK" - uses: "google-github-actions/setup-gcloud@6a7c903a70c8625ed6700fa299f5ddb4ca6022e9" + uses: "google-github-actions/setup-gcloud@cb1e50a9932213ecece00a606661ae9ca44f3397" - name: "Get GCP Artifact Registry token" id: get_token diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/.pre-commit-config.yaml new/uv-0.8.9/.pre-commit-config.yaml --- old/uv-0.8.8/.pre-commit-config.yaml 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/.pre-commit-config.yaml 2025-08-12 04:07:59.000000000 +0200 @@ -12,7 +12,7 @@ - id: validate-pyproject - repo: https://github.com/crate-ci/typos - rev: v1.34.0 + rev: v1.35.3 hooks: - id: typos @@ -42,7 +42,7 @@ types_or: [yaml, json5] - repo: https://github.com/astral-sh/ruff-pre-commit - rev: v0.12.7 + rev: v0.12.8 hooks: - id: ruff-format - id: ruff diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/CHANGELOG.md new/uv-0.8.9/CHANGELOG.md --- old/uv-0.8.8/CHANGELOG.md 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/CHANGELOG.md 2025-08-12 04:07:59.000000000 +0200 @@ -3,6 +3,22 @@ <!-- prettier-ignore-start --> +## 0.8.9 + +### Enhancements + +- Add `--reinstall` flag to `uv python upgrade` ([#15194](https://github.com/astral-sh/uv/pull/15194)) + +### Bug fixes + +- Include build settings in cache key for registry source distribution lookups ([#15225](https://github.com/astral-sh/uv/pull/15225)) +- Avoid creating bin links on `uv python upgrade` if they don't already exist ([#15192](https://github.com/astral-sh/uv/pull/15192)) +- Respect system proxies on macOS and Windows ([#15221](https://github.com/astral-sh/uv/pull/15221)) + +### Documentation + +- Add the 3.14 classifier ([#15187](https://github.com/astral-sh/uv/pull/15187)) + ## 0.8.8 ### Bug fixes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/Cargo.lock new/uv-0.8.9/Cargo.lock --- old/uv-0.8.8/Cargo.lock 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/Cargo.lock 2025-08-12 04:07:59.000000000 +0200 @@ -40,9 +40,9 @@ [[package]] name = "anstream" -version = "0.6.19" +version = "0.6.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "301af1932e46185686725e0fad2f8f2aa7da69dd70bf6ecc44d6b703844a3933" +checksum = "3ae563653d1938f79b1ab1b5e668c87c76a9930414574a6583a7b7e11a8e6192" dependencies = [ "anstyle", "anstyle-parse", @@ -523,7 +523,7 @@ checksum = "c95ec8b2485b20aed818bd7460f8eecc6c87c35c84191b353a3aba9aa1736c36" dependencies = [ "anyhow", - "core-foundation", + "core-foundation 0.10.1", "filetime", "hex", "ignore", @@ -607,9 +607,9 @@ [[package]] name = "clap" -version = "4.5.42" +version = "4.5.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ed87a9d530bb41a67537289bafcac159cb3ee28460e0a4571123d2a778a6a882" +checksum = "50fd97c9dc2399518aa331917ac6f274280ec5eb34e555dd291899745c48ec6f" dependencies = [ "clap_builder", "clap_derive", @@ -617,9 +617,9 @@ [[package]] name = "clap_builder" -version = "4.5.42" +version = "4.5.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "64f4f3f3c77c94aff3c7e9aac9a2ca1974a5adf392a8bb751e827d6d127ab966" +checksum = "c35b5830294e1fa0462034af85cc95225a4cb07092c088c55bda3147cfcd8f65" dependencies = [ "anstream", "anstyle", @@ -794,6 +794,16 @@ [[package]] name = "core-foundation" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "91e195e091a93c46f7102ec7818a2aa394e1e1771c3ab4825963fa03e45afb8f" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] +name = "core-foundation" version = "0.10.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b2a6cd9ae233e7f62ba4e9353e81a88df7fc8a5987b8d445b4d90c879bd156f6" @@ -1148,7 +1158,7 @@ checksum = "778e2ac28f6c47af28e4907f13ffd1e1ddbd400980a9abd7c8df189bf578a5ad" dependencies = [ "libc", - "windows-sys 0.60.2", + "windows-sys 0.52.0", ] [[package]] @@ -1549,9 +1559,9 @@ [[package]] name = "hashbrown" -version = "0.15.4" +version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5971ac85611da7067dbfcabef3c70ebb5606018acd9e2a3903a0da507521e0d5" +checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ "allocator-api2", "equivalent", @@ -1716,9 +1726,11 @@ "percent-encoding", "pin-project-lite", "socket2 0.5.10", + "system-configuration", "tokio", "tower-service", "tracing", + "windows-registry", ] [[package]] @@ -1868,7 +1880,7 @@ checksum = "fe4cd85333e22411419a0bcae1297d25e58c9443848b11dc6a86fefe8c78a661" dependencies = [ "equivalent", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "serde", ] @@ -2594,7 +2606,7 @@ checksum = "54acf3a685220b533e437e264e4d932cfbdc4cc7ec0cd232ed73c08d03b8a7ca" dependencies = [ "fixedbitset", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "indexmap", "serde", ] @@ -3234,7 +3246,7 @@ dependencies = [ "bytecheck", "bytes", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "indexmap", "munge", "ptr_meta", @@ -3352,7 +3364,7 @@ "errno", "libc", "linux-raw-sys 0.9.4", - "windows-sys 0.60.2", + "windows-sys 0.52.0", ] [[package]] @@ -3513,7 +3525,7 @@ checksum = "271720403f46ca04f7ba6f55d438f8bd878d6b8ca0a1046e8228c4145bcbb316" dependencies = [ "bitflags 2.9.1", - "core-foundation", + "core-foundation 0.10.1", "core-foundation-sys", "libc", "security-framework-sys", @@ -3902,6 +3914,27 @@ ] [[package]] +name = "system-configuration" +version = "0.6.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3c879d448e9d986b661742763247d3693ed13609438cf3d006f51f5368a5ba6b" +dependencies = [ + "bitflags 2.9.1", + "core-foundation 0.9.4", + "system-configuration-sys", +] + +[[package]] +name = "system-configuration-sys" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8e1d1b10ced5ca923a1fcb8d03e96b8d3268065d724548c0211415ff6ac6bac4" +dependencies = [ + "core-foundation-sys", + "libc", +] + +[[package]] name = "tagu" version = "0.1.6" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -4655,7 +4688,7 @@ [[package]] name = "uv" -version = "0.8.8" +version = "0.8.9" dependencies = [ "anstream", "anyhow", @@ -4824,7 +4857,7 @@ [[package]] name = "uv-build" -version = "0.8.8" +version = "0.8.9" dependencies = [ "anyhow", "uv-build-backend", @@ -5637,7 +5670,7 @@ version = "0.0.1" dependencies = [ "anyhow", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "indexmap", "insta", "itertools 0.14.0", @@ -5814,7 +5847,7 @@ "dashmap", "either", "futures", - "hashbrown 0.15.4", + "hashbrown 0.15.5", "indexmap", "insta", "itertools 0.14.0", @@ -6046,7 +6079,7 @@ [[package]] name = "uv-version" -version = "0.8.8" +version = "0.8.9" [[package]] name = "uv-virtualenv" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/Cargo.toml new/uv-0.8.9/Cargo.toml --- old/uv-0.8.8/Cargo.toml 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/Cargo.toml 2025-08-12 04:07:59.000000000 +0200 @@ -145,7 +145,7 @@ reflink-copy = { version = "0.1.19" } regex = { version = "1.10.6" } regex-automata = { version = "0.4.8", default-features = false, features = ["dfa-build", "dfa-search", "perf", "std", "syntax"] } -reqwest = { version = "0.12.22", default-features = false, features = ["json", "gzip", "deflate", "zstd", "stream", "rustls-tls", "rustls-tls-native-roots", "socks", "multipart", "http2", "blocking"] } +reqwest = { version = "0.12.22", default-features = false, features = ["json", "gzip", "deflate", "zstd", "stream", "system-proxy", "rustls-tls", "rustls-tls-native-roots", "socks", "multipart", "http2", "blocking"] } reqwest-middleware = { git = "https://github.com/astral-sh/reqwest-middleware", rev = "ad8b9d332d1773fde8b4cd008486de5973e0a3f8", features = ["multipart"] } reqwest-retry = { git = "https://github.com/astral-sh/reqwest-middleware", rev = "ad8b9d332d1773fde8b4cd008486de5973e0a3f8" } rkyv = { version = "0.8.8", features = ["bytecheck"] } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv/Cargo.toml new/uv-0.8.9/crates/uv/Cargo.toml --- old/uv-0.8.8/crates/uv/Cargo.toml 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv/Cargo.toml 2025-08-12 04:07:59.000000000 +0200 @@ -1,6 +1,6 @@ [package] name = "uv" -version = "0.8.8" +version = "0.8.9" edition = { workspace = true } rust-version = { workspace = true } homepage = { workspace = true } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv/src/commands/python/install.rs new/uv-0.8.9/crates/uv/src/commands/python/install.rs --- old/uv-0.8.8/crates/uv/src/commands/python/install.rs 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv/src/commands/python/install.rs 2025-08-12 04:07:59.000000000 +0200 @@ -764,6 +764,9 @@ for target in targets { let target = bin.join(target); + if upgrade && !target.try_exists().unwrap_or_default() { + continue; + } let executable = if upgradeable { if let Some(minor_version_link) = PythonMinorVersionLink::from_installation(installation, preview) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv/src/lib.rs new/uv-0.8.9/crates/uv/src/lib.rs --- old/uv-0.8.8/crates/uv/src/lib.rs 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv/src/lib.rs 2025-08-12 04:07:59.000000000 +0200 @@ -1437,14 +1437,13 @@ // Resolve the settings from the command-line arguments and workspace configuration. let args = settings::PythonUpgradeSettings::resolve(args, filesystem); show_settings!(args); - let reinstall = false; let upgrade = true; commands::python_install( &project_dir, args.install_dir, args.targets, - reinstall, + args.reinstall, upgrade, args.bin, args.registry, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv/src/settings.rs new/uv-0.8.9/crates/uv/src/settings.rs --- old/uv-0.8.8/crates/uv/src/settings.rs 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv/src/settings.rs 2025-08-12 04:07:59.000000000 +0200 @@ -1019,6 +1019,7 @@ pub(crate) registry: Option<bool>, pub(crate) python_install_mirror: Option<String>, pub(crate) pypy_install_mirror: Option<String>, + pub(crate) reinstall: bool, pub(crate) python_downloads_json_url: Option<String>, pub(crate) default: bool, pub(crate) bin: Option<bool>, @@ -1051,6 +1052,7 @@ targets, mirror: _, pypy_mirror: _, + reinstall, python_downloads_json_url: _, } = args; @@ -1061,6 +1063,7 @@ registry, python_install_mirror: python_mirror, pypy_install_mirror: pypy_mirror, + reinstall, python_downloads_json_url, default, bin, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv/tests/it/pip_install.rs new/uv-0.8.9/crates/uv/tests/it/pip_install.rs --- old/uv-0.8.8/crates/uv/tests/it/pip_install.rs 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv/tests/it/pip_install.rs 2025-08-12 04:07:59.000000000 +0200 @@ -3927,7 +3927,6 @@ ----- stderr ----- Resolved 1 package in [TIME] - Prepared 1 package in [TIME] Installed 1 package in [TIME] + iniconfig==2.0.0 " diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv/tests/it/python_install.rs new/uv-0.8.9/crates/uv/tests/it/python_install.rs --- old/uv-0.8.8/crates/uv/tests/it/python_install.rs 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv/tests/it/python_install.rs 2025-08-12 04:07:59.000000000 +0200 @@ -2340,6 +2340,7 @@ "cpython-3.12.*.tar.gz", "cpython-3.12.[PATCH]-[DATE]-[PLATFORM].tar.gz", )); + filters.push((r"releases/download/\d{8}/", "releases/download/[DATE]/")); uv_snapshot!(filters, context .python_install() .arg("3.12") @@ -2350,8 +2351,8 @@ ----- stderr ----- error: Failed to install cpython-3.12.11-[PLATFORM] - Caused by: Failed to download https://github.com/astral-sh/python-build-standalone/releases/download/20250808/cpython-3.12.[PATCH]-[DATE]-[PLATFORM].tar.gz - Caused by: Network connectivity is disabled, but the requested data wasn't found in the cache for: `https://github.com/astral-sh/python-build-standalone/releases/download/20250808/cpython-3.12.[PATCH]-[DATE]-[PLATFORM].tar.gz` + Caused by: Failed to download https://github.com/astral-sh/python-build-standalone/releases/download/[DATE]/cpython-3.12.[PATCH]-[DATE]-[PLATFORM].tar.gz + Caused by: Network connectivity is disabled, but the requested data wasn't found in the cache for: `https://github.com/astral-sh/python-build-standalone/releases/download/[DATE]/cpython-3.12.[PATCH]-[DATE]-[PLATFORM].tar.gz` "); } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv/tests/it/python_module.rs new/uv-0.8.9/crates/uv/tests/it/python_module.rs --- old/uv-0.8.8/crates/uv/tests/it/python_module.rs 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv/tests/it/python_module.rs 2025-08-12 04:07:59.000000000 +0200 @@ -384,6 +384,61 @@ } #[test] +fn find_uv_bin_error_message() { + let context = TestContext::new("3.12") + .with_filtered_python_names() + .with_filtered_virtualenv_bin() + .with_filtered_exe_suffix() + .with_filter(user_scheme_bin_filter()) + // Target installs always use "bin" on all platforms. On Windows, + // `with_filtered_virtualenv_bin` only filters "Scripts", not "bin" + .with_filter((r"[\\/]bin".to_string(), "/[BIN]".to_string())); + + // Install in a virtual environment + uv_snapshot!(context.filters(), context.pip_install() + .arg(context.workspace_root.join("scripts/packages/fake-uv")), @r" + success: true + exit_code: 0 + ----- stdout ----- + + ----- stderr ----- + Resolved 1 package in [TIME] + Prepared 1 package in [TIME] + Installed 1 package in [TIME] + + uv==0.1.0 (from file://[WORKSPACE]/scripts/packages/fake-uv) + " + ); + + // Remove the virtual environment executable for some reason + fs_err::remove_file(if cfg!(unix) { + context.venv.child("bin").child("uv") + } else { + context.venv.child("Scripts").child("uv.exe") + }) + .unwrap(); + + uv_snapshot!(context.filters(), context.python_command() + .arg("-c") + .arg("import uv; print(uv.find_uv_bin())"), @r#" + success: false + exit_code: 1 + ----- stdout ----- + + ----- stderr ----- + Traceback (most recent call last): + File "<string>", line 1, in <module> + File "[SITE_PACKAGES]/uv/_find_uv.py", line 50, in find_uv_bin + raise UvNotFound( + uv._find_uv.UvNotFound: Could not find the uv binary in any of the following locations: + - [VENV]/[BIN] + - [PYTHON-BIN-3.12] + - [SITE_PACKAGES]/[BIN] + - [USER_SCHEME]/[BIN] + "# + ); +} + +#[test] fn find_uv_bin_py38() { let context = TestContext::new("3.8") .with_filtered_python_names() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv/tests/it/python_upgrade.rs new/uv-0.8.9/crates/uv/tests/it/python_upgrade.rs --- old/uv-0.8.8/crates/uv/tests/it/python_upgrade.rs 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv/tests/it/python_upgrade.rs 2025-08-12 04:07:59.000000000 +0200 @@ -52,6 +52,17 @@ ----- stderr ----- "); + + // Should reinstall on `--reinstall` + uv_snapshot!(context.filters(), context.python_upgrade().arg("--preview").arg("3.10").arg("--reinstall"), @r" + success: true + exit_code: 0 + ----- stdout ----- + + ----- stderr ----- + Installed Python 3.10.18 in [TIME] + ~ cpython-3.10.18-[PLATFORM] (python3.10) + "); } #[test] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv-build/Cargo.toml new/uv-0.8.9/crates/uv-build/Cargo.toml --- old/uv-0.8.8/crates/uv-build/Cargo.toml 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv-build/Cargo.toml 2025-08-12 04:07:59.000000000 +0200 @@ -1,6 +1,6 @@ [package] name = "uv-build" -version = "0.8.8" +version = "0.8.9" edition = { workspace = true } rust-version = { workspace = true } homepage = { workspace = true } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv-build/pyproject.toml new/uv-0.8.9/crates/uv-build/pyproject.toml --- old/uv-0.8.8/crates/uv-build/pyproject.toml 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv-build/pyproject.toml 2025-08-12 04:07:59.000000000 +0200 @@ -1,6 +1,6 @@ [project] name = "uv-build" -version = "0.8.8" +version = "0.8.9" description = "The uv build backend" authors = [{ name = "Astral Software Inc.", email = "h...@astral.sh" }] requires-python = ">=3.8" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv-cli/src/lib.rs new/uv-0.8.9/crates/uv-cli/src/lib.rs --- old/uv-0.8.8/crates/uv-cli/src/lib.rs 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv-cli/src/lib.rs 2025-08-12 04:07:59.000000000 +0200 @@ -5196,6 +5196,13 @@ #[arg(long, env = EnvVars::UV_PYPY_INSTALL_MIRROR)] pub pypy_mirror: Option<String>, + /// Reinstall the latest Python patch, if it's already installed. + /// + /// By default, uv will exit successfully if the latest patch is already + /// installed. + #[arg(long, short)] + pub reinstall: bool, + /// URL pointing to JSON of custom Python installations. /// /// Note that currently, only local paths are supported. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv-dev/src/generate_sysconfig_mappings.rs new/uv-0.8.9/crates/uv-dev/src/generate_sysconfig_mappings.rs --- old/uv-0.8.8/crates/uv-dev/src/generate_sysconfig_mappings.rs 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv-dev/src/generate_sysconfig_mappings.rs 2025-08-12 04:07:59.000000000 +0200 @@ -11,7 +11,7 @@ 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/20250807/cpython-unix/targets.yml"; +const TARGETS_YML_URL: &str = "https://raw.githubusercontent.com/astral-sh/python-build-standalone/refs/tags/20250808/cpython-unix/targets.yml"; #[derive(clap::Args)] pub(crate) struct Args { @@ -130,7 +130,7 @@ 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/20250807/cpython-unix/targets.yml>\n"); + output.push_str("//! Targets from <https://github.com/astral-sh/python-build-standalone/blob/20250808/cpython-unix/targets.yml>\n"); output.push_str("//!\n"); // Disable clippy/fmt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv-distribution/src/index/registry_wheel_index.rs new/uv-0.8.9/crates/uv-distribution/src/index/registry_wheel_index.rs --- old/uv-0.8.8/crates/uv-distribution/src/index/registry_wheel_index.rs 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv-distribution/src/index/registry_wheel_index.rs 2025-08-12 04:07:59.000000000 +0200 @@ -1,11 +1,15 @@ +use std::borrow::Cow; use std::collections::hash_map::Entry; use rustc_hash::{FxHashMap, FxHashSet}; use uv_cache::{Cache, CacheBucket, WheelCache}; use uv_cache_key::cache_digest; -use uv_configuration::ConfigSettings; -use uv_distribution_types::{CachedRegistryDist, Hashed, Index, IndexLocations, IndexUrl}; +use uv_configuration::{ConfigSettings, PackageConfigSettings}; +use uv_distribution_types::{ + BuildVariables, CachedRegistryDist, ExtraBuildRequirement, ExtraBuildRequires, + ExtraBuildVariables, Hashed, Index, IndexLocations, IndexUrl, +}; use uv_fs::{directories, files}; use uv_normalize::PackageName; use uv_platform_tags::Tags; @@ -33,7 +37,10 @@ index_locations: &'a IndexLocations, hasher: &'a HashStrategy, index: FxHashMap<&'a PackageName, Vec<IndexEntry<'a>>>, - build_configuration: &'a ConfigSettings, + config_settings: &'a ConfigSettings, + config_settings_package: &'a PackageConfigSettings, + extra_build_requires: &'a ExtraBuildRequires, + extra_build_variables: &'a ExtraBuildVariables, } impl<'a> RegistryWheelIndex<'a> { @@ -43,14 +50,20 @@ tags: &'a Tags, index_locations: &'a IndexLocations, hasher: &'a HashStrategy, - build_configuration: &'a ConfigSettings, + config_settings: &'a ConfigSettings, + config_settings_package: &'a PackageConfigSettings, + extra_build_requires: &'a ExtraBuildRequires, + extra_build_variables: &'a ExtraBuildVariables, ) -> Self { Self { cache, tags, index_locations, hasher, - build_configuration, + config_settings, + config_settings_package, + extra_build_requires, + extra_build_variables, index: FxHashMap::default(), } } @@ -72,7 +85,10 @@ self.tags, self.index_locations, self.hasher, - self.build_configuration, + self.config_settings, + self.config_settings_package, + self.extra_build_requires, + self.extra_build_variables, )), }) as _ } @@ -84,7 +100,10 @@ tags: &Tags, index_locations: &'index IndexLocations, hasher: &HashStrategy, - build_configuration: &ConfigSettings, + config_settings: &ConfigSettings, + config_settings_package: &PackageConfigSettings, + extra_build_requires: &ExtraBuildRequires, + extra_build_variables: &ExtraBuildVariables, ) -> Vec<IndexEntry<'index>> { let mut entries = vec![]; @@ -198,10 +217,26 @@ let cache_shard = cache_shard.shard(revision.id()); // If there are build settings, we need to scope to a cache shard. - let cache_shard = if build_configuration.is_empty() { + let extra_build_deps = + Self::extra_build_requires_for(package, extra_build_requires); + let extra_build_vars = + Self::extra_build_variables_for(package, extra_build_variables); + let config_settings = Self::config_settings_for( + package, + config_settings, + config_settings_package, + ); + let cache_shard = if config_settings.is_empty() + && extra_build_deps.is_empty() + && extra_build_vars.is_none() + { cache_shard } else { - cache_shard.shard(cache_digest(build_configuration)) + cache_shard.shard(cache_digest(&( + &config_settings, + extra_build_deps, + extra_build_vars, + ))) }; for wheel_dir in uv_fs::entries(cache_shard).ok().into_iter().flatten() { @@ -252,4 +287,36 @@ entries } + + /// Determine the [`ConfigSettings`] for the given package name. + fn config_settings_for<'settings>( + name: &PackageName, + config_settings: &'settings ConfigSettings, + config_settings_package: &PackageConfigSettings, + ) -> Cow<'settings, ConfigSettings> { + if let Some(package_settings) = config_settings_package.get(name) { + Cow::Owned(package_settings.clone().merge(config_settings.clone())) + } else { + Cow::Borrowed(config_settings) + } + } + + /// Determine the extra build requirements for the given package name. + fn extra_build_requires_for<'settings>( + name: &PackageName, + extra_build_requires: &'settings ExtraBuildRequires, + ) -> &'settings [ExtraBuildRequirement] { + extra_build_requires + .get(name) + .map(Vec::as_slice) + .unwrap_or(&[]) + } + + /// Determine the extra build variables for the given package name. + fn extra_build_variables_for<'settings>( + name: &PackageName, + extra_build_variables: &'settings ExtraBuildVariables, + ) -> Option<&'settings BuildVariables> { + extra_build_variables.get(name) + } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv-installer/src/plan.rs new/uv-0.8.9/crates/uv-installer/src/plan.rs --- old/uv-0.8.8/crates/uv-installer/src/plan.rs 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv-installer/src/plan.rs 2025-08-12 04:07:59.000000000 +0200 @@ -64,8 +64,16 @@ tags: &Tags, ) -> Result<Plan> { // Index all the already-downloaded wheels in the cache. - let mut registry_index = - RegistryWheelIndex::new(cache, tags, index_locations, hasher, config_settings); + let mut registry_index = RegistryWheelIndex::new( + cache, + tags, + index_locations, + hasher, + config_settings, + config_settings_package, + extra_build_requires, + extra_build_variables, + ); let built_index = BuiltWheelIndex::new( cache, tags, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv-python/src/sysconfig/generated_mappings.rs new/uv-0.8.9/crates/uv-python/src/sysconfig/generated_mappings.rs --- old/uv-0.8.8/crates/uv-python/src/sysconfig/generated_mappings.rs 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv-python/src/sysconfig/generated_mappings.rs 2025-08-12 04:07:59.000000000 +0200 @@ -1,7 +1,7 @@ //! DO NOT EDIT //! //! Generated with `cargo run dev generate-sysconfig-metadata` -//! Targets from <https://github.com/astral-sh/python-build-standalone/blob/20250807/cpython-unix/targets.yml> +//! Targets from <https://github.com/astral-sh/python-build-standalone/blob/20250808/cpython-unix/targets.yml> //! #![allow(clippy::all)] #![cfg_attr(any(), rustfmt::skip)] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/crates/uv-version/Cargo.toml new/uv-0.8.9/crates/uv-version/Cargo.toml --- old/uv-0.8.8/crates/uv-version/Cargo.toml 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/crates/uv-version/Cargo.toml 2025-08-12 04:07:59.000000000 +0200 @@ -1,6 +1,6 @@ [package] name = "uv-version" -version = "0.8.8" +version = "0.8.9" edition = { workspace = true } rust-version = { workspace = true } homepage = { workspace = true } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/docs/concepts/build-backend.md new/uv-0.8.9/docs/concepts/build-backend.md --- old/uv-0.8.8/docs/concepts/build-backend.md 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/docs/concepts/build-backend.md 2025-08-12 04:07:59.000000000 +0200 @@ -31,7 +31,7 @@ ```toml title="pyproject.toml" [build-system] -requires = ["uv_build>=0.8.8,<0.9.0"] +requires = ["uv_build>=0.8.9,<0.9.0"] build-backend = "uv_build" ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/docs/concepts/projects/init.md new/uv-0.8.9/docs/concepts/projects/init.md --- old/uv-0.8.8/docs/concepts/projects/init.md 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/docs/concepts/projects/init.md 2025-08-12 04:07:59.000000000 +0200 @@ -111,7 +111,7 @@ example-pkg = "example_pkg:main" [build-system] -requires = ["uv_build>=0.8.8,<0.9.0"] +requires = ["uv_build>=0.8.9,<0.9.0"] build-backend = "uv_build" ``` @@ -134,7 +134,7 @@ example-pkg = "example_pkg:main" [build-system] -requires = ["uv_build>=0.8.8,<0.9.0"] +requires = ["uv_build>=0.8.9,<0.9.0"] build-backend = "uv_build" ``` @@ -195,7 +195,7 @@ dependencies = [] [build-system] -requires = ["uv_build>=0.8.8,<0.9.0"] +requires = ["uv_build>=0.8.9,<0.9.0"] build-backend = "uv_build" ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/docs/concepts/projects/workspaces.md new/uv-0.8.9/docs/concepts/projects/workspaces.md --- old/uv-0.8.8/docs/concepts/projects/workspaces.md 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/docs/concepts/projects/workspaces.md 2025-08-12 04:07:59.000000000 +0200 @@ -75,7 +75,7 @@ members = ["packages/*"] [build-system] -requires = ["uv_build>=0.8.8,<0.9.0"] +requires = ["uv_build>=0.8.9,<0.9.0"] build-backend = "uv_build" ``` @@ -106,7 +106,7 @@ members = ["packages/*"] [build-system] -requires = ["uv_build>=0.8.8,<0.9.0"] +requires = ["uv_build>=0.8.9,<0.9.0"] build-backend = "uv_build" ``` @@ -188,7 +188,7 @@ bird-feeder = { path = "packages/bird-feeder" } [build-system] -requires = ["uv_build>=0.8.8,<0.9.0"] +requires = ["uv_build>=0.8.9,<0.9.0"] build-backend = "uv_build" ``` diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/docs/getting-started/installation.md new/uv-0.8.9/docs/getting-started/installation.md --- old/uv-0.8.8/docs/getting-started/installation.md 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/docs/getting-started/installation.md 2025-08-12 04:07:59.000000000 +0200 @@ -25,7 +25,7 @@ Request a specific version by including it in the URL: ```console - $ curl -LsSf https://astral.sh/uv/0.8.8/install.sh | sh + $ curl -LsSf https://astral.sh/uv/0.8.9/install.sh | sh ``` === "Windows" @@ -41,7 +41,7 @@ Request a specific version by including it in the URL: ```pwsh-session - PS> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.8.8/install.ps1 | iex" + PS> powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/0.8.9/install.ps1 | iex" ``` !!! tip diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/docs/guides/integration/aws-lambda.md new/uv-0.8.9/docs/guides/integration/aws-lambda.md --- old/uv-0.8.8/docs/guides/integration/aws-lambda.md 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/docs/guides/integration/aws-lambda.md 2025-08-12 04:07:59.000000000 +0200 @@ -92,7 +92,7 @@ other unnecessary files. ```dockerfile title="Dockerfile" -FROM ghcr.io/astral-sh/uv:0.8.8 AS uv +FROM ghcr.io/astral-sh/uv:0.8.9 AS uv # First, bundle the dependencies into the task root. FROM public.ecr.aws/lambda/python:3.13 AS builder @@ -334,7 +334,7 @@ Finally, we'll update the Dockerfile to include the local library in the deployment package: ```dockerfile title="Dockerfile" -FROM ghcr.io/astral-sh/uv:0.8.8 AS uv +FROM ghcr.io/astral-sh/uv:0.8.9 AS uv # First, bundle the dependencies into the task root. FROM public.ecr.aws/lambda/python:3.13 AS builder diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/docs/guides/integration/docker.md new/uv-0.8.9/docs/guides/integration/docker.md --- old/uv-0.8.8/docs/guides/integration/docker.md 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/docs/guides/integration/docker.md 2025-08-12 04:07:59.000000000 +0200 @@ -31,7 +31,7 @@ The following distroless images are available: - `ghcr.io/astral-sh/uv:latest` -- `ghcr.io/astral-sh/uv:{major}.{minor}.{patch}`, e.g., `ghcr.io/astral-sh/uv:0.8.8` +- `ghcr.io/astral-sh/uv:{major}.{minor}.{patch}`, e.g., `ghcr.io/astral-sh/uv:0.8.9` - `ghcr.io/astral-sh/uv:{major}.{minor}`, e.g., `ghcr.io/astral-sh/uv:0.8` (the latest patch version) @@ -75,7 +75,7 @@ As with the distroless image, each derived image is published with uv version tags as `ghcr.io/astral-sh/uv:{major}.{minor}.{patch}-{base}` and -`ghcr.io/astral-sh/uv:{major}.{minor}-{base}`, e.g., `ghcr.io/astral-sh/uv:0.8.8-alpine`. +`ghcr.io/astral-sh/uv:{major}.{minor}-{base}`, e.g., `ghcr.io/astral-sh/uv:0.8.9-alpine`. In addition, starting with `0.8` each derived image also sets `UV_TOOL_BIN_DIR` to `/usr/local/bin` to allow `uv tool install` to work as expected with the default user. @@ -116,7 +116,7 @@ In either case, it is best practice to pin to a specific uv version, e.g., with: ```dockerfile -COPY --from=ghcr.io/astral-sh/uv:0.8.8 /uv /uvx /bin/ +COPY --from=ghcr.io/astral-sh/uv:0.8.9 /uv /uvx /bin/ ``` !!! tip @@ -134,7 +134,7 @@ Or, with the installer: ```dockerfile -ADD https://astral.sh/uv/0.8.8/install.sh /uv-installer.sh +ADD https://astral.sh/uv/0.8.9/install.sh /uv-installer.sh ``` ### Installing a project @@ -560,5 +560,5 @@ !!! tip These examples use `latest`, but best practice is to verify the attestation for a specific - version tag, e.g., `ghcr.io/astral-sh/uv:0.8.8`, or (even better) the specific image digest, + version tag, e.g., `ghcr.io/astral-sh/uv:0.8.9`, or (even better) the specific image digest, such as `ghcr.io/astral-sh/uv:0.5.27@sha256:5adf09a5a526f380237408032a9308000d14d5947eafa687ad6c6a2476787b4f`. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/docs/guides/integration/github.md new/uv-0.8.9/docs/guides/integration/github.md --- old/uv-0.8.8/docs/guides/integration/github.md 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/docs/guides/integration/github.md 2025-08-12 04:07:59.000000000 +0200 @@ -47,7 +47,7 @@ uses: astral-sh/setup-uv@v6 with: # Install a specific version of uv. - version: "0.8.8" + version: "0.8.9" ``` ## Setting up Python diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/docs/guides/integration/pre-commit.md new/uv-0.8.9/docs/guides/integration/pre-commit.md --- old/uv-0.8.8/docs/guides/integration/pre-commit.md 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/docs/guides/integration/pre-commit.md 2025-08-12 04:07:59.000000000 +0200 @@ -19,7 +19,7 @@ repos: - repo: https://github.com/astral-sh/uv-pre-commit # uv version. - rev: 0.8.8 + rev: 0.8.9 hooks: - id: uv-lock ``` @@ -30,7 +30,7 @@ repos: - repo: https://github.com/astral-sh/uv-pre-commit # uv version. - rev: 0.8.8 + rev: 0.8.9 hooks: - id: uv-export ``` @@ -41,7 +41,7 @@ repos: - repo: https://github.com/astral-sh/uv-pre-commit # uv version. - rev: 0.8.8 + rev: 0.8.9 hooks: # Compile requirements - id: pip-compile @@ -54,7 +54,7 @@ repos: - repo: https://github.com/astral-sh/uv-pre-commit # uv version. - rev: 0.8.8 + rev: 0.8.9 hooks: # Compile requirements - id: pip-compile @@ -68,7 +68,7 @@ repos: - repo: https://github.com/astral-sh/uv-pre-commit # uv version. - rev: 0.8.8 + rev: 0.8.9 hooks: # Compile requirements - id: pip-compile diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/docs/reference/cli.md new/uv-0.8.9/docs/reference/cli.md --- old/uv-0.8.8/docs/reference/cli.md 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/docs/reference/cli.md 2025-08-12 04:07:59.000000000 +0200 @@ -2970,6 +2970,8 @@ <p>Note that currently, only local paths are supported.</p> <p>May also be set with the <code>UV_PYTHON_DOWNLOADS_JSON_URL</code> environment variable.</p></dd><dt id="uv-python-upgrade--quiet"><a href="#uv-python-upgrade--quiet"><code>--quiet</code></a>, <code>-q</code></dt><dd><p>Use quiet output.</p> <p>Repeating this option, e.g., <code>-qq</code>, will enable a silent mode in which uv will write no output to stdout.</p> +</dd><dt id="uv-python-upgrade--reinstall"><a href="#uv-python-upgrade--reinstall"><code>--reinstall</code></a>, <code>-r</code></dt><dd><p>Reinstall the latest Python patch, if it's already installed.</p> +<p>By default, uv will exit successfully if the latest patch is already installed.</p> </dd><dt id="uv-python-upgrade--verbose"><a href="#uv-python-upgrade--verbose"><code>--verbose</code></a>, <code>-v</code></dt><dd><p>Use verbose output.</p> <p>You can configure fine-grained logging using the <code>RUST_LOG</code> environment variable. (<a href="https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html#directives">https://docs.rs/tracing-subscriber/latest/tracing_subscriber/filter/struct.EnvFilter.html#directives</a>)</p> </dd></dl> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/pyproject.toml new/uv-0.8.9/pyproject.toml --- old/uv-0.8.8/pyproject.toml 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/pyproject.toml 2025-08-12 04:07:59.000000000 +0200 @@ -4,7 +4,7 @@ [project] name = "uv" -version = "0.8.8" +version = "0.8.9" description = "An extremely fast Python package and project manager, written in Rust." authors = [{ name = "Astral Software Inc.", email = "h...@astral.sh" }] requires-python = ">=3.8" @@ -25,6 +25,7 @@ "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", "Programming Language :: Python :: 3 :: Only", "Topic :: Software Development :: Quality Assurance", "Topic :: Software Development :: Testing", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/python/ruff.toml new/uv-0.8.9/python/ruff.toml --- old/uv-0.8.8/python/ruff.toml 1970-01-01 01:00:00.000000000 +0100 +++ new/uv-0.8.9/python/ruff.toml 2025-08-12 04:07:59.000000000 +0200 @@ -0,0 +1,2 @@ +# It is important to retain compatibility here. +target-version = "py37" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/uv-0.8.8/python/uv/_find_uv.py new/uv-0.8.9/python/uv/_find_uv.py --- old/uv-0.8.8/python/uv/_find_uv.py 2025-08-09 02:03:07.000000000 +0200 +++ new/uv-0.8.9/python/uv/_find_uv.py 2025-08-12 04:07:59.000000000 +0200 @@ -76,11 +76,7 @@ if not all( fnmatch(part, match_part) - for part, match_part in ( - zip(reversed(parts), reversed(match_parts), strict=False) - if sys.version_info >= (3, 10) - else zip(reversed(parts), reversed(match_parts)) # noqa: B905 - ) + for part, match_part in zip(reversed(parts), reversed(match_parts)) ): return None ++++++ vendor.tar.zst ++++++ /work/SRC/openSUSE:Factory/python-uv/vendor.tar.zst /work/SRC/openSUSE:Factory/.python-uv.new.1085/vendor.tar.zst differ: char 7, line 1