43181f1933
## Summary This index strategy resolves every package to the latest possible version across indexes. If a version is in multiple indexes, the first available index is selected. Implements #3137 This closely matches pip. ## Test Plan Good question. I'm hesitant to use my certifi example here, since that would inevitably break when torch removes this package. Please comment!
77 lines
2.1 KiB
Rust
77 lines
2.1 KiB
Rust
use uv_configuration::IndexStrategy;
|
|
|
|
use crate::{DependencyMode, ExcludeNewer, PreReleaseMode, ResolutionMode};
|
|
|
|
/// Options for resolving a manifest.
|
|
#[derive(Debug, Default, Copy, Clone)]
|
|
pub struct Options {
|
|
pub resolution_mode: ResolutionMode,
|
|
pub prerelease_mode: PreReleaseMode,
|
|
pub dependency_mode: DependencyMode,
|
|
pub exclude_newer: Option<ExcludeNewer>,
|
|
pub index_strategy: IndexStrategy,
|
|
}
|
|
|
|
/// Builder for [`Options`].
|
|
#[derive(Debug, Default, Clone)]
|
|
pub struct OptionsBuilder {
|
|
resolution_mode: ResolutionMode,
|
|
prerelease_mode: PreReleaseMode,
|
|
dependency_mode: DependencyMode,
|
|
exclude_newer: Option<ExcludeNewer>,
|
|
index_strategy: IndexStrategy,
|
|
}
|
|
|
|
impl OptionsBuilder {
|
|
/// Creates a new builder.
|
|
pub fn new() -> Self {
|
|
Self::default()
|
|
}
|
|
|
|
/// Sets the [`ResolutionMode`].
|
|
#[must_use]
|
|
pub fn resolution_mode(mut self, resolution_mode: ResolutionMode) -> Self {
|
|
self.resolution_mode = resolution_mode;
|
|
self
|
|
}
|
|
|
|
/// Sets the [`PreReleaseMode`].
|
|
#[must_use]
|
|
pub fn prerelease_mode(mut self, prerelease_mode: PreReleaseMode) -> Self {
|
|
self.prerelease_mode = prerelease_mode;
|
|
self
|
|
}
|
|
|
|
/// Sets the dependency mode.
|
|
#[must_use]
|
|
pub fn dependency_mode(mut self, dependency_mode: DependencyMode) -> Self {
|
|
self.dependency_mode = dependency_mode;
|
|
self
|
|
}
|
|
|
|
/// Sets the exclusion date.
|
|
#[must_use]
|
|
pub fn exclude_newer(mut self, exclude_newer: Option<ExcludeNewer>) -> Self {
|
|
self.exclude_newer = exclude_newer;
|
|
self
|
|
}
|
|
|
|
/// Sets the index strategy.
|
|
#[must_use]
|
|
pub fn index_strategy(mut self, index_strategy: IndexStrategy) -> Self {
|
|
self.index_strategy = index_strategy;
|
|
self
|
|
}
|
|
|
|
/// Builds the options.
|
|
pub fn build(self) -> Options {
|
|
Options {
|
|
resolution_mode: self.resolution_mode,
|
|
prerelease_mode: self.prerelease_mode,
|
|
dependency_mode: self.dependency_mode,
|
|
exclude_newer: self.exclude_newer,
|
|
index_strategy: self.index_strategy,
|
|
}
|
|
}
|
|
}
|