Implement `CacheKey` for all `Pep508Url` variants (#14978)

Closes #14973
This commit is contained in:
Zanie Blue 2025-07-30 10:44:06 -05:00 committed by GitHub
parent a76e538aa5
commit c9d3d60a18
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 19 additions and 6 deletions

1
Cargo.lock generated
View File

@ -5646,6 +5646,7 @@ dependencies = [
"toml_edit",
"tracing",
"url",
"uv-cache-key",
"uv-distribution-filename",
"uv-git-types",
"uv-normalize",

View File

@ -252,10 +252,7 @@ impl<T: Pep508Url> Serialize for Requirement<T> {
}
}
impl<T: Pep508Url> CacheKey for Requirement<T>
where
T: Display,
{
impl<T: Pep508Url> CacheKey for Requirement<T> {
fn cache_key(&self, state: &mut CacheKeyHasher) {
self.name.as_str().cache_key(state);
@ -280,7 +277,7 @@ where
}
VersionOrUrl::Url(url) => {
1u8.cache_key(state);
url.to_string().cache_key(state);
url.cache_key(state);
}
}
} else {
@ -330,7 +327,7 @@ impl<T: Pep508Url> Requirement<T> {
}
/// Type to parse URLs from `name @ <url>` into. Defaults to [`Url`].
pub trait Pep508Url: Display + Debug + Sized {
pub trait Pep508Url: Display + Debug + Sized + CacheKey {
/// String to URL parsing error
type Err: Error + Debug;

View File

@ -10,6 +10,7 @@ use arcstr::ArcStr;
use regex::Regex;
use thiserror::Error;
use url::{ParseError, Url};
use uv_cache_key::{CacheKey, CacheKeyHasher};
#[cfg_attr(not(feature = "non-pep508-extensions"), allow(unused_imports))]
use uv_fs::{normalize_absolute_path, normalize_url_path};
@ -37,6 +38,12 @@ impl Hash for VerbatimUrl {
}
}
impl CacheKey for VerbatimUrl {
fn cache_key(&self, state: &mut CacheKeyHasher) {
self.url.as_str().cache_key(state);
}
}
impl PartialEq for VerbatimUrl {
fn eq(&self, other: &Self) -> bool {
self.url == other.url

View File

@ -16,6 +16,7 @@ doctest = false
workspace = true
[dependencies]
uv-cache-key = { workspace = true }
uv-distribution-filename = { workspace = true }
uv-git-types = { workspace = true }
uv-normalize = { workspace = true }

View File

@ -3,6 +3,7 @@ use std::path::{Path, PathBuf};
use thiserror::Error;
use url::{ParseError, Url};
use uv_cache_key::{CacheKey, CacheKeyHasher};
use uv_distribution_filename::{DistExtension, ExtensionError};
use uv_git_types::{GitUrl, GitUrlParseError};
@ -45,6 +46,12 @@ pub struct VerbatimParsedUrl {
pub verbatim: VerbatimUrl,
}
impl CacheKey for VerbatimParsedUrl {
fn cache_key(&self, state: &mut CacheKeyHasher) {
self.verbatim.cache_key(state);
}
}
impl VerbatimParsedUrl {
/// Returns `true` if the URL is editable.
pub fn is_editable(&self) -> bool {