Ignore self requirements (#233)

gps3 0.33.3 depends on itself, which we can ignore. I've also added the
home assistant requirements since it occurred when testing with this.
This commit is contained in:
konsti 2023-10-30 17:13:52 +01:00 committed by GitHub
parent 0be20a41a4
commit d47dc64974
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 3050 additions and 4 deletions

View file

@ -1,6 +1,7 @@
use anyhow::Result;
use itertools::Itertools;
use pubgrub::range::Range;
use tracing::warn;
use pep508_rs::{MarkerEnvironment, Requirement};
use puffin_package::dist_info_name::DistInfoName;
@ -20,9 +21,20 @@ mod version;
pub(crate) fn iter_requirements<'a>(
requirements: impl Iterator<Item = &'a Requirement> + 'a,
extra: Option<&'a DistInfoName>,
source: Option<&'a PackageName>,
env: &'a MarkerEnvironment,
) -> impl Iterator<Item = (PubGrubPackage, Range<PubGrubVersion>)> + 'a {
requirements
.filter(move |requirement| {
let normalized = PackageName::normalize(&requirement.name);
if source.is_some_and(|source| source == &normalized) {
// TODO: Warn only once here
warn!("{} depends on itself", normalized);
false
} else {
true
}
})
.filter(move |requirement| {
// TODO(charlie): We shouldn't need a vector here.
let extra = if let Some(extra) = extra {

View file

@ -390,7 +390,7 @@ impl<'a, Context: BuildContext + Sync> Resolver<'a, Context> {
// Add the root requirements.
for (package, version) in
iter_requirements(self.requirements.iter(), None, self.markers)
iter_requirements(self.requirements.iter(), None, None, self.markers)
{
// Emit a request to fetch the metadata for this package.
if let PubGrubPackage::Package(package_name, None) = &package {
@ -443,9 +443,12 @@ impl<'a, Context: BuildContext + Sync> Resolver<'a, Context> {
let mut constraints =
DependencyConstraints::<PubGrubPackage, Range<PubGrubVersion>>::default();
for (package, version) in
iter_requirements(metadata.requires_dist.iter(), extra.as_ref(), self.markers)
{
for (package, version) in iter_requirements(
metadata.requires_dist.iter(),
extra.as_ref(),
Some(package_name),
self.markers,
) {
debug!("Adding transitive dependency: {package} {version}");
// Emit a request to fetch the metadata for this package.

File diff suppressed because it is too large Load diff