diff options
author | CoprDistGit <copr-devel@lists.fedorahosted.org> | 2024-08-01 01:32:15 +0000 |
---|---|---|
committer | CoprDistGit <copr-devel@lists.fedorahosted.org> | 2024-08-01 01:32:15 +0000 |
commit | 0cfa522575215cbbefe1546c247fd78d3d6901e2 (patch) | |
tree | 34c246db7aad59b6502f4b61ec1926a1e242db46 | |
parent | ef58f7969477be672e838ee5b61df10e295d1e44 (diff) |
-rw-r--r-- | .gitignore | 2 | ||||
-rw-r--r-- | sources | 4 | ||||
-rw-r--r-- | uv.spec | 223 |
3 files changed, 188 insertions, 41 deletions
@@ -2,3 +2,5 @@ /reqwest-middleware-21ceec9a5fd2e8d6f71c3ea2999078fecbd13cbe.tar.gz /rs-async-zip-1dcb40cfe1bf5325a6fd4bfcf9894db40241f585.tar.gz /uv-0.2.28.tar.gz +/rs-async-zip-011b24604fa7bc223daaad7712c0694bac8f0a87.tar.gz +/uv-0.2.32.tar.gz @@ -1,4 +1,4 @@ e10adeb004da3f471ee02c93bcecfd6d pubgrub-3f0ba760951ab0deeac874b98bb18fc90103fcf7.tar.gz 34e48db5297f5bf37aa295c1483b5bd7 reqwest-middleware-21ceec9a5fd2e8d6f71c3ea2999078fecbd13cbe.tar.gz -ace275d6a7321175a4a936271a04bae4 rs-async-zip-1dcb40cfe1bf5325a6fd4bfcf9894db40241f585.tar.gz -275c837337b3d826c802d1f83bc38a0a uv-0.2.28.tar.gz +8c19ddf4af3028cdf673047486755482 rs-async-zip-011b24604fa7bc223daaad7712c0694bac8f0a87.tar.gz +2e14255fe538896eff8adc542a1071ae uv-0.2.32.tar.gz @@ -1,14 +1,41 @@ %bcond check 1 Name: uv -Version: 0.2.28 +Version: 0.2.32 Release: %autorelease Summary: An extremely fast Python package installer and resolver, written in Rust -# The license of the uv project is (MIT OR Apache-2.0); Rust crates compiled -# into the executable contribute additional license terms. To obtain the -# following list of licenses, build the package and note the output of -# %%{cargo_license_summary}. +# The license of the uv project is (MIT OR Apache-2.0), except: +# +# - crates/pep440-rs/ is vendored and forked from crate(pep440_rs) and is +# (Apache-2.0 OR BSD-2-Clause). +# - crates/pep508-rs/ is vendored and forked from crate(pep508_rs) and is +# (Apache-2.0 OR BSD-2-Clause). +# - crates/uv-extract/src/vendor/cloneable_seekable_reader.rs is vendored and +# forked from crate(ripunzip) and is (Apache-2.0 OR MIT) +# - The function wheel_metadata_from_remote_zip in +# crates/uv-client/src/remote_metadata.rs is vendored and forked from the +# function lazy_read_wheel_metadata in src/index/lazy_metadata.rs in +# crate(rattler_installs_packages) and is BSD-3-Clause AND (Apache-2.0 OR +# MIT): the original routine is BSD-3-CLause, and subsequent modifications +# are explicitly (Apache-2.0 OR MIT). +# - crates/uv-python/packaging/ is vendored and forked from +# python3dist(packaging) and is (Apache-2.0 OR BSD-2-Clause). +# - crates/uv-virtualenv/src/activator/ is vendored and forked from +# python3dist(virtualenv) and is MIT. +# Additionally, the following are believed not to contribute to the licenses of +# the binary RPMs: +# - crates/uv-python/fetch-download-metadata.py is derived from +# https://github.com/mitsuhiko/rye/tree/f9822267a7f00332d15be8551f89a212e7bc9017 +# which was MIT. +# +# Rust crates compiled into the executable contribute additional license terms. +# To obtain the following list of licenses, build the package and note the +# output of %%{cargo_license_summary}. This should automatically include the +# licenses of the following bundled forks: +# - async_zip, Source100, is MIT. +# - pubgrub, Source200, is MPL-2.0. +# - reqwest-middleware/reqwest-retry, Source300, is (MIT OR Apache-2.0) # # (Apache-2.0 OR MIT) AND BSD-3-Clause # (MIT OR Apache-2.0) AND Unicode-DFS-2016 @@ -69,10 +96,10 @@ Source0: %{url}/archive/%{version}/uv-%{version}.tar.gz # We therefore bundle the fork as prescribed in # https://docs.fedoraproject.org/en-US/packaging-guidelines/Rust/#_replacing_git_dependencies %global async_zip_git https://github.com/charliermarsh/rs-async-zip -%global async_zip_rev 1dcb40cfe1bf5325a6fd4bfcf9894db40241f585 +%global async_zip_rev 011b24604fa7bc223daaad7712c0694bac8f0a87 %global async_zip_baseversion 0.0.17 -%global async_zip_snapdate 20240403 -Source1: %{async_zip_git}/archive/%{async_zip_rev}/rs-async-zip-%{async_zip_rev}.tar.gz +%global async_zip_snapdate 20240729 +Source100: %{async_zip_git}/archive/%{async_zip_rev}/rs-async-zip-%{async_zip_rev}.tar.gz # For the foreseeable future, uv must use a fork of pubgrub, as explained in: # Plans for eventually using published pubgrub? @@ -83,7 +110,7 @@ Source1: %{async_zip_git}/archive/%{async_zip_rev}/rs-async-zip-%{async_z %global pubgrub_rev 3f0ba760951ab0deeac874b98bb18fc90103fcf7 %global pubgrub_baseversion 0.2.1 %global pubgrub_snapdate 20240715 -Source2: %{pubgrub_git}/archive/%{pubgrub_rev}/pubgrub-%{pubgrub_rev}.tar.gz +Source200: %{pubgrub_git}/archive/%{pubgrub_rev}/pubgrub-%{pubgrub_rev}.tar.gz # Similarly, uv now forks reqwest-middleware/reqwest-retry with an incompatible # change, as described in @@ -93,6 +120,7 @@ Source2: %{pubgrub_git}/archive/%{pubgrub_rev}/pubgrub-%{pubgrub_rev}.tar # The path to no longer bundling these crates is: # Add retries to error message # https://github.com/TrueLayer/reqwest-middleware/pull/159 +# See also: https://github.com/astral-sh/uv/issues/5588#issuecomment-2257474183 # For now, we must bundle the fork as prescribed in # https://docs.fedoraproject.org/en-US/packaging-guidelines/Rust/#_replacing_git_dependencies %global reqwest_middleware_git https://github.com/astral-sh/reqwest-middleware @@ -100,13 +128,17 @@ Source2: %{pubgrub_git}/archive/%{pubgrub_rev}/pubgrub-%{pubgrub_rev}.tar %global reqwest_middleware_baseversion 0.3.2 %global reqwest_middleware_snapdate 20240701 %global reqwest_retry_baseversion 0.7.0 -Source3: %{reqwest_middleware_git}/archive/%{reqwest_middleware_rev}/reqwest-middleware-%{reqwest_middleware_rev}.tar.gz +Source300: %{reqwest_middleware_git}/archive/%{reqwest_middleware_rev}/reqwest-middleware-%{reqwest_middleware_rev}.tar.gz # Downstream-only: do not override the default allocator # -# In https://github.com/astral-sh/uv/pull/399, it was reasonably claimed -# that using tikv-jemallocator improved benchmarks by 10%, so it may be -# worth packaging it and dropping this patch. +# In https://github.com/astral-sh/uv/pull/399, it was reasonably claimed that +# using tikv-jemallocator improved benchmarks by 10%. However, this would +# require packaging at least the tikv-jemalloc-sys, tikv-jemalloc-ctl, and +# tikv-jemallocator crates, and this is expected to be not quite trivial. +# Instead of blocking uv packaging on tikv-jemallocator packaging, we use the +# default allocator for now, and reserve tikv-jemallocaator packaging as +# optional future work. Patch: 0001-Downstream-only-do-not-override-the-default-allocato.patch # Downstream-only: Always find the system-wide uv executable @@ -121,7 +153,7 @@ Patch: 0001-Downstream-patch-always-find-the-system-wide-uv-exec.patch # This reverts commit 21c6a215432fea9a75b7d15d9a9936af9ccc17cb. # We will not be packaging an alpha version of rust-ron. We can adjust this # after ron 0.9.x is released. -Patch100: 0001-Downstream-only-Revert-feat-ensure-successful-round-.patch +Patch200: 0001-Downstream-only-Revert-feat-ensure-successful-round-.patch # This patch is for the forked, bundled reqwest-middleware crate. # @@ -132,35 +164,120 @@ Patch100: 0001-Downstream-only-Revert-feat-ensure-successful-round-.patch # it turns out that running doctests would also require the reqwest-tracing # crate, which we do not bundle (and is, as of this writing, not separately # packaged), so the patch is needed here as well. -Patch101: 0001-Downstream-only-do-not-attempt-to-run-doctests-from-.patch +Patch300: 0001-Downstream-only-do-not-attempt-to-run-doctests-from-.patch + +# https://fedoraproject.org/wiki/Changes/EncourageI686LeafRemoval +ExcludeArch: %{ix86} BuildRequires: cargo-rpm-macros >= 24 BuildRequires: rust2rpm-helper BuildRequires: tomcli BuildRequires: python3-devel -# This is a fork of async_zip; see the notes about Source1. +# This is a fork of async_zip; see the notes about Source100. %global async_zip_snapinfo %{async_zip_snapdate}git%{sub %{async_zip_rev} 1 7} %global async_zip_version %{async_zip_baseversion}^%{async_zip_snapinfo} Provides: bundled(crate(async_zip)) = %{async_zip_version} -# This is a fork of pubgrub; see the notes about Source2. +# This is a fork of pubgrub; see the notes about Source200. %global pubgrub_snapinfo %{pubgrub_snapdate}git%{sub %{pubgrub_rev} 1 7} %global pubgrub_version %{pubgrub_baseversion}^%{pubgrub_snapinfo} Provides: bundled(crate(pubgrub)) = %{pubgrub_version} -# This is a fork of reqwest-middleware/reqwest-retry; see the notes about Source3. +# This is a fork of reqwest-middleware/reqwest-retry; see the notes about +# Source300. %global reqwest_middleware_snapinfo %{reqwest_middleware_snapdate}git%{sub %{reqwest_middleware_rev} 1 7} %global reqwest_middleware_version %{reqwest_middleware_baseversion}^%{reqwest_middleware_snapinfo} %global reqwest_retry_version %{reqwest_retry_baseversion}^%{reqwest_middleware_snapinfo} Provides: bundled(crate(reqwest-middleware)) = %{reqwest_middleware_version} Provides: bundled(crate(reqwest-retry)) = %{reqwest_retry_version} +# Paths to using published versions of vendored, forked crates? +# https://github.com/astral-sh/uv/issues/5588 + +# In https://github.com/astral-sh/uv/issues/5588#issuecomment-2257823242, +# upstream writes “These have diverged significantly and the upstream versions +# are only passively maintained, uv requires these custom versions and can't +# use a system copy.” +# +# crates/pep440-rs/ +# Version number from Cargo.toml: +Provides: bundled(crate(pep440_rs)) = 0.6.0 +# crates/pep508-rs/ +# Version number from Cargo.toml: +Provides: bundled(crate(pep508_rs)) = 0.6.0 +# crates/uv-virtualenv/ +# As a whole, this crate is derived from https://github.com/konstin/gourgeist +# 0.0.4, which was published as https://crates.io/crates/gourgeist. It looks +# looks like the project was subsumed into `uv`, and the link to `uv` at +# https://konstin.github.io/gourgeist/ seems to support this, so we consider +# this not to be a real case of bundling, and we do not add: +# Provides: bundled(crate(gourgeist)) = 0.0.4 + +# crates/uv-extract/src/vendor/cloneable_seekable_reader.rs +# Version number is an educated guess based on comparison of file contents, +# cross-checked with timing: the file was first introduced to uv as +# crates/puffin-installer/src/vendor/cloneable_seekable_reader.rs in +# https://github.com/astral-sh/uv/commit/2a846e76b7725633776fd08e04ce8b827bb0580f +# on 2023-10-08, and 0.4.0 was the current release of ripunzip at that time. +Provides: bundled(crate(ripunzip)) = 0.4.0 +# wheel_metadata_from_remote_zip only, in +# crates/uv-client/src/remote_metadata.rs +# Version number is, at the time of this writing, the only release of +# https://github.com/prefix-dev/rip containing the corresponding function +# lazy_read_wheel_metadata in +# (crates/rattler_installs_packages/)src/index/lazy_metadata.rs. +Provides: bundled(crate(rattler_installs_packages)) = 0.9.0 + +# The contents of crates/uv-virtualenv/src/activator/ are a bundled and +# slightly forked copy of a subset of https://pypi.org/project/virtualenv; see +# https://github.com/pypa/virtualenv/tree/main/src/virtualenv/activation. +# +# The same justification for not attempting to unbundle downstream applies as +# for the bundling from python3dist(packaging), below; additionally, some of +# the scripts have been forked. See also: +# https://github.com/astral-sh/uv/issues/5588#issuecomment-2257474140 +# +# The scripts were last updated from virtualenv upstream in +# https://github.com/astral-sh/uv/pull/3376 on 2024-05-04; the latest +# virtualenv release at that time was 20.26.0. +Provides: bundled(python3dist(virtualenv)) = 20.26 + +# The contents of crates/uv-python/python/packaging/ are a bundled copy of a +# subset of https://pypi.org/project/packaging. +# +# This was added in +# https://github.com/astral-sh/uv/commit/7964bfbb2bed50a5c7b0650a7b6799a66503a33a, +# the commit message of which helps explain the rationale. In part: +# +# The architecture of uv does not necessarily match that of the python +# interpreter. In cross compiling/testing scenarios the operating system can +# also mismatch. To solve this, we move arch and os detection to python, +# vendoring the relevant pypa/packaging code, preventing mismatches between +# what the python interpreter was compiled for and what uv was compiled for. +# +# We cannot use the system package directly because these Python sources are +# compiled into the uv executable, and the binary package does not even depend +# on the system Python interpreter. Patching uv to read the sources from the +# system package at runtime would be much too extreme for a downstream change. +# Copying sources from the system package into the build tree is feasible, but +# – especially considering that the sources are not necessarily executed with +# the system Python interpreter – the risks of deviating from upstream’s tested +# sources would seem to greatly outweigh any possible benefits of such +# “build-time unbundling.” We therefore consider this instance of bundling +# technically necessary. See also: +# https://github.com/astral-sh/uv/issues/5588#issuecomment-2257474140 +# +# README.md has the bundled commit hash, __init__.py has the version number, +# and https://github.com/pypa/packaging/tree/${commit} is the source of the +# snapshot date. +Provides: bundled(python3dist(packaging)) = 24.1~dev0^20240310gitcc938f9 + %global common_description %{expand: An extremely fast Python package installer and resolver, written in Rust. Designed as a drop-in replacement for common pip and pip-tools workflows. Highlights: - • ⚖️ Drop-in replacement for common pip, pip-tools, and virtualenv commands. + • ⚖️ Drop-in replacement for common pip, pip-tools, and virtualenv commands. • ⚡️ 10-100x faster than pip and pip-tools (pip-compile and pip-sync). • 💾 Disk-space efficient, with a global cache for dependency deduplication. • 🐍 Installable via curl, pip, pipx, etc. uv is a static binary that can be @@ -169,7 +286,7 @@ Highlights: • 🖥️ Support for macOS, Linux, and Windows. • 🧰 Advanced features such as dependency version overrides and alternative resolution strategies. - • ⁉️ Best-in-class error messages with a conflict-tracking resolver. + • ⁉️ Best-in-class error messages with a conflict-tracking resolver. • 🤝 Support for a wide range of advanced pip features, including editable installs, Git dependencies, direct URL dependencies, local dependencies, constraints, source distributions, HTML and JSON indexes, and more.} @@ -178,7 +295,7 @@ Highlights: %package -n python3-uv -Summary: %{summary} +Summary: Importable Python module for uv BuildArch: noarch @@ -201,12 +318,16 @@ git2path() { tomcli set Cargo.toml str "${1}.path" "${2}" } -# See comments above Source1: -%setup -q -T -D -b 1 -n uv-%{version} +# See comments above Source100: +%setup -q -T -D -b 100 -n uv-%{version} # Adding the crate to the workspace (in this case implicitly, by linking it # under crates/) means %%cargo_generate_buildrequires can handle it correctly. ln -s '../../rs-async-zip-%{async_zip_rev}' crates/async_zip git2path workspace.dependencies.async_zip crates/async_zip +pushd crates/async_zip +%autopatch -p1 -m100 -M199 +popd +install -t LICENSE.bundled/async_zip -D -p -m 0644 crates/async_zip/LICENSE # Drop dev-dependencies that are only required for compiling the # actix-multipart example, and remove it. Note that while “futures” is in this # section of Cargo.toml, it is in fact also used in a test. @@ -216,13 +337,14 @@ tomcli set crates/async_zip/Cargo.toml del dev-dependencies.actix-web tomcli set crates/async_zip/Cargo.toml del dev-dependencies.derive_more tomcli set crates/async_zip/Cargo.toml del dev-dependencies.uuid -# See comments above Source2: -%setup -q -T -D -b 2 -n uv-%{version} +# See comments above Source200: +%setup -q -T -D -b 200 -n uv-%{version} ln -s '../../pubgrub-%{pubgrub_rev}' crates/pubgrub git2path workspace.dependencies.pubgrub crates/pubgrub pushd crates/pubgrub -%patch -p1 100 +%autopatch -p1 -m200 -M299 popd +install -t LICENSE.bundled/pubgrub -D -p -m 0644 crates/pubgrub/LICENSE # Drop a benchmark-only dev-dependency. tomcli set crates/pubgrub/Cargo.toml del dev-dependencies.criterion # Omit tests requiring varisat; it is not packaged and has significant @@ -231,13 +353,15 @@ tomcli set crates/pubgrub/Cargo.toml del dev-dependencies.varisat mv crates/pubgrub/tests/proptest.rs{,.disabled} mv crates/pubgrub/tests/sat_dependency_provider.rs{,.disabled} -# See comments above Source3: -%setup -q -T -D -b 3 -n uv-%{version} +# See comments above Source300: +%setup -q -T -D -b 300 -n uv-%{version} ln -s '../../reqwest-middleware-%{reqwest_middleware_rev}/reqwest-middleware' \ crates/reqwest-middleware pushd crates/reqwest-middleware -%patch -p1 101 +%autopatch -p1 -m300 -M399 popd +install -t LICENSE.bundled/reqwest-middleware -D -p -m 0644 \ + crates/reqwest-middleware/LICENSE-* git2path workspace.dependencies.reqwest-middleware crates/reqwest-middleware git2path patch.crates-io.reqwest-middleware crates/reqwest-middleware # These dev-dependencies are not really needed, are not packaged, and do not @@ -249,12 +373,37 @@ rm -r '../reqwest-middleware-%{reqwest_middleware_rev}/reqwest-tracing' tomcli set crates/reqwest-middleware/Cargo.toml del dev-dependencies.wiremock ln -s '../../reqwest-middleware-%{reqwest_middleware_rev}/reqwest-retry' \ crates/reqwest-retry +install -t LICENSE.bundled/reqwest-retry -D -p -m 0644 \ + crates/reqwest-retry/LICENSE-* git2path workspace.dependencies.reqwest-retry crates/reqwest-retry # * It is not practical to run the tests: # * - wiremock is unpackaged, and requires many other unpackaged crates tomcli set crates/reqwest-retry/Cargo.toml del dev-dependencies.wiremock mv crates/reqwest-retry/tests/all/main.rs{,.disabled} +# Collect license files of vendored dependencies in the main source archive +install -t LICENSE.bundled/packaging -D -p -m 0644 \ + crates/uv-python/python/packaging/LICENSE.* +install -t LICENSE.bundled/pep440_rs -D -p -m 0644 crates/pep440-rs/License-* +install -t LICENSE.bundled/pep508_rs -D -p -m 0644 crates/pep508-rs/License-* +install -t LICENSE.bundled/ripunzip -D -p -m 0644 \ + crates/uv-extract/src/vendor/LICENSE +# The original license text from rattler_installs_packages is present in a +# comment, but we want it in a separate file so we can ensure it is present in +# the binary RPM. +install -d LICENSE.bundled/rattler_installs_packages +awk '$2 == "BSD" { out=1 }; $2 == "```" { out=0 }; out' \ + crates/uv-client/src/remote_metadata.rs | + sed -r 's@^///( |$)@@' | + tee LICENSE.bundled/rattler_installs_packages/LICENSE +# Similarly for virtualenv. All files in +# crates/uv-virtualenv/src/activator/activate/ have the same license text. +install -d LICENSE.bundled/virtualenv +awk '$1 == "#" { out=1 }; $1 != "#" { out=0; exit }; out' \ + crates/uv-virtualenv/src/activator/activate | + sed -r 's@^#( |$)@@' | + tee LICENSE.bundled/virtualenv/LICENSE + # Patch out foreign (e.g. Windows-only) dependencies. Follow symbolic links so # that we also patch the bundled crates we just finished setting up. find -L . -type f -name Cargo.toml -print \ @@ -280,6 +429,10 @@ tomcli set Cargo.toml append workspace.exclude crates/uv-dev tomcli set Cargo.toml lists delitem --first \ workspace.dependencies.reqwest.features 'brotli' +# Do not request static linking of liblzma. +tomcli set crates/uv-extract/Cargo.toml lists delitem \ + dependencies.xz2.features 'static' + # The pypi feature, described as “Introduces a dependency on PyPI,” in practice # controls whether we build and run tests that want to talk to PyPI. In an # offline build, we definitely don’t want that, so we remove it from the @@ -308,13 +461,6 @@ sed -r -i 's/^#\[cfg\(test\)\]/#[cfg(any())]\r&/' \ crates/uv-auth/src/middleware.rs tomcli set crates/uv-auth/Cargo.toml del dev-dependencies.wiremock -%if 0%{?__isa_bits} == 32 -# These tests check zip64 support with files >4GiB, which doesn’t work on -# 32-bit platforms because the file size doesn’t fit in a usize. -mv crates/async_zip/src/tests/write/zip64/mod.rs{,.disabled} -sed -r -i 's@^mod zip64;@// &@' crates/async_zip/src/tests/write/mod.rs -%endif - # For unclear reasons, maturin checks for the presence of optional crate # dependencies that correspond to features we have not enabled. We need to # patch out those that are not packaged, an unfortunate but straightforward @@ -366,7 +512,6 @@ tomcli set Cargo.toml str \ %build -export RUSTFLAGS='%{build_rustflags}' %pyproject_wheel %{cargo_license_summary} @@ -411,7 +556,7 @@ install -Dpm 0644 _uv -t %{buildroot}/%{zsh_completions_dir} # These tests rely on debug assertions, and fail when tests are compiled in # release mode: # -# -p uv-auth --lib: +# cargo test -p uv-auth --lib: skip="${skip-} --skip keyring::test::fetch_url_no_host" skip="${skip-} --skip keyring::test::fetch_url_with_no_username" skip="${skip-} --skip keyring::test::fetch_url_with_password" @@ -423,7 +568,7 @@ skip="${skip-} --skip keyring::test::fetch_url_with_password" %files -%license LICENSE-APACHE LICENSE-MIT LICENSE.dependencies +%license LICENSE-APACHE LICENSE-MIT LICENSE.dependencies LICENSE.bundled/ %doc CHANGELOG.md %doc README.md %doc PIP_COMPATIBILITY.md |