Allow conflicting Git URLs that refer to the same commit SHA (#2769)

## Summary

This PR leverages our lookahead direct URL resolution to significantly
improve the range of Git URLs that we can accept (e.g., if a user
provides the same requirement, once as a direct dependency, and once as
a tag). We did some of this in #2285, but the solution here is more
general and works for arbitrary transitive URLs.

Closes https://github.com/astral-sh/uv/issues/2614.
This commit is contained in:
Charlie Marsh 2024-04-02 19:36:35 -04:00 committed by GitHub
parent 20d4762776
commit c30a65ee0c
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 267 additions and 158 deletions

View file

@ -96,9 +96,8 @@ impl<'a, Context: BuildContext + Send + Sync> LookaheadResolver<'a, Context> {
while !queue.is_empty() || !futures.is_empty() {
while let Some(requirement) = queue.pop_front() {
// Ignore duplicates. If we have conflicting URLs, we'll catch that later.
if matches!(requirement.version_or_url, Some(VersionOrUrl::Url(_))) {
if seen.insert(requirement.name.clone()) {
if seen.insert(requirement.clone()) {
futures.push(self.lookahead(requirement));
}
}