The package rpms/uv.git has added or updated architecture specific content in its spec file (ExclusiveArch/ExcludeArch or %ifarch/%ifnarch) in commit(s): https://src.fedoraproject.org/cgit/rpms/uv.git/commit/?id=b904243dfefafbc438....
Change: +%ifnarch %{x86_64} %{arm64}
Thanks.
Full change: ============
commit b904243dfefafbc438067a4aceb14fad326ff49e Author: Benjamin A. Beasley code@musicinmybrain.net Date: Thu May 29 07:42:25 2025 -0400
Skip python_list::python_list_downloads on less-common architectures
diff --git a/uv.spec b/uv.spec index f64311a..b7e81fb 100644 --- a/uv.spec +++ b/uv.spec @@ -660,6 +660,12 @@ skip="${skip-} --skip keyring::tests::fetch_url_with_password" skip="${skip-} --skip version::self_version" skip="${skip-} --skip version::self_version_json" skip="${skip-} --skip version::self_version_short" +%else +%ifnarch %{x86_64} %{arm64} +# On other architectures, the list of available downloads differs, e.g. pypy +# and graalpy downloads may be missing. +skip="${skip-} --skip python_list::python_list_downloads" +%endif %endif # -p uv-client --test it: # This requires specific Python interpreter versions (so it would be grouped
commit 771ab067c7152a82dee462e149e5c8d49543a6aa Author: Benjamin A. Beasley code@musicinmybrain.net Date: Wed May 28 14:29:31 2025 -0400
No longer need to skip several `help::*` tests
Upstream’s expected output has caught up.
diff --git a/uv.spec b/uv.spec index d85beae..f64311a 100644 --- a/uv.spec +++ b/uv.spec @@ -677,17 +677,6 @@ skip="${skip-} --skip lock::tests::missing_dependency_source_version_unambiguous skip="${skip-} --skip lock::tests::missing_dependency_version_unambiguous" %endif
-# Trivial differences in --help output formatting (whitespace) -skip="${skip-} --skip help::help" -skip="${skip-} --skip help::help_flag" -skip="${skip-} --skip help::help_flag_subcommand" -skip="${skip-} --skip help::help_flag_subsubcommand" -skip="${skip-} --skip help::help_short_flag" -skip="${skip-} --skip help::help_subcommand" -skip="${skip-} --skip help::help_subsubcommand" -skip="${skip-} --skip help::help_with_global_option" -skip="${skip-} --skip help::help_with_no_pager" - # TODO: What’s going wrong here? It doesn’t seem serious… # thread 'middleware::tests::test_tracing_url' panicked at # crates/uv-auth/src/middleware.rs:2095:5:
commit 9556064c25fcd2a578d818274dbc9d290e8264f9 Author: Benjamin A. Beasley code@musicinmybrain.net Date: Wed May 28 07:49:44 2025 -0400
Enable integration tests in Fedora
diff --git a/13699.patch b/13699.patch new file mode 100644 index 0000000..80c256d --- /dev/null +++ b/13699.patch @@ -0,0 +1,764 @@ +From 963441aeea8f9f09912d98f6bd2e772af5b39d61 Mon Sep 17 00:00:00 2001 +From: "Benjamin A. Beasley" code@musicinmybrain.net +Date: Mon, 26 May 2025 08:12:37 -0400 +Subject: [PATCH 1/3] Conditionalize more tests that require PyPI + +--- + crates/uv-client/tests/it/remote_metadata.rs | 1 + + crates/uv/tests/it/branching_urls.rs | 10 ++++++++-- + crates/uv/tests/it/build_backend.rs | 3 +++ + crates/uv/tests/it/pip_check.rs | 3 +++ + crates/uv/tests/it/pip_list.rs | 10 ++++++++++ + crates/uv/tests/it/pip_show.rs | 10 ++++++++++ + crates/uv/tests/it/pip_tree.rs | 19 +++++++++++++++++++ + crates/uv/tests/it/pip_uninstall.rs | 6 ++++++ + crates/uv/tests/it/venv.rs | 2 ++ + crates/uv/tests/it/version.rs | 2 ++ + crates/uv/tests/it/workspace.rs | 14 ++++++++++++++ + 11 files changed, 78 insertions(+), 2 deletions(-) + +diff --git a/crates/uv-client/tests/it/remote_metadata.rs b/crates/uv-client/tests/it/remote_metadata.rs +index 72bc7322238a..95348ffbd4bd 100644 +--- a/crates/uv-client/tests/it/remote_metadata.rs ++++ b/crates/uv-client/tests/it/remote_metadata.rs +@@ -10,6 +10,7 @@ use uv_distribution_types::{BuiltDist, DirectUrlBuiltDist, IndexCapabilities}; + use uv_pep508::VerbatimUrl; + + #[tokio::test] ++#[cfg(feature = "pypi")] + async fn remote_metadata_with_and_without_cache() -> Result<()> { + let cache = Cache::temp()?.init()?; + let client = RegistryClientBuilder::new(cache).build(); +diff --git a/crates/uv/tests/it/branching_urls.rs b/crates/uv/tests/it/branching_urls.rs +index 09c77ef591eb..a02ec0de31d2 100644 +--- a/crates/uv/tests/it/branching_urls.rs ++++ b/crates/uv/tests/it/branching_urls.rs +@@ -14,6 +14,7 @@ use crate::common::{TestContext, make_project, uv_snapshot}; + /// ] + /// ``` + #[test] ++#[cfg(feature = "pypi")] + fn branching_urls_disjoint() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -47,6 +48,7 @@ fn branching_urls_disjoint() -> Result<()> { + /// ] + /// ``` + #[test] ++#[cfg(feature = "pypi")] + fn branching_urls_overlapping() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -83,6 +85,7 @@ fn branching_urls_overlapping() -> Result<()> { + /// a -> b -> b2 -> https://../iniconfig-2.0.0-py3-none-any.whl + /// ``` + #[test] ++#[cfg(feature = "pypi")] + fn root_package_splits_but_transitive_conflict() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -151,6 +154,7 @@ fn root_package_splits_but_transitive_conflict() -> Result<()> { + /// a -> b -> b2 ; python_version >= '3.12' -> https://../iniconfig-2.0.0-py3-none-any.whl + /// ``` + #[test] ++#[cfg(feature = "pypi")] + fn root_package_splits_transitive_too() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -356,6 +360,7 @@ fn root_package_splits_transitive_too() -> Result<()> { + /// a -> b2 ; python_version >= '3.12' -> iniconfig==2.0.0 + /// ``` + #[test] ++#[cfg(feature = "pypi")] + fn root_package_splits_other_dependencies_too() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -539,6 +544,7 @@ fn root_package_splits_other_dependencies_too() -> Result<()> { + /// ] + /// ``` + #[test] ++#[cfg(feature = "pypi")] + fn branching_between_registry_and_direct_url() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -624,7 +630,7 @@ fn branching_between_registry_and_direct_url() -> Result<()> { + /// ] + /// ``` + #[test] +-#[cfg(feature = "git")] ++#[cfg(all(feature = "git", feature = "pypi"))] + fn branching_urls_of_different_sources_disjoint() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -708,7 +714,7 @@ fn branching_urls_of_different_sources_disjoint() -> Result<()> { + /// ] + /// ``` + #[test] +-#[cfg(feature = "git")] ++#[cfg(all(feature = "git", feature = "pypi"))] + fn branching_urls_of_different_sources_conflict() -> Result<()> { + let context = TestContext::new("3.12"); + +diff --git a/crates/uv/tests/it/build_backend.rs b/crates/uv/tests/it/build_backend.rs +index ee4cde32bbd4..ad3caedcea06 100644 +--- a/crates/uv/tests/it/build_backend.rs ++++ b/crates/uv/tests/it/build_backend.rs +@@ -24,6 +24,7 @@ const BUILT_BY_UV_TEST_SCRIPT: &str = indoc! {r#" + /// + /// We can't test end-to-end here including the PEP 517 bridge code since we don't have a uv wheel. + #[test] ++#[cfg(feature = "pypi")] + fn built_by_uv_direct_wheel() -> Result<()> { + let context = TestContext::new("3.12"); + let built_by_uv = Path::new("../../scripts/packages/built-by-uv"); +@@ -83,6 +84,7 @@ fn built_by_uv_direct_wheel() -> Result<()> { + /// We can't test end-to-end here including the PEP 517 bridge code since we don't have a uv wheel, + /// so we call the build backend directly. + #[test] ++#[cfg(feature = "pypi")] + fn built_by_uv_direct() -> Result<()> { + let context = TestContext::new("3.12"); + let built_by_uv = Path::new("../../scripts/packages/built-by-uv"); +@@ -160,6 +162,7 @@ fn built_by_uv_direct() -> Result<()> { + /// We can't test end-to-end here including the PEP 517 bridge code since we don't have a uv wheel, + /// so we call the build backend directly. + #[test] ++#[cfg(feature = "pypi")] + fn built_by_uv_editable() -> Result<()> { + let context = TestContext::new("3.12"); + let built_by_uv = Path::new("../../scripts/packages/built-by-uv"); +diff --git a/crates/uv/tests/it/pip_check.rs b/crates/uv/tests/it/pip_check.rs +index 891b1f050b58..1af9b6ae9963 100644 +--- a/crates/uv/tests/it/pip_check.rs ++++ b/crates/uv/tests/it/pip_check.rs +@@ -6,6 +6,7 @@ use crate::common::TestContext; + use crate::common::uv_snapshot; + + #[test] ++#[cfg(feature = "pypi")] + fn check_compatible_packages() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -50,6 +51,7 @@ fn check_compatible_packages() -> Result<()> { + // requests 2.31.0 requires idna (<4,>=2.5) + // this test force-installs idna 2.4 to trigger a failure. + #[test] ++#[cfg(feature = "pypi")] + fn check_incompatible_packages() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -119,6 +121,7 @@ fn check_incompatible_packages() -> Result<()> { + // this test force-installs idna 2.4 and urllib3 1.20 to trigger a failure + // with multiple incompatible packages. + #[test] ++#[cfg(feature = "pypi")] + fn check_multiple_incompatible_packages() -> Result<()> { + let context = TestContext::new("3.12"); + +diff --git a/crates/uv/tests/it/pip_list.rs b/crates/uv/tests/it/pip_list.rs +index 5c26c03aaecb..ec1f288e68ee 100644 +--- a/crates/uv/tests/it/pip_list.rs ++++ b/crates/uv/tests/it/pip_list.rs +@@ -56,6 +56,7 @@ fn list_empty_json() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn list_single_no_editable() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -96,6 +97,7 @@ fn list_single_no_editable() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn list_outdated_columns() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -136,6 +138,7 @@ fn list_outdated_columns() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn list_outdated_json() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -232,6 +235,7 @@ fn list_outdated_git() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn list_outdated_index() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -275,6 +279,7 @@ fn list_outdated_index() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn list_editable() { + let context = TestContext::new("3.12"); + +@@ -320,6 +325,7 @@ fn list_editable() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn list_editable_only() { + let context = TestContext::new("3.12"); + +@@ -394,6 +400,7 @@ fn list_editable_only() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn list_exclude() { + let context = TestContext::new("3.12"); + +@@ -475,6 +482,7 @@ fn list_exclude() { + } + + #[test] ++#[cfg(feature = "pypi")] + #[cfg(not(windows))] + fn list_format_json() { + let context = TestContext::new("3.12"); +@@ -541,6 +549,7 @@ fn list_format_json() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn list_format_freeze() { + let context = TestContext::new("3.12"); + +@@ -706,6 +715,7 @@ Version: 0.1-bulbasaur + } + + #[test] ++#[cfg(feature = "pypi")] + fn list_ignores_quiet_flag_format_freeze() { + let context = TestContext::new("3.12"); + +diff --git a/crates/uv/tests/it/pip_show.rs b/crates/uv/tests/it/pip_show.rs +index 4371b089e8a7..a097e128b65a 100644 +--- a/crates/uv/tests/it/pip_show.rs ++++ b/crates/uv/tests/it/pip_show.rs +@@ -26,6 +26,7 @@ fn show_empty() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn show_requires_multiple() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -75,6 +76,7 @@ fn show_requires_multiple() -> Result<()> { + /// Asserts that the Python version marker in the metadata is correctly evaluated. + /// `click` v8.1.7 requires `importlib-metadata`, but only when `python_version < "3.8"`. + #[test] ++#[cfg(feature = "pypi")] + fn show_python_version_marker() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -124,6 +126,7 @@ fn show_python_version_marker() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn show_found_single_package() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -168,6 +171,7 @@ fn show_found_single_package() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn show_found_multiple_packages() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -224,6 +228,7 @@ fn show_found_multiple_packages() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn show_found_one_out_of_three() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -276,6 +281,7 @@ fn show_found_one_out_of_three() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn show_found_one_out_of_two_quiet() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -323,6 +329,7 @@ fn show_found_one_out_of_two_quiet() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn show_empty_quiet() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -369,6 +376,7 @@ fn show_empty_quiet() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn show_editable() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -405,6 +413,7 @@ fn show_editable() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn show_required_by_multiple() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -460,6 +469,7 @@ fn show_required_by_multiple() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn show_files() { + let context = TestContext::new("3.12"); + +diff --git a/crates/uv/tests/it/pip_tree.rs b/crates/uv/tests/it/pip_tree.rs +index 085d2e08d52f..5393c98235f3 100644 +--- a/crates/uv/tests/it/pip_tree.rs ++++ b/crates/uv/tests/it/pip_tree.rs +@@ -26,6 +26,7 @@ fn no_package() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn prune_last_in_the_subgroup() { + let context = TestContext::new("3.12"); + +@@ -69,6 +70,7 @@ fn prune_last_in_the_subgroup() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn single_package() { + let context = TestContext::new("3.12"); + +@@ -114,6 +116,7 @@ fn single_package() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn nested_dependencies() { + let context = TestContext::new("3.12"); + +@@ -163,6 +166,7 @@ fn nested_dependencies() { + + /// Identical test as `invert` since `--reverse` is simply an alias for `--invert`. + #[test] ++#[cfg(feature = "pypi")] + fn reverse() { + let context = TestContext::new("3.12"); + +@@ -214,6 +218,7 @@ fn reverse() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn invert() { + let context = TestContext::new("3.12"); + +@@ -265,6 +270,7 @@ fn invert() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn depth() { + let context = TestContext::new("3.12"); + +@@ -364,6 +370,7 @@ fn depth() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn prune() { + let context = TestContext::new("3.12"); + +@@ -468,6 +475,7 @@ fn prune() { + + /// Ensure `pip tree` behaves correctly after a package has been removed. + #[test] ++#[cfg(feature = "pypi")] + fn removed_dependency() { + let context = TestContext::new("3.12"); + +@@ -523,6 +531,7 @@ fn removed_dependency() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn multiple_packages() { + let context = TestContext::new("3.12"); + +@@ -577,6 +586,7 @@ fn multiple_packages() { + + /// Show the installed tree in the presence of a cycle. + #[test] ++#[cfg(feature = "pypi")] + fn cycle() { + let context = TestContext::new("3.12"); + +@@ -644,6 +654,7 @@ fn cycle() { + + /// Both `pendulum` and `boto3` depend on `python-dateutil`. + #[test] ++#[cfg(feature = "pypi")] + fn multiple_packages_shared_descendant() { + let context = TestContext::new("3.12"); + +@@ -697,6 +708,7 @@ fn multiple_packages_shared_descendant() { + + /// Test the interaction between `--no-dedupe` and `--invert`. + #[test] ++#[cfg(feature = "pypi")] + fn no_dedupe_and_invert() { + let context = TestContext::new("3.12"); + +@@ -749,6 +761,7 @@ fn no_dedupe_and_invert() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn no_dedupe() { + let context = TestContext::new("3.12"); + +@@ -843,6 +856,7 @@ fn with_editable() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn package_flag() { + let context = TestContext::new("3.12"); + +@@ -910,6 +924,7 @@ fn package_flag() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn show_version_specifiers_simple() { + let context = TestContext::new("3.12"); + +@@ -953,6 +968,7 @@ fn show_version_specifiers_simple() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn show_version_specifiers_with_invert() { + let context = TestContext::new("3.12"); + +@@ -1008,6 +1024,7 @@ fn show_version_specifiers_with_invert() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn show_version_specifiers_with_package() { + let context = TestContext::new("3.12"); + +@@ -1055,6 +1072,7 @@ fn show_version_specifiers_with_package() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn print_output_even_with_quite_flag() { + let context = TestContext::new("3.12"); + +@@ -1094,6 +1112,7 @@ fn print_output_even_with_quite_flag() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn outdated() { + let context = TestContext::new("3.12"); + +diff --git a/crates/uv/tests/it/pip_uninstall.rs b/crates/uv/tests/it/pip_uninstall.rs +index 5c820673d663..3c1c0d717da5 100644 +--- a/crates/uv/tests/it/pip_uninstall.rs ++++ b/crates/uv/tests/it/pip_uninstall.rs +@@ -100,6 +100,7 @@ fn invalid_requirements_txt_requirement() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn uninstall() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -142,6 +143,7 @@ fn uninstall() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn missing_record() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -180,6 +182,7 @@ fn missing_record() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn uninstall_editable_by_name() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -228,6 +231,7 @@ fn uninstall_editable_by_name() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn uninstall_by_path() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -276,6 +280,7 @@ fn uninstall_by_path() -> Result<()> { + } + + #[test] ++#[cfg(feature = "pypi")] + fn uninstall_duplicate_by_path() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -326,6 +331,7 @@ fn uninstall_duplicate_by_path() -> Result<()> { + + /// Uninstall a duplicate package in a virtual environment. + #[test] ++#[cfg(feature = "pypi")] + fn uninstall_duplicate() -> Result<()> { + use uv_fs::copy_dir_all; + +diff --git a/crates/uv/tests/it/venv.rs b/crates/uv/tests/it/venv.rs +index d601b2535a9e..7a2367412216 100644 +--- a/crates/uv/tests/it/venv.rs ++++ b/crates/uv/tests/it/venv.rs +@@ -579,6 +579,7 @@ fn create_venv_explicit_request_takes_priority_over_python_version_file() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn seed() { + let context = TestContext::new_with_versions(&["3.12"]); + uv_snapshot!(context.filters(), context.venv() +@@ -602,6 +603,7 @@ fn seed() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn seed_older_python_version() { + let context = TestContext::new_with_versions(&["3.11"]); + uv_snapshot!(context.filters(), context.venv() +diff --git a/crates/uv/tests/it/version.rs b/crates/uv/tests/it/version.rs +index 6ecc38aa3175..1fda427058d8 100644 +--- a/crates/uv/tests/it/version.rs ++++ b/crates/uv/tests/it/version.rs +@@ -1368,6 +1368,7 @@ fn version_get_workspace() -> Result<()> { + /// + /// Also check that --locked/--frozen/--no-sync do what they say + #[test] ++#[cfg(feature = "pypi")] + fn version_set_workspace() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -1709,6 +1710,7 @@ fn version_set_workspace() -> Result<()> { + /// It would be nice to have a case where we still get a package dependency, but + /// this still demonstrates the non-trivial "hazard" of a version change. + #[test] ++#[cfg(feature = "pypi")] + fn version_set_evil_constraints() -> Result<()> { + let context = TestContext::new("3.12"); + +diff --git a/crates/uv/tests/it/workspace.rs b/crates/uv/tests/it/workspace.rs +index 1b375597ccf8..c52c4a2f198a 100644 +--- a/crates/uv/tests/it/workspace.rs ++++ b/crates/uv/tests/it/workspace.rs +@@ -24,6 +24,7 @@ fn workspaces_dir() -> PathBuf { + } + + #[test] ++#[cfg(feature = "pypi")] + fn test_albatross_in_examples_bird_feeder() { + let context = TestContext::new("3.12"); + let workspace = context.temp_dir.child("workspace"); +@@ -67,6 +68,7 @@ fn test_albatross_in_examples_bird_feeder() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn test_albatross_in_examples() { + let context = TestContext::new("3.12"); + let workspace = context.temp_dir.child("workspace"); +@@ -107,6 +109,7 @@ fn test_albatross_in_examples() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn test_albatross_just_project() { + let context = TestContext::new("3.12"); + let workspace = context.temp_dir.child("workspace"); +@@ -147,6 +150,7 @@ fn test_albatross_just_project() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn test_albatross_project_in_excluded() { + let context = TestContext::new("3.12"); + let workspace = context.temp_dir.child("workspace"); +@@ -222,6 +226,7 @@ fn test_albatross_project_in_excluded() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn test_albatross_root_workspace() { + let context = TestContext::new("3.12"); + let workspace = context.temp_dir.child("workspace"); +@@ -265,6 +270,7 @@ fn test_albatross_root_workspace() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn test_albatross_root_workspace_bird_feeder() { + let context = TestContext::new("3.12"); + let workspace = context.temp_dir.child("workspace"); +@@ -310,6 +316,7 @@ fn test_albatross_root_workspace_bird_feeder() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn test_albatross_root_workspace_albatross() { + let context = TestContext::new("3.12"); + let workspace = context.temp_dir.child("workspace"); +@@ -355,6 +362,7 @@ fn test_albatross_root_workspace_albatross() { + } + + #[test] ++#[cfg(feature = "pypi")] + fn test_albatross_virtual_workspace() { + let context = TestContext::new("3.12"); + let workspace = context.temp_dir.child("workspace"); +@@ -402,6 +410,7 @@ fn test_albatross_virtual_workspace() { + + /// Check that `uv run --package` works in a virtual workspace. + #[test] ++#[cfg(feature = "pypi")] + fn test_uv_run_with_package_virtual_workspace() -> Result<()> { + let context = TestContext::new("3.12"); + let work_dir = context.temp_dir.join("albatross-virtual-workspace"); +@@ -471,6 +480,7 @@ fn test_uv_run_with_package_virtual_workspace() -> Result<()> { + /// Check that `uv run` works from a virtual workspace root, which should sync all packages in the + /// workspace. + #[test] ++#[cfg(feature = "pypi")] + fn test_uv_run_virtual_workspace_root() -> Result<()> { + let context = TestContext::new("3.12"); + let work_dir = context.temp_dir.join("albatross-virtual-workspace"); +@@ -511,6 +521,7 @@ fn test_uv_run_virtual_workspace_root() -> Result<()> { + + /// Check that `uv run --package` works in a root workspace. + #[test] ++#[cfg(feature = "pypi")] + fn test_uv_run_with_package_root_workspace() -> Result<()> { + let context = TestContext::new("3.12"); + let work_dir = context.temp_dir.join("albatross-root-workspace"); +@@ -573,6 +584,7 @@ fn test_uv_run_with_package_root_workspace() -> Result<()> { + + /// Check that `uv run --isolated` creates isolated virtual environments. + #[test] ++#[cfg(feature = "pypi")] + fn test_uv_run_isolate() -> Result<()> { + let context = TestContext::new("3.12"); + let work_dir = context.temp_dir.join("albatross-root-workspace"); +@@ -694,6 +706,7 @@ fn workspace_lock_idempotence(workspace: &str, subdirectories: &[&str]) -> Resul + + /// Check that the resolution is the same no matter where in the workspace we are. + #[test] ++#[cfg(feature = "pypi")] + fn workspace_lock_idempotence_root_workspace() -> Result<()> { + workspace_lock_idempotence( + "albatross-root-workspace", +@@ -705,6 +718,7 @@ fn workspace_lock_idempotence_root_workspace() -> Result<()> { + /// Check that the resolution is the same no matter where in the workspace we are, and that locking + /// works even if there is no root project. + #[test] ++#[cfg(feature = "pypi")] + fn workspace_lock_idempotence_virtual_workspace() -> Result<()> { + workspace_lock_idempotence( + "albatross-virtual-workspace", + +From 951a202905b2b483af6d90ad9953e335bea3fab7 Mon Sep 17 00:00:00 2001 +From: "Benjamin A. Beasley" code@musicinmybrain.net +Date: Wed, 28 May 2025 08:21:05 -0400 +Subject: [PATCH 2/3] Conditionalize pip_check at the module level + +Also require the python feature for it. +--- + crates/uv/tests/it/main.rs | 1 + + crates/uv/tests/it/pip_check.rs | 3 --- + 2 files changed, 1 insertion(+), 3 deletions(-) + +diff --git a/crates/uv/tests/it/main.rs b/crates/uv/tests/it/main.rs +index 926a3a790815..5daa56a3aed6 100644 +--- a/crates/uv/tests/it/main.rs ++++ b/crates/uv/tests/it/main.rs +@@ -41,6 +41,7 @@ mod lock_scenarios; + + mod version; + ++#[cfg(all(feature = "python", feature = "pypi"))] + mod pip_check; + + #[cfg(all(feature = "python", feature = "pypi"))] +diff --git a/crates/uv/tests/it/pip_check.rs b/crates/uv/tests/it/pip_check.rs +index 1af9b6ae9963..891b1f050b58 100644 +--- a/crates/uv/tests/it/pip_check.rs ++++ b/crates/uv/tests/it/pip_check.rs +@@ -6,7 +6,6 @@ use crate::common::TestContext; + use crate::common::uv_snapshot; + + #[test] +-#[cfg(feature = "pypi")] + fn check_compatible_packages() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -51,7 +50,6 @@ fn check_compatible_packages() -> Result<()> { + // requests 2.31.0 requires idna (<4,>=2.5) + // this test force-installs idna 2.4 to trigger a failure. + #[test] +-#[cfg(feature = "pypi")] + fn check_incompatible_packages() -> Result<()> { + let context = TestContext::new("3.12"); + +@@ -121,7 +119,6 @@ fn check_incompatible_packages() -> Result<()> { + // this test force-installs idna 2.4 and urllib3 1.20 to trigger a failure + // with multiple incompatible packages. + #[test] +-#[cfg(feature = "pypi")] + fn check_multiple_incompatible_packages() -> Result<()> { + let context = TestContext::new("3.12"); + + +From 75a95f8447c5c027f80fc928e9e803d125d12585 Mon Sep 17 00:00:00 2001 +From: "Benjamin A. Beasley" code@musicinmybrain.net +Date: Wed, 28 May 2025 08:27:45 -0400 +Subject: [PATCH 3/3] Fix incorrect application of the pypi feature outside the + uv crate + +--- + crates/uv-client/tests/it/remote_metadata.rs | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/crates/uv-client/tests/it/remote_metadata.rs b/crates/uv-client/tests/it/remote_metadata.rs +index 95348ffbd4bd..72bc7322238a 100644 +--- a/crates/uv-client/tests/it/remote_metadata.rs ++++ b/crates/uv-client/tests/it/remote_metadata.rs +@@ -10,7 +10,6 @@ use uv_distribution_types::{BuiltDist, DirectUrlBuiltDist, IndexCapabilities}; + use uv_pep508::VerbatimUrl; + + #[tokio::test] +-#[cfg(feature = "pypi")] + async fn remote_metadata_with_and_without_cache() -> Result<()> { + let cache = Cache::temp()?.init()?; + let client = RegistryClientBuilder::new(cache).build(); diff --git a/uv.spec b/uv.spec index 4de941c..d85beae 100644 --- a/uv.spec +++ b/uv.spec @@ -5,13 +5,10 @@ # confidence that everything works correctly in an environment that only has # the main system Python. # -# For the time being, these are still disabled since many of them still want -# network access, even when features like pypi and crates-io are removed from -# the default features. We should discuss this with upstream and consider -# offering a PR to conditionalize the affected tests. See -# https://src.fedoraproject.org/rpms/uv/pull-request/18#comment-229365 and -# https://github.com/astral-sh/uv/issues/8970#issuecomment-2466794088. -%bcond it 0 +# EPEL10 does not have alternative versions of Python, so we cannot run most of +# the integration tests there, and manually selecting those we can run would be +# far too tedious. +%bcond it %{undefined el10}
Name: uv Version: 0.7.8 @@ -198,6 +195,10 @@ Patch: 0001-Downstream-only-do-not-override-the-default-allocato.patch # https://github.com/astral-sh/uv/issues/4451 Patch: 0001-Downstream-patch-always-find-the-system-wide-uv-exec.patch
+# Conditionalize more tests that require PyPI +# https://github.com/astral-sh/uv/pull/13699 +Patch: %{url}/pull/13699.patch + # Update sanitize-filename requirement from 0.5 to 0.6 Patch100: https://github.com/Majored/rs-async-zip/pull/153.patch
@@ -229,7 +230,10 @@ BuildRequires: tomcli BuildRequires: python3-devel %if %{with check} && %{with it} # See trove classifiers in pyproject.toml for supported Pythons. +%if %{defined fc41} +# https://fedoraproject.org/wiki/Changes/RetirePython3.8 BuildRequires: /usr/bin/python3.8 +%endif BuildRequires: /usr/bin/python3.9 BuildRequires: /usr/bin/python3.10 BuildRequires: /usr/bin/python3.11 @@ -536,6 +540,7 @@ mods="${mods-}${mods+|}build_backend" mods="${mods-}${mods+|}pip_(check|list|show|tree|uninstall)" mods="${mods-}${mods+|}python_(dir|find|install|list|pin)" mods="${mods-}${mods+|}venv" +mods="${mods-}${mods+|}version" mods="${mods-}${mods+|}workspace" comment='Downstream-only: skip, needs specific Python interpreter versions' sed -r -i "s@mod (${mods});@// ${comment}\n#[cfg(any())]\n&@" \ @@ -648,44 +653,20 @@ skip="${skip-} --skip keyring::tests::fetch_url_with_empty_username" skip="${skip-} --skip keyring::tests::fetch_url_with_no_username" skip="${skip-} --skip keyring::tests::fetch_url_with_password"
+%if %{without it} # These tests require specific Python interpreter versions, which upstream -# normally downloads, precompiled, into the build area; they might also require -# network access. +# normally downloads, precompiled, into the build area. # -p uv --test it: skip="${skip-} --skip version::self_version" skip="${skip-} --skip version::self_version_json" skip="${skip-} --skip version::self_version_short" -skip="${skip-} --skip version::version_bump_minor" -skip="${skip-} --skip version::version_bump_patch" -skip="${skip-} --skip version::version_bump_patch_short" -skip="${skip-} --skip version::version_get" -skip="${skip-} --skip version::version_get_dynamic" -skip="${skip-} --skip version::version_get_fallback_missing_strict" -skip="${skip-} --skip version::version_get_fallback_missing_strict_preview" -skip="${skip-} --skip version::version_get_fallback_unmanaged" -skip="${skip-} --skip version::version_get_fallback_unmanaged_json" -skip="${skip-} --skip version::version_get_fallback_unmanaged_short" -skip="${skip-} --skip version::version_get_fallback_unmanaged_strict" -skip="${skip-} --skip version::version_get_json" -skip="${skip-} --skip version::version_get_short" -skip="${skip-} --skip version::version_get_workspace" -skip="${skip-} --skip version::version_major_complex_mess" -skip="${skip-} --skip version::version_major_dev" -skip="${skip-} --skip version::version_major_dry" -skip="${skip-} --skip version::version_major_post" -skip="${skip-} --skip version::version_major_uncompleted" -skip="${skip-} --skip version::version_major_version" -skip="${skip-} --skip version::version_minor_uncompleted" -skip="${skip-} --skip version::version_missing_bump" -skip="${skip-} --skip version::version_patch_uncompleted" -skip="${skip-} --skip version::version_set_dry" -skip="${skip-} --skip version::version_set_dynamic" -skip="${skip-} --skip version::version_set_evil_constraints" -skip="${skip-} --skip version::version_set_invalid" -skip="${skip-} --skip version::version_set_value" -skip="${skip-} --skip version::version_set_value_short" -skip="${skip-} --skip version::version_set_workspace" +%endif # -p uv-client --test it: +# This requires specific Python interpreter versions (so it would be grouped +# with the conditionalized integration tests above), but it also requires +# network access to PyPI, so it must be skipped either way until it can be +# appropriately conditionalized upstream; see +# https://github.com/astral-sh/uv/pull/13699#issuecomment-2916115588. skip="${skip-} --skip remote_metadata::remote_metadata_with_and_without_cache"
%if %[ %{defined fc41} || %{defined fc40} || %{defined el10} || %{defined el9} ]
commit d262321d32022def9ec7a3dec4198c92ea806195 Author: Benjamin A. Beasley code@musicinmybrain.net Date: Sat May 24 20:28:23 2025 -0400
Update to 0.7.8 (close RHBZ#2368123)
diff --git a/.gitignore b/.gitignore index 0712a6f..51befad 100644 --- a/.gitignore +++ b/.gitignore @@ -113,3 +113,5 @@ /pubgrub-73d6ecf5a4e4eb1c754b8c3255c4d31bdc266fdb.tar.gz /uv-0.7.5.tar.gz /uv-0.7.6.tar.gz +/uv-0.7.8.tar.gz +/pubgrub-06ec5a5f59ffaeb6cf5079c6cb184467da06c9db.tar.gz diff --git a/sources b/sources index a54349b..c4c6209 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ -SHA512 (uv-0.7.6.tar.gz) = dad58684bdd1e092da8cbf75282d436dc802e7344afa8c2d787b101c5043cc2c02b4a14d8cce071f3d1b2d45095c80381911b00879e99ec66dcfc427257a67ce +SHA512 (uv-0.7.8.tar.gz) = 109821612a9a07bf0fdadcc942893a8e024ef828f22f25b5d3f2a10088882892cb84a8b1e37874e7346c9a0815dcd15cb736a2a768ff525c6198482fe7aba3ff SHA512 (rs-async-zip-c909fda63fcafe4af496a07bfda28a5aae97e58d.tar.gz) = 3a309566f4925b02496fcf19bc2865968edf6fb65082ca4079d2cee79e6b0353a1910c079f2afe656da0d0f6ddde5102052a221ea35a7dabc6d690a11218b20a -SHA512 (pubgrub-73d6ecf5a4e4eb1c754b8c3255c4d31bdc266fdb.tar.gz) = 42b1f5d6f075579d78a1231c27d9c25c4d79b7097746adee8281021916a085abc7a86c848ada03819acd5b09dccbf6106497be5ed09e56218e7f5206c0ad893a +SHA512 (pubgrub-06ec5a5f59ffaeb6cf5079c6cb184467da06c9db.tar.gz) = 3f0b18aecbc73fee91fc7de9f10d240ddc06c836fa2f116c1f007dd7818d099e6aea1852ca0b8d1a26ac19aac896535dba1a6298851a65515b553810c6245784 SHA512 (tl-6e25b2ee2513d75385101a8ff9f591ef51f314ec.tar.gz) = 4abbc4240ed129c92da8d616e27a6df0f24cdc85a0803acfdae588ca91f9e5b8d482e3ac88b2e657ff68917b1b43cef1e7ef3c887f624659b231fa5a13fcae68 diff --git a/uv.spec b/uv.spec index bec3223..4de941c 100644 --- a/uv.spec +++ b/uv.spec @@ -14,7 +14,7 @@ %bcond it 0
Name: uv -Version: 0.7.6 +Version: 0.7.8 Release: %autorelease Summary: An extremely fast Python package installer and resolver, written in Rust
@@ -161,9 +161,9 @@ Source100: %{async_zip_git}/archive/%{async_zip_rev}/rs-async-zip-%{async_z # We therefore bundle the fork as prescribed in # https://docs.fedoraproject.org/en-US/packaging-guidelines/Rust/#_replacing_g... %global pubgrub_git https://github.com/astral-sh/pubgrub -%global pubgrub_rev 73d6ecf5a4e4eb1c754b8c3255c4d31bdc266fdb +%global pubgrub_rev 06ec5a5f59ffaeb6cf5079c6cb184467da06c9db %global pubgrub_baseversion 0.3.0 -%global pubgrub_snapdate 20250509 +%global pubgrub_snapdate 20250523 %global version_ranges_baseversion 0.1.1 Source200: %{pubgrub_git}/archive/%{pubgrub_rev}/pubgrub-%{pubgrub_rev}.tar.gz
@@ -680,9 +680,11 @@ skip="${skip-} --skip version::version_missing_bump" skip="${skip-} --skip version::version_patch_uncompleted" skip="${skip-} --skip version::version_set_dry" skip="${skip-} --skip version::version_set_dynamic" +skip="${skip-} --skip version::version_set_evil_constraints" skip="${skip-} --skip version::version_set_invalid" skip="${skip-} --skip version::version_set_value" skip="${skip-} --skip version::version_set_value_short" +skip="${skip-} --skip version::version_set_workspace" # -p uv-client --test it: skip="${skip-} --skip remote_metadata::remote_metadata_with_and_without_cache"
commit 362adc21873b05481ac18db35941d296a2c2d1fa Author: Benjamin A. Beasley code@musicinmybrain.net Date: Tue May 20 05:49:05 2025 -0400
Update to 0.7.6 (close RHBZ#2367417)
diff --git a/.gitignore b/.gitignore index 6be35a0..0712a6f 100644 --- a/.gitignore +++ b/.gitignore @@ -112,3 +112,4 @@ /uv-0.7.4.tar.gz /pubgrub-73d6ecf5a4e4eb1c754b8c3255c4d31bdc266fdb.tar.gz /uv-0.7.5.tar.gz +/uv-0.7.6.tar.gz diff --git a/sources b/sources index 5bf178f..a54349b 100644 --- a/sources +++ b/sources @@ -1,4 +1,4 @@ -SHA512 (uv-0.7.5.tar.gz) = 62da69710fa91f60c661d3648e2577fb4d28a3dbfb6800b0315dd1ef5ad755500a732efe6400b4de7b644c2cb595c080414e7b6890f96555a0d3a3131a3b8c73 +SHA512 (uv-0.7.6.tar.gz) = dad58684bdd1e092da8cbf75282d436dc802e7344afa8c2d787b101c5043cc2c02b4a14d8cce071f3d1b2d45095c80381911b00879e99ec66dcfc427257a67ce SHA512 (rs-async-zip-c909fda63fcafe4af496a07bfda28a5aae97e58d.tar.gz) = 3a309566f4925b02496fcf19bc2865968edf6fb65082ca4079d2cee79e6b0353a1910c079f2afe656da0d0f6ddde5102052a221ea35a7dabc6d690a11218b20a SHA512 (pubgrub-73d6ecf5a4e4eb1c754b8c3255c4d31bdc266fdb.tar.gz) = 42b1f5d6f075579d78a1231c27d9c25c4d79b7097746adee8281021916a085abc7a86c848ada03819acd5b09dccbf6106497be5ed09e56218e7f5206c0ad893a SHA512 (tl-6e25b2ee2513d75385101a8ff9f591ef51f314ec.tar.gz) = 4abbc4240ed129c92da8d616e27a6df0f24cdc85a0803acfdae588ca91f9e5b8d482e3ac88b2e657ff68917b1b43cef1e7ef3c887f624659b231fa5a13fcae68 diff --git a/uv.spec b/uv.spec index 84e8dc2..bec3223 100644 --- a/uv.spec +++ b/uv.spec @@ -14,7 +14,7 @@ %bcond it 0
Name: uv -Version: 0.7.5 +Version: 0.7.6 Release: %autorelease Summary: An extremely fast Python package installer and resolver, written in Rust