diff --git a/crates/distribution-types/src/specified_requirement.rs b/crates/distribution-types/src/specified_requirement.rs index 0a2867c50..b7baba012 100644 --- a/crates/distribution-types/src/specified_requirement.rs +++ b/crates/distribution-types/src/specified_requirement.rs @@ -1,3 +1,4 @@ +use std::borrow::Cow; use std::fmt::{Display, Formatter}; use pep508_rs::{MarkerEnvironment, UnnamedRequirement}; @@ -58,16 +59,16 @@ impl UnresolvedRequirement { } /// Return the version specifier or URL for the requirement. - pub fn source(&self) -> Result { + pub fn source(&self) -> Result, ParsedUrlError> { // TODO(konsti): This is a bad place to raise errors, we should have parsed the url earlier. match self { - Self::Named(requirement) => Ok(requirement.source.clone()), + Self::Named(requirement) => Ok(Cow::Borrowed(&requirement.source)), Self::Unnamed(requirement) => { let parsed_url = ParsedUrl::try_from(requirement.url.to_url())?; - Ok(RequirementSource::from_parsed_url( + Ok(Cow::Owned(RequirementSource::from_parsed_url( parsed_url, requirement.url.clone(), - )) + ))) } } } diff --git a/crates/uv-installer/src/site_packages.rs b/crates/uv-installer/src/site_packages.rs index 6742b6463..2acb8154a 100644 --- a/crates/uv-installer/src/site_packages.rs +++ b/crates/uv-installer/src/site_packages.rs @@ -365,7 +365,7 @@ impl<'a> SitePackages<'a> { [distribution] => { match RequirementSatisfaction::check( distribution, - &entry.requirement.source()?, + entry.requirement.source()?.as_ref(), )? { RequirementSatisfaction::Mismatch | RequirementSatisfaction::OutOfDate => { return Ok(SatisfiesResult::Unsatisfied(entry.requirement.to_string()))