@@ -95,11 +95,12 @@ pub struct RegistryQueryer<'a> {
9595 pub registry : & ' a mut ( dyn Registry + ' a ) ,
9696 replacements : & ' a [ ( PackageIdSpec , Dependency ) ] ,
9797 try_to_use : & ' a HashSet < PackageId > ,
98- cache : HashMap < Dependency , Rc < Vec < Candidate > > > ,
9998 // If set the list of dependency candidates will be sorted by minimal
10099 // versions first. That allows `cargo update -Z minimal-versions` which will
101100 // specify minimum dependency versions to be used.
102101 minimal_versions : bool ,
102+ cache : HashMap < Dependency , Rc < Vec < Candidate > > > ,
103+ used_replacements : HashMap < PackageId , PackageId > ,
103104}
104105
105106impl < ' a > RegistryQueryer < ' a > {
@@ -112,12 +113,17 @@ impl<'a> RegistryQueryer<'a> {
112113 RegistryQueryer {
113114 registry,
114115 replacements,
115- cache : HashMap :: new ( ) ,
116116 try_to_use,
117117 minimal_versions,
118+ cache : HashMap :: new ( ) ,
119+ used_replacements : HashMap :: new ( ) ,
118120 }
119121 }
120122
123+ pub fn used_replacement_for ( & self , p : PackageId ) -> Option < ( PackageId , PackageId ) > {
124+ self . used_replacements . get ( & p) . map ( |& r| ( p, r) )
125+ }
126+
121127 /// Queries the `registry` to return a list of candidates for `dep`.
122128 ///
123129 /// This method is the location where overrides are taken into account. If
@@ -212,6 +218,10 @@ impl<'a> RegistryQueryer<'a> {
212218 for dep in summary. dependencies ( ) {
213219 debug ! ( "\t {} => {}" , dep. package_name( ) , dep. version_req( ) ) ;
214220 }
221+ if let Some ( r) = & replace {
222+ self . used_replacements
223+ . insert ( summary. package_id ( ) , r. package_id ( ) ) ;
224+ }
215225
216226 candidate. replace = replace;
217227 }
0 commit comments