-
Notifications
You must be signed in to change notification settings - Fork 2.7k
Description
Summary
RFC (original, superseded): #1977
RFC: #3516
Compiler tracking issue: rust-lang/rust#44663
Implementation:
- part of the infrastructure for public & private dependencies in the resolver #6653
- Implement the 'frontend' of public-private dependencies #6772
- add public & private prop tests. #6962
- Support
public
dependency configuration with workspace deps #12817 - Limit
exported-private-dependencies
lints to libraries #13039 - fix(resolver): Remove unused public-deps error handling #13036
- Add
--public
support forcargo add
#13037 -
cargo add
should check public transitive dependencies when auto-picking a version #13038 - Switch public/private dependencies to a non-blocking feature gate #13308
- Include public/private dependency status in
cargo metadata
#14502 -
Command to update Cargo.lock to minimal versions (Command to update Cargo.lock to minimal versions #4100) -
Makecargo publish
use the minimal versions allowed by Cargo.toml - Ensure quality of error messages is sufficient
-
cargo fix
support forexported-private-dependencies
#13095 - Consider public dependencies when choosing a version in cargo add (#1… #15966
Non-blocking further improvements
Considerations for stabilization
Unresolved Issues
- How do we handle unifying
public
between more than one dependencies table (normal, target A normal, target B normal), bothpublic = <bool>
and default andpublic = true
withpublic = false
Known Issues
cargo add
that auto-selects a version req from a transitive dep can have confusing output due to extra resolve (Consider public dependencies when choosing a version in cargo add (#1… #15966 (comment))
Future Extensions
About tracking issues
Tracking issues are used to record the overall progress of implementation.
They are also used as hubs connecting to other relevant issues, e.g., bugs or open design questions.
A tracking issue is however not meant for large scale discussion, questions, or bug reports about a feature.
Instead, open a dedicated issue for the specific matter and add the relevant feature gate label.
Original issue
This is a sub part of the discussion of implementation of RFC 1977, specifically how the resolver could implement this protocol. The main Tracking issue is at rust-lang/rust#44663.
This comment rust-lang/rfcs#1977 (comment) described the properties we want to uphold the way that fits best with my brain.
So to use the termanology, I feel like when we are adding a packedge B
we need to walk up the dependency tree to all potential C
's that can see the addition to test if there is a conflicting A
.
That can be done pretty fast if we have a fast way to walk up dependency tree and a fast way to see all the pub reachable packages for each ancestor. (Neither of which we have at this time.)
But that feels like a lot of state to be cloned for each tick.
Currently we avoid the expensive clones with extensive use of RC.
Is it time to add a im-rs dependency?
Is there a better algorithm?
Is there a small part that would make a good starting PR?\
Metadata
Metadata
Assignees
Labels
Type
Projects
Status
Status