From 95af1db0bb2cc7864fbf8ba0ca6758c70c8a08ce Mon Sep 17 00:00:00 2001 From: konsti Date: Tue, 21 May 2024 16:34:43 +0200 Subject: [PATCH] Let `RequirementSource::Path.editable` be `bool`, not `Option` (#3693) Small refactoring of the internal representation. This does not change `tool.uv.sources`. --- crates/distribution-types/src/requirement.rs | 4 ++-- crates/distribution-types/src/resolution.rs | 6 +++--- crates/uv-installer/src/satisfies.rs | 5 ++--- crates/uv-requirements/src/pyproject.rs | 6 +++--- crates/uv-requirements/src/specification.rs | 2 +- crates/uv-resolver/src/resolver/urls.rs | 2 +- 6 files changed, 12 insertions(+), 13 deletions(-) diff --git a/crates/distribution-types/src/requirement.rs b/crates/distribution-types/src/requirement.rs index c0f7ad4a5..625fd6def 100644 --- a/crates/distribution-types/src/requirement.rs +++ b/crates/distribution-types/src/requirement.rs @@ -174,7 +174,7 @@ pub enum RequirementSource { Path { path: PathBuf, /// For a source tree (a directory), whether to install as an editable. - editable: Option, + editable: bool, /// The PEP 508 style URL in the format /// `file:///#subdirectory=`. url: VerbatimUrl, @@ -189,7 +189,7 @@ impl RequirementSource { ParsedUrl::Path(local_file) => RequirementSource::Path { path: local_file.path, url, - editable: None, + editable: false, }, ParsedUrl::Git(git) => RequirementSource::Git { url, diff --git a/crates/distribution-types/src/resolution.rs b/crates/distribution-types/src/resolution.rs index 39a0c0758..b7b76a98a 100644 --- a/crates/distribution-types/src/resolution.rs +++ b/crates/distribution-types/src/resolution.rs @@ -94,7 +94,7 @@ impl From<&ResolvedDist> for Requirement { Dist::Built(BuiltDist::Path(wheel)) => RequirementSource::Path { path: wheel.path.clone(), url: wheel.url.clone(), - editable: None, + editable: false, }, Dist::Source(SourceDist::Registry(sdist)) => RequirementSource::Registry { specifier: pep440_rs::VersionSpecifiers::from( @@ -121,12 +121,12 @@ impl From<&ResolvedDist> for Requirement { Dist::Source(SourceDist::Path(sdist)) => RequirementSource::Path { path: sdist.path.clone(), url: sdist.url.clone(), - editable: None, + editable: false, }, Dist::Source(SourceDist::Directory(sdist)) => RequirementSource::Path { path: sdist.path.clone(), url: sdist.url.clone(), - editable: Some(sdist.editable), + editable: sdist.editable, }, }, ResolvedDist::Installed(dist) => RequirementSource::Registry { diff --git a/crates/uv-installer/src/satisfies.rs b/crates/uv-installer/src/satisfies.rs index 5b1779ac4..a6f5f7f73 100644 --- a/crates/uv-installer/src/satisfies.rs +++ b/crates/uv-installer/src/satisfies.rs @@ -163,11 +163,10 @@ impl RequirementSatisfaction { return Ok(Self::Mismatch); }; - if requested_editable.unwrap_or_default() != installed_editable.unwrap_or_default() - { + if *requested_editable != installed_editable.unwrap_or_default() { trace!( "Editable mismatch: {:?} vs. {:?}", - requested_editable.unwrap_or_default(), + *requested_editable, installed_editable.unwrap_or_default() ); return Ok(Self::Mismatch); diff --git a/crates/uv-requirements/src/pyproject.rs b/crates/uv-requirements/src/pyproject.rs index 8f3b680a9..873e5cc6e 100644 --- a/crates/uv-requirements/src/pyproject.rs +++ b/crates/uv-requirements/src/pyproject.rs @@ -496,7 +496,7 @@ pub(crate) fn lower_requirement( if matches!(requirement.version_or_url, Some(VersionOrUrl::Url(_))) { return Err(LoweringError::ConflictingUrls); } - path_source(path, project_dir, editable)? + path_source(path, project_dir, editable.unwrap_or(false))? } Source::Registry { index } => match requirement.version_or_url { None => { @@ -529,7 +529,7 @@ pub(crate) fn lower_requirement( .get(&requirement.name) .ok_or(LoweringError::UndeclaredWorkspacePackage)? .clone(); - path_source(path, project_dir, editable)? + path_source(path, project_dir, editable.unwrap_or(true))? } Source::CatchAll { .. } => { // Emit a dedicated error message, which is an improvement over Serde's default error. @@ -549,7 +549,7 @@ pub(crate) fn lower_requirement( fn path_source( path: String, project_dir: &Path, - editable: Option, + editable: bool, ) -> Result { let url = VerbatimUrl::parse_path(&path, project_dir).with_given(path.clone()); let path_buf = PathBuf::from(&path); diff --git a/crates/uv-requirements/src/specification.rs b/crates/uv-requirements/src/specification.rs index e3fc5a7e3..085166f0b 100644 --- a/crates/uv-requirements/src/specification.rs +++ b/crates/uv-requirements/src/specification.rs @@ -184,7 +184,7 @@ impl RequirementsSpecification { .partition_map(|requirement| { if let RequirementSource::Path { path, - editable: Some(true), + editable: true, url, } = requirement.source { diff --git a/crates/uv-resolver/src/resolver/urls.rs b/crates/uv-resolver/src/resolver/urls.rs index ba62024e4..95867a3ee 100644 --- a/crates/uv-resolver/src/resolver/urls.rs +++ b/crates/uv-resolver/src/resolver/urls.rs @@ -89,7 +89,7 @@ impl Urls { parsed_url: ParsedUrl::Path(ParsedPathUrl { url: url.to_url(), path: path.clone(), - editable: (*editable).unwrap_or_default(), + editable: *editable, }), verbatim: url.clone(), };