Skip to content

Commit 060882f

Browse files
committed
Rename to --fork-strategy
1 parent 02cb2ad commit 060882f

33 files changed

+474
-866
lines changed

crates/uv-cli/src/lib.rs

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,7 @@ use uv_normalize::{ExtraName, GroupName, PackageName};
1919
use uv_pep508::Requirement;
2020
use uv_pypi_types::VerbatimParsedUrl;
2121
use uv_python::{PythonDownloads, PythonPreference, PythonVersion};
22-
use uv_resolver::{
23-
AnnotationStyle, ExcludeNewer, MultiVersionMode, PrereleaseMode, ResolutionMode,
24-
};
22+
use uv_resolver::{AnnotationStyle, ExcludeNewer, ForkStrategy, PrereleaseMode, ResolutionMode};
2523
use uv_static::EnvVars;
2624

2725
pub mod comma;
@@ -4050,17 +4048,20 @@ pub struct ToolUpgradeArgs {
40504048
/// The strategy to use when selecting multiple versions of a given package across Python
40514049
/// versions and platforms.
40524050
///
4053-
/// By default, uv will optimize for selecting the latest version of each package, for each
4054-
/// supported Python version (`requires-python`). Under `fewest`, uv will minimize the number of
4051+
/// By default, uv will optimize for selecting the latest version of each package for each
4052+
/// supported Python version (`requires-python`), while minimizing the number of selected
4053+
/// versions across platforms.
4054+
///
4055+
/// Under `fewest`, uv will minimize the number of
40554056
/// selected versions for each package, preferring older versions that are compatible with a
40564057
/// wider range of supported Python versions or platforms.
40574058
#[arg(
40584059
long,
40594060
value_enum,
4060-
env = EnvVars::UV_MULTI_VERSION,
4061+
env = EnvVars::UV_FORK_STRATEGY,
40614062
help_heading = "Resolver options"
40624063
)]
4063-
pub multi_version: Option<MultiVersionMode>,
4064+
pub fork_strategy: Option<ForkStrategy>,
40644065

40654066
/// Settings to pass to the PEP 517 build backend, specified as `KEY=VALUE` pairs.
40664067
#[arg(
@@ -4854,17 +4855,20 @@ pub struct ResolverArgs {
48544855
/// The strategy to use when selecting multiple versions of a given package across Python
48554856
/// versions and platforms.
48564857
///
4857-
/// By default, uv will optimize for selecting the latest version of each package, for each
4858-
/// supported Python version (`requires-python`). Under `fewest`, uv will minimize the number of
4858+
/// By default, uv will optimize for selecting the latest version of each package for each
4859+
/// supported Python version (`requires-python`), while minimizing the number of selected
4860+
/// versions across platforms.
4861+
///
4862+
/// Under `fewest`, uv will minimize the number of
48594863
/// selected versions for each package, preferring older versions that are compatible with a
48604864
/// wider range of supported Python versions or platforms.
48614865
#[arg(
48624866
long,
48634867
value_enum,
4864-
env = EnvVars::UV_MULTI_VERSION,
4868+
env = EnvVars::UV_FORK_STRATEGY,
48654869
help_heading = "Resolver options"
48664870
)]
4867-
pub multi_version: Option<MultiVersionMode>,
4871+
pub fork_strategy: Option<ForkStrategy>,
48684872

48694873
/// Settings to pass to the PEP 517 build backend, specified as `KEY=VALUE` pairs.
48704874
#[arg(
@@ -5041,17 +5045,20 @@ pub struct ResolverInstallerArgs {
50415045
/// The strategy to use when selecting multiple versions of a given package across Python
50425046
/// versions and platforms.
50435047
///
5044-
/// By default, uv will optimize for selecting the latest version of each package, for each
5045-
/// supported Python version (`requires-python`). Under `fewest`, uv will minimize the number of
5048+
/// By default, uv will optimize for selecting the latest version of each package for each
5049+
/// supported Python version (`requires-python`), while minimizing the number of selected
5050+
/// versions across platforms.
5051+
///
5052+
/// Under `fewest`, uv will minimize the number of
50465053
/// selected versions for each package, preferring older versions that are compatible with a
50475054
/// wider range of supported Python versions or platforms.
50485055
#[arg(
50495056
long,
50505057
value_enum,
5051-
env = EnvVars::UV_MULTI_VERSION,
5058+
env = EnvVars::UV_FORK_STRATEGY,
50525059
help_heading = "Resolver options"
50535060
)]
5054-
pub multi_version: Option<MultiVersionMode>,
5061+
pub fork_strategy: Option<ForkStrategy>,
50555062

50565063
/// Settings to pass to the PEP 517 build backend, specified as `KEY=VALUE` pairs.
50575064
#[arg(

crates/uv-cli/src/options.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ impl From<ResolverArgs> for PipOptions {
4343
resolution,
4444
prerelease,
4545
pre,
46-
multi_version,
46+
fork_strategy,
4747
config_setting,
4848
no_build_isolation,
4949
no_build_isolation_package,
@@ -59,7 +59,7 @@ impl From<ResolverArgs> for PipOptions {
5959
index_strategy,
6060
keyring_provider,
6161
resolution,
62-
multi_version,
62+
fork_strategy,
6363
prerelease: if pre {
6464
Some(PrereleaseMode::Allow)
6565
} else {
@@ -128,7 +128,7 @@ impl From<ResolverInstallerArgs> for PipOptions {
128128
resolution,
129129
prerelease,
130130
pre,
131-
multi_version,
131+
fork_strategy,
132132
config_setting,
133133
no_build_isolation,
134134
no_build_isolation_package,
@@ -153,7 +153,7 @@ impl From<ResolverInstallerArgs> for PipOptions {
153153
} else {
154154
prerelease
155155
},
156-
multi_version,
156+
fork_strategy,
157157
config_settings: config_setting
158158
.map(|config_settings| config_settings.into_iter().collect::<ConfigSettings>()),
159159
no_build_isolation: flag(no_build_isolation, build_isolation),
@@ -239,7 +239,7 @@ pub fn resolver_options(
239239
resolution,
240240
prerelease,
241241
pre,
242-
multi_version,
242+
fork_strategy,
243243
config_setting,
244244
no_build_isolation,
245245
no_build_isolation_package,
@@ -296,7 +296,7 @@ pub fn resolver_options(
296296
} else {
297297
prerelease
298298
},
299-
multi_version,
299+
fork_strategy,
300300
dependency_metadata: None,
301301
config_settings: config_setting
302302
.map(|config_settings| config_settings.into_iter().collect::<ConfigSettings>()),
@@ -330,7 +330,7 @@ pub fn resolver_installer_options(
330330
resolution,
331331
prerelease,
332332
pre,
333-
multi_version,
333+
fork_strategy,
334334
config_setting,
335335
no_build_isolation,
336336
no_build_isolation_package,
@@ -399,7 +399,7 @@ pub fn resolver_installer_options(
399399
} else {
400400
prerelease
401401
},
402-
multi_version,
402+
fork_strategy,
403403
dependency_metadata: None,
404404
config_settings: config_setting
405405
.map(|config_settings| config_settings.into_iter().collect::<ConfigSettings>()),

crates/uv-resolver/src/multi_version_mode.rs renamed to crates/uv-resolver/src/fork_strategy.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
#[serde(deny_unknown_fields, rename_all = "kebab-case")]
33
#[cfg_attr(feature = "clap", derive(clap::ValueEnum))]
44
#[cfg_attr(feature = "schemars", derive(schemars::JsonSchema))]
5-
pub enum MultiVersionMode {
5+
pub enum ForkStrategy {
66
/// Optimize for selecting the fewest number of versions for each package. Older versions may
77
/// be preferred if they are compatible with a wider range of supported Python versions or
88
/// platforms.
@@ -13,7 +13,7 @@ pub enum MultiVersionMode {
1313
RequiresPython,
1414
}
1515

16-
impl std::fmt::Display for MultiVersionMode {
16+
impl std::fmt::Display for ForkStrategy {
1717
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
1818
match self {
1919
Self::Fewest => write!(f, "fewest"),

crates/uv-resolver/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@ pub use error::{NoSolutionError, NoSolutionHeader, ResolveError, SentinelRange};
33
pub use exclude_newer::ExcludeNewer;
44
pub use exclusions::Exclusions;
55
pub use flat_index::{FlatDistributions, FlatIndex};
6+
pub use fork_strategy::ForkStrategy;
67
pub use lock::{
78
InstallTarget, Lock, LockError, LockVersion, PackageMap, RequirementsTxtExport,
89
ResolverManifest, SatisfiesResult, TreeDisplay, VERSION,
910
};
1011
pub use manifest::Manifest;
11-
pub use multi_version_mode::MultiVersionMode;
1212
pub use options::{Flexibility, Options, OptionsBuilder};
1313
pub use preferences::{Preference, PreferenceError, Preferences};
1414
pub use prerelease::PrereleaseMode;
@@ -42,12 +42,12 @@ mod exclude_newer;
4242
mod exclusions;
4343
mod flat_index;
4444
mod fork_indexes;
45+
mod fork_strategy;
4546
mod fork_urls;
4647
mod graph_ops;
4748
mod lock;
4849
mod manifest;
4950
mod marker;
50-
mod multi_version_mode;
5151
mod options;
5252
mod pins;
5353
mod preferences;

crates/uv-resolver/src/lock/mod.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ use std::sync::{Arc, LazyLock};
1313
use toml_edit::{value, Array, ArrayOfTables, InlineTable, Item, Table, Value};
1414
use url::Url;
1515

16+
use crate::fork_strategy::ForkStrategy;
1617
pub use crate::lock::map::PackageMap;
1718
pub use crate::lock::requirements_txt::RequirementsTxtExport;
1819
pub use crate::lock::target::InstallTarget;
1920
pub use crate::lock::tree::TreeDisplay;
20-
use crate::multi_version_mode::MultiVersionMode;
2121
use crate::requires_python::SimplifiedMarkerTree;
2222
use crate::resolution::{AnnotatedDist, ResolutionGraphNode};
2323
use crate::universal_marker::{ConflictMarker, UniversalMarker};
@@ -240,7 +240,7 @@ impl Lock {
240240
let options = ResolverOptions {
241241
resolution_mode: resolution.options.resolution_mode,
242242
prerelease_mode: resolution.options.prerelease_mode,
243-
multi_version_mode: resolution.options.multi_version_mode,
243+
fork_strategy: resolution.options.fork_strategy,
244244
exclude_newer: resolution.options.exclude_newer,
245245
};
246246
let lock = Self::new(
@@ -551,8 +551,8 @@ impl Lock {
551551
}
552552

553553
/// Returns the multi-version mode used to generate this lock.
554-
pub fn multi_version_mode(&self) -> MultiVersionMode {
555-
self.options.multi_version_mode
554+
pub fn fork_strategy(&self) -> ForkStrategy {
555+
self.options.fork_strategy
556556
}
557557

558558
/// Returns the exclude newer setting used to generate this lock.
@@ -682,10 +682,10 @@ impl Lock {
682682
value(self.options.prerelease_mode.to_string()),
683683
);
684684
}
685-
if self.options.multi_version_mode != MultiVersionMode::default() {
685+
if self.options.fork_strategy != ForkStrategy::default() {
686686
options_table.insert(
687-
"multi-version-mode",
688-
value(self.options.multi_version_mode.to_string()),
687+
"fork-strategy",
688+
value(self.options.fork_strategy.to_string()),
689689
);
690690
}
691691
if let Some(exclude_newer) = self.options.exclude_newer {
@@ -1330,9 +1330,9 @@ struct ResolverOptions {
13301330
/// The [`PrereleaseMode`] used to generate this lock.
13311331
#[serde(default)]
13321332
prerelease_mode: PrereleaseMode,
1333-
/// The [`MultiVersionMode`] used to generate this lock.
1333+
/// The [`ForkStrategy`] used to generate this lock.
13341334
#[serde(default)]
1335-
multi_version_mode: MultiVersionMode,
1335+
fork_strategy: ForkStrategy,
13361336
/// The [`ExcludeNewer`] used to generate this lock.
13371337
exclude_newer: Option<ExcludeNewer>,
13381338
}

crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__hash_optional_missing.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
source: crates/uv-resolver/src/lock/tests.rs
2+
source: crates/uv-resolver/src/lock/mod.rs
33
expression: result
44
---
55
Ok(
@@ -33,7 +33,7 @@ Ok(
3333
options: ResolverOptions {
3434
resolution_mode: Highest,
3535
prerelease_mode: IfNecessaryOrExplicit,
36-
multi_version_mode: Fewest,
36+
fork_strategy: RequiresPython,
3737
exclude_newer: None,
3838
},
3939
packages: [

crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__hash_optional_present.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
source: crates/uv-resolver/src/lock/tests.rs
2+
source: crates/uv-resolver/src/lock/mod.rs
33
expression: result
44
---
55
Ok(
@@ -33,7 +33,7 @@ Ok(
3333
options: ResolverOptions {
3434
resolution_mode: Highest,
3535
prerelease_mode: IfNecessaryOrExplicit,
36-
multi_version_mode: Fewest,
36+
fork_strategy: RequiresPython,
3737
exclude_newer: None,
3838
},
3939
packages: [

crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__hash_required_present.snap

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
---
2-
source: crates/uv-resolver/src/lock/tests.rs
2+
source: crates/uv-resolver/src/lock/mod.rs
33
expression: result
44
---
55
Ok(
@@ -33,7 +33,7 @@ Ok(
3333
options: ResolverOptions {
3434
resolution_mode: Highest,
3535
prerelease_mode: IfNecessaryOrExplicit,
36-
multi_version_mode: Fewest,
36+
fork_strategy: RequiresPython,
3737
exclude_newer: None,
3838
},
3939
packages: [

crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__missing_dependency_source_unambiguous.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Ok(
3333
options: ResolverOptions {
3434
resolution_mode: Highest,
3535
prerelease_mode: IfNecessaryOrExplicit,
36-
multi_version_mode: Fewest,
36+
fork_strategy: RequiresPython,
3737
exclude_newer: None,
3838
},
3939
packages: [

crates/uv-resolver/src/lock/snapshots/uv_resolver__lock__tests__missing_dependency_source_version_unambiguous.snap

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ Ok(
3333
options: ResolverOptions {
3434
resolution_mode: Highest,
3535
prerelease_mode: IfNecessaryOrExplicit,
36-
multi_version_mode: Fewest,
36+
fork_strategy: RequiresPython,
3737
exclude_newer: None,
3838
},
3939
packages: [

0 commit comments

Comments
 (0)