Skip to content

Commit

Permalink
Ignore inverse dependencies when building graph (#2360)
Browse files Browse the repository at this point in the history
## Summary

It turns out that when we iterate over the incompatibilities of a
package, PubGrub will _also_ show us the inverse dependencies. I suspect
this was rare, because we have a version check at the bottom... So, this
specifically required that you had some dependency that didn't end up
appearing in the output resolution, but that matched the version
constraints of the package you care about.

In this case, `langchain-community` depends on `langchain-core`. So we
were seeing an incompatibility like:

```rust
FromDependencyOf(Package(PackageName("langchain-community"), None, None), Range { segments: [(Included("0.0.10"), Included("0.0.10")), (Included("0.0.11"), Included("0.0.11"))] }, Package(PackageName("langchain-core"), None, None), Range { segments: [(Included("0.1.8"), Excluded("0.2"))] })
```

Where we were iterating over `langchain-core`, and looking for version
`0.0.11`... which happens to match `langchain-community`.
(`langchain-community was omitted from the resolution; hence, it didn't
exist in the map.)

Closes #2358.
  • Loading branch information
charliermarsh authored Mar 11, 2024
1 parent f70ae72 commit a292817
Showing 1 changed file with 8 additions and 0 deletions.
8 changes: 8 additions & 0 deletions crates/uv-resolver/src/resolution.rs
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,14 @@ impl ResolutionGraph {
dependency_range,
) = &state.incompatibility_store[*id].kind
{
// `Kind::FromDependencyOf` will include inverse dependencies. That is, if we're
// looking for a package `A`, this list will include incompatibilities of
// package `B` _depending on_ `A`. We're only interested in packages that `A`
// depends on.
if package != self_package {
continue;
}

let PubGrubPackage::Package(self_package, _, _) = self_package else {
continue;
};
Expand Down

0 comments on commit a292817

Please sign in to comment.