@@ -6,8 +6,8 @@ use crate::core::dependency::DepKind;
66use crate :: core:: resolver:: Resolve ;
77use crate :: core:: resolver:: features:: { CliFeatures , FeaturesFor , ResolvedFeatures } ;
88use crate :: core:: { FeatureMap , FeatureValue , Package , PackageId , PackageIdSpec , Workspace } ;
9- use crate :: util:: CargoResult ;
109use crate :: util:: interning:: { INTERNED_DEFAULT , InternedString } ;
10+ use crate :: util:: { CargoResult , OptVersionReq } ;
1111use std:: collections:: { HashMap , HashSet } ;
1212
1313#[ derive( Debug , Copy , Clone ) ]
@@ -161,6 +161,8 @@ pub struct Graph<'a> {
161161 /// Key is the index of a package node, value is a map of `dep_name` to a
162162 /// set of `(pkg_node_index, is_optional)`.
163163 dep_name_map : HashMap < NodeId , HashMap < InternedString , HashSet < ( NodeId , bool ) > > > ,
164+ /// Map for looking up version requirements for dependency packages.
165+ version_req_map : HashMap < PackageId , OptVersionReq > ,
164166}
165167
166168impl < ' a > Graph < ' a > {
@@ -172,6 +174,7 @@ impl<'a> Graph<'a> {
172174 package_map,
173175 cli_features : HashSet :: new ( ) ,
174176 dep_name_map : HashMap :: new ( ) ,
177+ version_req_map : HashMap :: new ( ) ,
175178 }
176179 }
177180
@@ -240,6 +243,12 @@ impl<'a> Graph<'a> {
240243 }
241244 }
242245
246+ /// Returns the version requirement for the given package ID. Returns `None`
247+ /// if no version requirement is recorded (e.g., root packages).
248+ pub fn version_req_for_id ( & self , package_id : PackageId ) -> Option < & OptVersionReq > {
249+ self . version_req_map . get ( & package_id)
250+ }
251+
243252 /// Returns `true` if the given feature node index is a feature enabled
244253 /// via the command-line.
245254 pub fn is_cli_feature ( & self , index : NodeId ) -> bool {
@@ -523,6 +532,12 @@ fn add_pkg(
523532 requested_kind,
524533 opts,
525534 ) ;
535+ // Store the version requirement for this dependency for
536+ // later use in formatting.
537+ graph. version_req_map . insert (
538+ graph. package_id_for_index ( dep_index) ,
539+ dep. version_req ( ) . clone ( ) ,
540+ ) ;
526541 let new_edge = Edge {
527542 kind : EdgeKind :: Dep ( dep. kind ( ) ) ,
528543 node : dep_index,
0 commit comments