Use `Cow` for source call (#3377)

This commit is contained in:
Charlie Marsh 2024-05-04 22:21:24 -04:00 committed by GitHub
parent 37635fda56
commit 6d73db2b1e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 6 additions and 5 deletions

View File

@ -1,3 +1,4 @@
use std::borrow::Cow;
use std::fmt::{Display, Formatter}; use std::fmt::{Display, Formatter};
use pep508_rs::{MarkerEnvironment, UnnamedRequirement}; use pep508_rs::{MarkerEnvironment, UnnamedRequirement};
@ -58,16 +59,16 @@ impl UnresolvedRequirement {
} }
/// Return the version specifier or URL for the requirement. /// Return the version specifier or URL for the requirement.
pub fn source(&self) -> Result<RequirementSource, ParsedUrlError> { pub fn source(&self) -> Result<Cow<'_, RequirementSource>, ParsedUrlError> {
// TODO(konsti): This is a bad place to raise errors, we should have parsed the url earlier. // TODO(konsti): This is a bad place to raise errors, we should have parsed the url earlier.
match self { match self {
Self::Named(requirement) => Ok(requirement.source.clone()), Self::Named(requirement) => Ok(Cow::Borrowed(&requirement.source)),
Self::Unnamed(requirement) => { Self::Unnamed(requirement) => {
let parsed_url = ParsedUrl::try_from(requirement.url.to_url())?; let parsed_url = ParsedUrl::try_from(requirement.url.to_url())?;
Ok(RequirementSource::from_parsed_url( Ok(Cow::Owned(RequirementSource::from_parsed_url(
parsed_url, parsed_url,
requirement.url.clone(), requirement.url.clone(),
)) )))
} }
} }
} }

View File

@ -365,7 +365,7 @@ impl<'a> SitePackages<'a> {
[distribution] => { [distribution] => {
match RequirementSatisfaction::check( match RequirementSatisfaction::check(
distribution, distribution,
&entry.requirement.source()?, entry.requirement.source()?.as_ref(),
)? { )? {
RequirementSatisfaction::Mismatch | RequirementSatisfaction::OutOfDate => { RequirementSatisfaction::Mismatch | RequirementSatisfaction::OutOfDate => {
return Ok(SatisfiesResult::Unsatisfied(entry.requirement.to_string())) return Ok(SatisfiesResult::Unsatisfied(entry.requirement.to_string()))