mirror of
https://github.com/astral-sh/uv.git
synced 2025-11-19 11:35:36 +00:00
Refactor to remove some cruft from ExcludeNewer propagation (#16641)
I think using a wire here is less convoluted.
This commit is contained in:
parent
e0ae518e95
commit
5983a8876b
16 changed files with 103 additions and 58 deletions
|
|
@ -59,8 +59,8 @@ pub use crate::lock::tree::TreeDisplay;
|
|||
use crate::resolution::{AnnotatedDist, ResolutionGraphNode};
|
||||
use crate::universal_marker::{ConflictMarker, UniversalMarker};
|
||||
use crate::{
|
||||
ExcludeNewer, ExcludeNewerTimestamp, InMemoryIndex, MetadataResponse, PrereleaseMode,
|
||||
ResolutionMode, ResolverOutput,
|
||||
ExcludeNewer, ExcludeNewerPackage, ExcludeNewerTimestamp, InMemoryIndex, MetadataResponse,
|
||||
PrereleaseMode, ResolutionMode, ResolverOutput,
|
||||
};
|
||||
|
||||
mod export;
|
||||
|
|
@ -342,23 +342,12 @@ impl Lock {
|
|||
}
|
||||
|
||||
let packages = packages.into_values().collect();
|
||||
let (exclude_newer, exclude_newer_package) = {
|
||||
let exclude_newer = &resolution.options.exclude_newer;
|
||||
let global_exclude_newer = exclude_newer.global;
|
||||
let package_exclude_newer = if exclude_newer.package.is_empty() {
|
||||
None
|
||||
} else {
|
||||
Some(exclude_newer.package.clone().into_inner())
|
||||
};
|
||||
(global_exclude_newer, package_exclude_newer)
|
||||
};
|
||||
|
||||
let options = ResolverOptions {
|
||||
resolution_mode: resolution.options.resolution_mode,
|
||||
prerelease_mode: resolution.options.prerelease_mode,
|
||||
fork_strategy: resolution.options.fork_strategy,
|
||||
exclude_newer,
|
||||
exclude_newer_package,
|
||||
exclude_newer: resolution.options.exclude_newer.clone().into(),
|
||||
};
|
||||
let lock = Self::new(
|
||||
VERSION,
|
||||
|
|
@ -818,7 +807,9 @@ impl Lock {
|
|||
|
||||
/// Returns the exclude newer setting used to generate this lock.
|
||||
pub fn exclude_newer(&self) -> ExcludeNewer {
|
||||
self.options.exclude_newer()
|
||||
// TODO(zanieb): It'd be nice not to hide this clone here, but I am hesitant to introduce
|
||||
// a whole new `ExcludeNewerRef` type just for this
|
||||
self.options.exclude_newer.clone().into()
|
||||
}
|
||||
|
||||
/// Returns the conflicting groups that were used to generate this lock.
|
||||
|
|
@ -1065,7 +1056,7 @@ impl Lock {
|
|||
value(self.options.fork_strategy.to_string()),
|
||||
);
|
||||
}
|
||||
let exclude_newer = &self.options.exclude_newer();
|
||||
let exclude_newer = ExcludeNewer::from(self.options.exclude_newer.clone());
|
||||
if !exclude_newer.is_empty() {
|
||||
// Always serialize global exclude-newer as a string
|
||||
if let Some(global) = exclude_newer.global {
|
||||
|
|
@ -2131,24 +2122,34 @@ struct ResolverOptions {
|
|||
/// The [`ForkStrategy`] used to generate this lock.
|
||||
#[serde(default)]
|
||||
fork_strategy: ForkStrategy,
|
||||
/// The global [`ExcludeNewer`] timestamp.
|
||||
exclude_newer: Option<ExcludeNewerTimestamp>,
|
||||
/// Package-specific [`ExcludeNewer`] timestamps.
|
||||
exclude_newer_package: Option<FxHashMap<PackageName, ExcludeNewerTimestamp>>,
|
||||
/// The [`ExcludeNewer`] setting used to generate this lock.
|
||||
#[serde(flatten)]
|
||||
exclude_newer: ExcludeNewerWire,
|
||||
}
|
||||
|
||||
impl ResolverOptions {
|
||||
/// Get the combined exclude-newer configuration.
|
||||
fn exclude_newer(&self) -> ExcludeNewer {
|
||||
ExcludeNewer::from_args(
|
||||
self.exclude_newer,
|
||||
self.exclude_newer_package
|
||||
.clone()
|
||||
.unwrap_or_default()
|
||||
.into_iter()
|
||||
.map(Into::into)
|
||||
.collect(),
|
||||
)
|
||||
#[derive(Clone, Debug, Default, serde::Deserialize, PartialEq, Eq)]
|
||||
#[serde(rename_all = "kebab-case")]
|
||||
struct ExcludeNewerWire {
|
||||
exclude_newer: Option<ExcludeNewerTimestamp>,
|
||||
#[serde(default, skip_serializing_if = "ExcludeNewerPackage::is_empty")]
|
||||
exclude_newer_package: ExcludeNewerPackage,
|
||||
}
|
||||
|
||||
impl From<ExcludeNewerWire> for ExcludeNewer {
|
||||
fn from(wire: ExcludeNewerWire) -> Self {
|
||||
Self {
|
||||
global: wire.exclude_newer,
|
||||
package: wire.exclude_newer_package,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl From<ExcludeNewer> for ExcludeNewerWire {
|
||||
fn from(exclude_newer: ExcludeNewer) -> Self {
|
||||
Self {
|
||||
exclude_newer: exclude_newer.global,
|
||||
exclude_newer_package: exclude_newer.package,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -36,8 +36,12 @@ Ok(
|
|||
resolution_mode: Highest,
|
||||
prerelease_mode: IfNecessaryOrExplicit,
|
||||
fork_strategy: RequiresPython,
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: None,
|
||||
exclude_newer: ExcludeNewerWire {
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: ExcludeNewerPackage(
|
||||
{},
|
||||
),
|
||||
},
|
||||
},
|
||||
packages: [
|
||||
Package {
|
||||
|
|
|
|||
|
|
@ -36,8 +36,12 @@ Ok(
|
|||
resolution_mode: Highest,
|
||||
prerelease_mode: IfNecessaryOrExplicit,
|
||||
fork_strategy: RequiresPython,
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: None,
|
||||
exclude_newer: ExcludeNewerWire {
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: ExcludeNewerPackage(
|
||||
{},
|
||||
),
|
||||
},
|
||||
},
|
||||
packages: [
|
||||
Package {
|
||||
|
|
|
|||
|
|
@ -36,8 +36,12 @@ Ok(
|
|||
resolution_mode: Highest,
|
||||
prerelease_mode: IfNecessaryOrExplicit,
|
||||
fork_strategy: RequiresPython,
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: None,
|
||||
exclude_newer: ExcludeNewerWire {
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: ExcludeNewerPackage(
|
||||
{},
|
||||
),
|
||||
},
|
||||
},
|
||||
packages: [
|
||||
Package {
|
||||
|
|
|
|||
|
|
@ -36,8 +36,12 @@ Ok(
|
|||
resolution_mode: Highest,
|
||||
prerelease_mode: IfNecessaryOrExplicit,
|
||||
fork_strategy: RequiresPython,
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: None,
|
||||
exclude_newer: ExcludeNewerWire {
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: ExcludeNewerPackage(
|
||||
{},
|
||||
),
|
||||
},
|
||||
},
|
||||
packages: [
|
||||
Package {
|
||||
|
|
|
|||
|
|
@ -36,8 +36,12 @@ Ok(
|
|||
resolution_mode: Highest,
|
||||
prerelease_mode: IfNecessaryOrExplicit,
|
||||
fork_strategy: RequiresPython,
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: None,
|
||||
exclude_newer: ExcludeNewerWire {
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: ExcludeNewerPackage(
|
||||
{},
|
||||
),
|
||||
},
|
||||
},
|
||||
packages: [
|
||||
Package {
|
||||
|
|
|
|||
|
|
@ -36,8 +36,12 @@ Ok(
|
|||
resolution_mode: Highest,
|
||||
prerelease_mode: IfNecessaryOrExplicit,
|
||||
fork_strategy: RequiresPython,
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: None,
|
||||
exclude_newer: ExcludeNewerWire {
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: ExcludeNewerPackage(
|
||||
{},
|
||||
),
|
||||
},
|
||||
},
|
||||
packages: [
|
||||
Package {
|
||||
|
|
|
|||
|
|
@ -36,8 +36,12 @@ Ok(
|
|||
resolution_mode: Highest,
|
||||
prerelease_mode: IfNecessaryOrExplicit,
|
||||
fork_strategy: RequiresPython,
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: None,
|
||||
exclude_newer: ExcludeNewerWire {
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: ExcludeNewerPackage(
|
||||
{},
|
||||
),
|
||||
},
|
||||
},
|
||||
packages: [
|
||||
Package {
|
||||
|
|
|
|||
|
|
@ -36,8 +36,12 @@ Ok(
|
|||
resolution_mode: Highest,
|
||||
prerelease_mode: IfNecessaryOrExplicit,
|
||||
fork_strategy: RequiresPython,
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: None,
|
||||
exclude_newer: ExcludeNewerWire {
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: ExcludeNewerPackage(
|
||||
{},
|
||||
),
|
||||
},
|
||||
},
|
||||
packages: [
|
||||
Package {
|
||||
|
|
|
|||
|
|
@ -36,8 +36,12 @@ Ok(
|
|||
resolution_mode: Highest,
|
||||
prerelease_mode: IfNecessaryOrExplicit,
|
||||
fork_strategy: RequiresPython,
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: None,
|
||||
exclude_newer: ExcludeNewerWire {
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: ExcludeNewerPackage(
|
||||
{},
|
||||
),
|
||||
},
|
||||
},
|
||||
packages: [
|
||||
Package {
|
||||
|
|
|
|||
|
|
@ -36,8 +36,12 @@ Ok(
|
|||
resolution_mode: Highest,
|
||||
prerelease_mode: IfNecessaryOrExplicit,
|
||||
fork_strategy: RequiresPython,
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: None,
|
||||
exclude_newer: ExcludeNewerWire {
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: ExcludeNewerPackage(
|
||||
{},
|
||||
),
|
||||
},
|
||||
},
|
||||
packages: [
|
||||
Package {
|
||||
|
|
|
|||
|
|
@ -36,8 +36,12 @@ Ok(
|
|||
resolution_mode: Highest,
|
||||
prerelease_mode: IfNecessaryOrExplicit,
|
||||
fork_strategy: RequiresPython,
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: None,
|
||||
exclude_newer: ExcludeNewerWire {
|
||||
exclude_newer: None,
|
||||
exclude_newer_package: ExcludeNewerPackage(
|
||||
{},
|
||||
),
|
||||
},
|
||||
},
|
||||
packages: [
|
||||
Package {
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ pub(crate) struct LatestClient<'env> {
|
|||
pub(crate) client: &'env RegistryClient,
|
||||
pub(crate) capabilities: &'env IndexCapabilities,
|
||||
pub(crate) prerelease: PrereleaseMode,
|
||||
pub(crate) exclude_newer: ExcludeNewer,
|
||||
pub(crate) exclude_newer: &'env ExcludeNewer,
|
||||
pub(crate) tags: Option<&'env Tags>,
|
||||
pub(crate) requires_python: &'env RequiresPython,
|
||||
}
|
||||
|
|
|
|||
|
|
@ -111,7 +111,7 @@ pub(crate) async fn pip_list(
|
|||
client: &client,
|
||||
capabilities: &capabilities,
|
||||
prerelease,
|
||||
exclude_newer,
|
||||
exclude_newer: &exclude_newer,
|
||||
tags: Some(tags),
|
||||
requires_python: &requires_python,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ pub(crate) async fn pip_tree(
|
|||
client: &client,
|
||||
capabilities: &capabilities,
|
||||
prerelease,
|
||||
exclude_newer,
|
||||
exclude_newer: &exclude_newer,
|
||||
tags: Some(tags),
|
||||
requires_python: &requires_python,
|
||||
};
|
||||
|
|
|
|||
|
|
@ -229,7 +229,7 @@ pub(crate) async fn tree(
|
|||
client: &client,
|
||||
capabilities: &capabilities,
|
||||
prerelease: lock.prerelease_mode(),
|
||||
exclude_newer: lock.exclude_newer(),
|
||||
exclude_newer: &lock.exclude_newer(),
|
||||
requires_python: lock.requires_python(),
|
||||
tags: None,
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue