Avoid inferring package name for GitHub Archives (#4928)

## Summary

Closes https://github.com/astral-sh/uv/issues/4917.
This commit is contained in:
Charlie Marsh 2024-07-09 10:30:43 -07:00 committed by GitHub
parent 0bf562f197
commit 2e307d9081
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -7,6 +7,7 @@ use configparser::ini::Ini;
use futures::{stream::FuturesOrdered, TryStreamExt};
use serde::Deserialize;
use tracing::debug;
use url::Host;
use distribution_filename::{SourceDistFilename, WheelFilename};
use distribution_types::{
@ -128,6 +129,24 @@ impl<'a, Context: BuildContext> NamedRequirementsResolver<'a, Context> {
.ok()
.and_then(|filename| SourceDistFilename::parsed_normalized_filename(&filename).ok())
{
// But ignore GitHub archives, like:
// https://github.com/python/mypy/archive/refs/heads/release-1.11.zip
//
// These have auto-generated filenames that will almost never match the package name.
if requirement.url.verbatim.host() == Some(Host::Domain("github.com"))
&& requirement
.url
.verbatim
.path_segments()
.is_some_and(|mut path_segments| {
path_segments.any(|segment| segment == "archive")
})
{
debug!(
"Rejecting inferred name from GitHub archive: {}",
requirement.url.verbatim
);
} else {
return Ok(pep508_rs::Requirement {
name: filename.name,
extras: requirement.extras,
@ -136,6 +155,7 @@ impl<'a, Context: BuildContext> NamedRequirementsResolver<'a, Context> {
origin: requirement.origin,
});
}
}
let source = match &requirement.url.parsed_url {
// If the path points to a directory, attempt to read the name from static metadata.