mirror of
https://github.com/astral-sh/uv.git
synced 2025-11-02 12:59:45 +00:00
Redact packse version in snapshots follow-up (#5563)
I thought i had this included in #5483 but i had it on the wrong branch.
This commit is contained in:
parent
0f87d174b9
commit
194904b340
3 changed files with 262 additions and 3 deletions
|
|
@ -26,7 +26,7 @@ use uv_python::{
|
|||
// Exclude any packages uploaded after this date.
|
||||
static EXCLUDE_NEWER: &str = "2024-03-25T00:00:00Z";
|
||||
|
||||
pub const PACKSE_VERSION: &str = "0.3.30";
|
||||
pub const PACKSE_VERSION: &str = "0.3.31";
|
||||
|
||||
/// Using a find links url allows using `--index-url` instead of `--extra-index-url` in tests
|
||||
/// to prevent dependency confusion attacks against our test suite.
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
//! DO NOT EDIT
|
||||
//!
|
||||
//! Generated with `./scripts/sync_scenarios.sh`
|
||||
//! Scenarios from <https://github.com/astral-sh/packse/tree/0.3.30/scenarios>
|
||||
//! Scenarios from <https://github.com/astral-sh/packse/tree/0.3.31/scenarios>
|
||||
//!
|
||||
#![cfg(all(feature = "python", feature = "pypi"))]
|
||||
#![allow(clippy::needless_raw_string_hashes)]
|
||||
|
|
@ -2316,6 +2316,265 @@ fn fork_non_local_fork_marker_transitive() -> Result<()> {
|
|||
Ok(())
|
||||
}
|
||||
|
||||
/// Like `preferences-dependent-forking`, but when we don't fork the resolution
|
||||
/// fails. Consider a fresh run without preferences: * We start with cleaver 2 * We
|
||||
/// fork * We reject cleaver 2 * We find cleaver solution in fork 1 with foo 2 with
|
||||
/// bar 1 * We find cleaver solution in fork 2 with foo 1 with bar 2 * We write
|
||||
/// cleaver 1, foo 1, foo 2, bar 1 and bar 2 to the lockfile In a subsequent run,
|
||||
/// we read the preference cleaver 1 from the lockfile (the preferences for foo and
|
||||
/// bar don't matter): * We start with cleaver 1 * We're in universal mode, cleaver
|
||||
/// requires foo 1, bar 1 * foo 1 requires bar 2, conflict Design sketch: ```text
|
||||
/// root -> clear, foo, bar # Cause a fork, then forget that version. cleaver 2 ->
|
||||
/// unrelated-dep==1; fork==1 cleaver 2 -> unrelated-dep==2; fork==2 cleaver 2 ->
|
||||
/// reject-cleaver-2 # Allow different versions when forking, but force foo 1, bar 1
|
||||
/// in universal mode without forking. cleaver 1 -> foo==1; fork==1 cleaver 1 ->
|
||||
/// bar==1; fork==2 # When we selected foo 1, bar 1 in universal mode for cleaver,
|
||||
/// this causes a conflict, otherwise we select bar 2. foo 1 -> bar==2 ```
|
||||
///
|
||||
/// ```text
|
||||
/// preferences-dependent-forking-conflicting
|
||||
/// ├── environment
|
||||
/// │ └── python3.8
|
||||
/// ├── root
|
||||
/// │ ├── requires bar
|
||||
/// │ │ ├── satisfied by bar-1.0.0
|
||||
/// │ │ └── satisfied by bar-2.0.0
|
||||
/// │ ├── requires cleaver
|
||||
/// │ │ ├── satisfied by cleaver-2.0.0
|
||||
/// │ │ └── satisfied by cleaver-1.0.0
|
||||
/// │ └── requires foo
|
||||
/// │ ├── satisfied by foo-1.0.0
|
||||
/// │ └── satisfied by foo-2.0.0
|
||||
/// ├── bar
|
||||
/// │ ├── bar-1.0.0
|
||||
/// │ └── bar-2.0.0
|
||||
/// ├── cleaver
|
||||
/// │ ├── cleaver-2.0.0
|
||||
/// │ │ ├── requires reject-cleaver-2
|
||||
/// │ │ │ └── satisfied by reject-cleaver-2-1.0.0
|
||||
/// │ │ ├── requires unrelated-dep==1; sys_platform == "linux"
|
||||
/// │ │ │ └── satisfied by unrelated-dep-1.0.0
|
||||
/// │ │ └── requires unrelated-dep==2; sys_platform != "linux"
|
||||
/// │ │ └── satisfied by unrelated-dep-2.0.0
|
||||
/// │ └── cleaver-1.0.0
|
||||
/// │ ├── requires bar==1; sys_platform != "linux"
|
||||
/// │ │ └── satisfied by bar-1.0.0
|
||||
/// │ └── requires foo==1; sys_platform == "linux"
|
||||
/// │ └── satisfied by foo-1.0.0
|
||||
/// ├── foo
|
||||
/// │ ├── foo-1.0.0
|
||||
/// │ │ └── requires bar==2
|
||||
/// │ │ └── satisfied by bar-2.0.0
|
||||
/// │ └── foo-2.0.0
|
||||
/// ├── reject-cleaver-2
|
||||
/// │ └── reject-cleaver-2-1.0.0
|
||||
/// │ └── requires unrelated-dep==3
|
||||
/// │ └── satisfied by unrelated-dep-3.0.0
|
||||
/// └── unrelated-dep
|
||||
/// ├── unrelated-dep-1.0.0
|
||||
/// ├── unrelated-dep-2.0.0
|
||||
/// └── unrelated-dep-3.0.0
|
||||
/// ```
|
||||
#[test]
|
||||
fn preferences_dependent_forking_conflicting() -> Result<()> {
|
||||
let context = TestContext::new("3.8");
|
||||
|
||||
// In addition to the standard filters, swap out package names for shorter messages
|
||||
let mut filters = context.filters();
|
||||
filters.push((r"preferences-dependent-forking-conflicting-", "package-"));
|
||||
|
||||
let pyproject_toml = context.temp_dir.child("pyproject.toml");
|
||||
pyproject_toml.write_str(
|
||||
r###"
|
||||
[project]
|
||||
name = "project"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
'''preferences-dependent-forking-conflicting-cleaver''',
|
||||
'''preferences-dependent-forking-conflicting-foo''',
|
||||
'''preferences-dependent-forking-conflicting-bar''',
|
||||
]
|
||||
requires-python = ">=3.8"
|
||||
"###,
|
||||
)?;
|
||||
|
||||
let mut cmd = context.lock();
|
||||
cmd.env_remove("UV_EXCLUDE_NEWER");
|
||||
cmd.arg("--index-url").arg(packse_index_url());
|
||||
uv_snapshot!(filters, cmd, @r###"
|
||||
success: true
|
||||
exit_code: 0
|
||||
----- stdout -----
|
||||
|
||||
----- stderr -----
|
||||
warning: `uv lock` is experimental and may change without warning
|
||||
Resolved 6 packages in [TIME]
|
||||
"###
|
||||
);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// This test contains a scenario where the solution depends on whether we fork, and
|
||||
/// whether we fork depends on the preferences. Consider a fresh run without
|
||||
/// preferences: * We start with cleaver 2 * We fork * We reject cleaver 2 * We find
|
||||
/// cleaver solution in fork 1 with foo 2 with bar 1 * We find cleaver solution in
|
||||
/// fork 2 with foo 1 with bar 2 * We write cleaver 1, foo 1, foo 2, bar 1 and bar 2
|
||||
/// to the lockfile In a subsequent run, we read the preference cleaver 1 from the
|
||||
/// lockfile (the preferences for foo and bar don't matter): * We start with cleaver
|
||||
/// 1 * We're in universal mode, we resolve foo 1 and bar 1 * We write cleaver 1 and
|
||||
/// bar 1 to the lockfile We call a resolution that's different on the second run
|
||||
/// to the first unstable. Design sketch: ```text root -> clear, foo, bar # Cause a
|
||||
/// fork, then forget that version. cleaver 2 -> unrelated-dep==1; fork==1 cleaver 2
|
||||
/// -> unrelated-dep==2; fork==2 cleaver 2 -> reject-cleaver-2 # Allow different
|
||||
/// versions when forking, but force foo 1, bar 1 in universal mode without forking.
|
||||
/// cleaver 1 -> foo==1; fork==1 cleaver 1 -> bar==1; fork==2 ```
|
||||
///
|
||||
/// ```text
|
||||
/// preferences-dependent-forking
|
||||
/// ├── environment
|
||||
/// │ └── python3.8
|
||||
/// ├── root
|
||||
/// │ ├── requires bar
|
||||
/// │ │ ├── satisfied by bar-1.0.0
|
||||
/// │ │ └── satisfied by bar-2.0.0
|
||||
/// │ ├── requires cleaver
|
||||
/// │ │ ├── satisfied by cleaver-2.0.0
|
||||
/// │ │ └── satisfied by cleaver-1.0.0
|
||||
/// │ └── requires foo
|
||||
/// │ ├── satisfied by foo-1.0.0
|
||||
/// │ └── satisfied by foo-2.0.0
|
||||
/// ├── bar
|
||||
/// │ ├── bar-1.0.0
|
||||
/// │ └── bar-2.0.0
|
||||
/// ├── cleaver
|
||||
/// │ ├── cleaver-2.0.0
|
||||
/// │ │ ├── requires reject-cleaver-2
|
||||
/// │ │ │ └── satisfied by reject-cleaver-2-1.0.0
|
||||
/// │ │ ├── requires unrelated-dep==1; sys_platform == "linux"
|
||||
/// │ │ │ └── satisfied by unrelated-dep-1.0.0
|
||||
/// │ │ └── requires unrelated-dep==2; sys_platform != "linux"
|
||||
/// │ │ └── satisfied by unrelated-dep-2.0.0
|
||||
/// │ └── cleaver-1.0.0
|
||||
/// │ ├── requires bar==1; sys_platform != "linux"
|
||||
/// │ │ └── satisfied by bar-1.0.0
|
||||
/// │ └── requires foo==1; sys_platform == "linux"
|
||||
/// │ └── satisfied by foo-1.0.0
|
||||
/// ├── foo
|
||||
/// │ ├── foo-1.0.0
|
||||
/// │ └── foo-2.0.0
|
||||
/// ├── reject-cleaver-2
|
||||
/// │ └── reject-cleaver-2-1.0.0
|
||||
/// │ └── requires unrelated-dep==3
|
||||
/// │ └── satisfied by unrelated-dep-3.0.0
|
||||
/// └── unrelated-dep
|
||||
/// ├── unrelated-dep-1.0.0
|
||||
/// ├── unrelated-dep-2.0.0
|
||||
/// └── unrelated-dep-3.0.0
|
||||
/// ```
|
||||
#[test]
|
||||
fn preferences_dependent_forking() -> Result<()> {
|
||||
let context = TestContext::new("3.8");
|
||||
|
||||
// In addition to the standard filters, swap out package names for shorter messages
|
||||
let mut filters = context.filters();
|
||||
filters.push((r"preferences-dependent-forking-", "package-"));
|
||||
|
||||
let pyproject_toml = context.temp_dir.child("pyproject.toml");
|
||||
pyproject_toml.write_str(
|
||||
r###"
|
||||
[project]
|
||||
name = "project"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
'''preferences-dependent-forking-cleaver''',
|
||||
'''preferences-dependent-forking-foo''',
|
||||
'''preferences-dependent-forking-bar''',
|
||||
]
|
||||
requires-python = ">=3.8"
|
||||
"###,
|
||||
)?;
|
||||
|
||||
let mut cmd = context.lock();
|
||||
cmd.env_remove("UV_EXCLUDE_NEWER");
|
||||
cmd.arg("--index-url").arg(packse_index_url());
|
||||
uv_snapshot!(filters, cmd, @r###"
|
||||
success: true
|
||||
exit_code: 0
|
||||
----- stdout -----
|
||||
|
||||
----- stderr -----
|
||||
warning: `uv lock` is experimental and may change without warning
|
||||
Resolved 5 packages in [TIME]
|
||||
"###
|
||||
);
|
||||
|
||||
let lock = fs_err::read_to_string(context.temp_dir.join("uv.lock"))?;
|
||||
insta::with_settings!({
|
||||
filters => filters,
|
||||
}, {
|
||||
assert_snapshot!(
|
||||
lock, @r###"
|
||||
version = 1
|
||||
requires-python = ">=3.8"
|
||||
|
||||
[[distribution]]
|
||||
name = "package-bar"
|
||||
version = "1.0.0"
|
||||
source = { registry = "https://astral-sh.github.io/packse/PACKSE_VERSION/simple-html/" }
|
||||
sdist = { url = "https://astral-sh.github.io/packse/PACKSE_VERSION/files/preferences_dependent_forking_bar-1.0.0.tar.gz#sha256=7eef4e0c910b9e4cadf6c707e60a2151f7dc6407d815112ec93a467d76226f5e", hash = "sha256:7eef4e0c910b9e4cadf6c707e60a2151f7dc6407d815112ec93a467d76226f5e" }
|
||||
wheels = [
|
||||
{ url = "https://astral-sh.github.io/packse/PACKSE_VERSION/files/preferences_dependent_forking_bar-1.0.0-py3-none-any.whl#sha256=3cdaac4b0ba330f902d0628c0b1d6e62692f52255d02718d04f46ade7c8ad6a6", hash = "sha256:3cdaac4b0ba330f902d0628c0b1d6e62692f52255d02718d04f46ade7c8ad6a6" },
|
||||
]
|
||||
|
||||
[[distribution]]
|
||||
name = "package-cleaver"
|
||||
version = "1.0.0"
|
||||
source = { registry = "https://astral-sh.github.io/packse/PACKSE_VERSION/simple-html/" }
|
||||
dependencies = [
|
||||
{ name = "package-bar", marker = "sys_platform != 'linux'" },
|
||||
{ name = "package-foo", version = "1.0.0", source = { registry = "https://astral-sh.github.io/packse/PACKSE_VERSION/simple-html/" }, marker = "sys_platform == 'linux'" },
|
||||
]
|
||||
sdist = { url = "https://astral-sh.github.io/packse/PACKSE_VERSION/files/preferences_dependent_forking_cleaver-1.0.0.tar.gz#sha256=0347b927fdf7731758ea53e1594309fc6311ca6983f36553bc11654a264062b2", hash = "sha256:0347b927fdf7731758ea53e1594309fc6311ca6983f36553bc11654a264062b2" }
|
||||
wheels = [
|
||||
{ url = "https://astral-sh.github.io/packse/PACKSE_VERSION/files/preferences_dependent_forking_cleaver-1.0.0-py3-none-any.whl#sha256=855467570c9da8e92ce37d0ebd0653cfa50d5d88b9540beca94feaa37a539dc3", hash = "sha256:855467570c9da8e92ce37d0ebd0653cfa50d5d88b9540beca94feaa37a539dc3" },
|
||||
]
|
||||
|
||||
[[distribution]]
|
||||
name = "package-foo"
|
||||
version = "1.0.0"
|
||||
source = { registry = "https://astral-sh.github.io/packse/PACKSE_VERSION/simple-html/" }
|
||||
sdist = { url = "https://astral-sh.github.io/packse/PACKSE_VERSION/files/preferences_dependent_forking_foo-1.0.0.tar.gz#sha256=abf1c0ac825ee5961e683067634916f98c6651a6d4473ff87d8b57c17af8fed2", hash = "sha256:abf1c0ac825ee5961e683067634916f98c6651a6d4473ff87d8b57c17af8fed2" }
|
||||
wheels = [
|
||||
{ url = "https://astral-sh.github.io/packse/PACKSE_VERSION/files/preferences_dependent_forking_foo-1.0.0-py3-none-any.whl#sha256=85348e8df4892b9f297560c16abcf231828f538dc07339ed121197a00a0626a5", hash = "sha256:85348e8df4892b9f297560c16abcf231828f538dc07339ed121197a00a0626a5" },
|
||||
]
|
||||
|
||||
[[distribution]]
|
||||
name = "package-foo"
|
||||
version = "2.0.0"
|
||||
source = { registry = "https://astral-sh.github.io/packse/PACKSE_VERSION/simple-html/" }
|
||||
sdist = { url = "https://astral-sh.github.io/packse/PACKSE_VERSION/files/preferences_dependent_forking_foo-2.0.0.tar.gz#sha256=ad54d14a4fd931b8ccb6412edef71fe223c36362d0ccfe3fa251c17d4f07e4a9", hash = "sha256:ad54d14a4fd931b8ccb6412edef71fe223c36362d0ccfe3fa251c17d4f07e4a9" }
|
||||
wheels = [
|
||||
{ url = "https://astral-sh.github.io/packse/PACKSE_VERSION/files/preferences_dependent_forking_foo-2.0.0-py3-none-any.whl#sha256=bae278cf259c0e031e52b6cbb537d945e0e606d045e980b90d406d0f1e06aae9", hash = "sha256:bae278cf259c0e031e52b6cbb537d945e0e606d045e980b90d406d0f1e06aae9" },
|
||||
]
|
||||
|
||||
[[distribution]]
|
||||
name = "project"
|
||||
version = "0.1.0"
|
||||
source = { editable = "." }
|
||||
dependencies = [
|
||||
{ name = "package-bar" },
|
||||
{ name = "package-cleaver" },
|
||||
{ name = "package-foo", version = "1.0.0", source = { registry = "https://astral-sh.github.io/packse/PACKSE_VERSION/simple-html/" } },
|
||||
{ name = "package-foo", version = "2.0.0", source = { registry = "https://astral-sh.github.io/packse/PACKSE_VERSION/simple-html/" } },
|
||||
]
|
||||
"###
|
||||
);
|
||||
});
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// This tests that a `Requires-Python` specifier will result in the exclusion of
|
||||
/// dependency specifications that cannot possibly satisfy it. In particular, this
|
||||
/// is tested via the `python_full_version` marker with a pre-release version.
|
||||
|
|
|
|||
|
|
@ -271,7 +271,7 @@ def update_common_mod_rs(packse_version: str):
|
|||
assert (
|
||||
len(url_matcher.findall(test_common)) == 1
|
||||
), f"PACKSE_VERSION not found in {TESTS_COMMON_MOD_RS}"
|
||||
test_common = url_matcher.sub(packse_version, test_common)
|
||||
test_common = url_matcher.sub(build_vendor_links_url, test_common)
|
||||
TESTS_COMMON_MOD_RS.write_text(test_common)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue