@@ -60,7 +60,7 @@ use crate::util::config::Config;
6060use crate :: util:: errors:: CargoResult ;
6161use crate :: util:: profile;
6262
63- use self :: context:: { Activations , Context } ;
63+ use self :: context:: Context ;
6464use self :: dep_cache:: RegistryQueryer ;
6565use self :: types:: { ConflictMap , ConflictReason , DepsFrame } ;
6666use self :: types:: { FeaturesSet , RcVecIter , RemainingDeps , ResolverProgress } ;
@@ -154,7 +154,7 @@ pub fn resolve(
154154 ResolveVersion :: default ( ) ,
155155 ) ;
156156
157- check_cycles ( & resolve, & cx . activations ) ?;
157+ check_cycles ( & resolve) ?;
158158 check_duplicate_pkgs_in_lockfile ( & resolve) ?;
159159 trace ! ( "resolved: {:?}" , resolve) ;
160160
@@ -1048,27 +1048,21 @@ fn find_candidate(
10481048 None
10491049}
10501050
1051- fn check_cycles ( resolve : & Resolve , activations : & Activations ) -> CargoResult < ( ) > {
1052- let summaries: HashMap < PackageId , & Summary > = activations
1053- . values ( )
1054- . map ( |( s, _) | ( s. package_id ( ) , s) )
1055- . collect ( ) ;
1056-
1051+ fn check_cycles ( resolve : & Resolve ) -> CargoResult < ( ) > {
10571052 // Sort packages to produce user friendly deterministic errors.
10581053 let mut all_packages: Vec < _ > = resolve. iter ( ) . collect ( ) ;
10591054 all_packages. sort_unstable ( ) ;
10601055 let mut checked = HashSet :: new ( ) ;
10611056 for pkg in all_packages {
10621057 if !checked. contains ( & pkg) {
1063- visit ( resolve, pkg, & summaries , & mut HashSet :: new ( ) , & mut checked) ?
1058+ visit ( resolve, pkg, & mut HashSet :: new ( ) , & mut checked) ?
10641059 }
10651060 }
10661061 return Ok ( ( ) ) ;
10671062
10681063 fn visit (
10691064 resolve : & Resolve ,
10701065 id : PackageId ,
1071- summaries : & HashMap < PackageId , & Summary > ,
10721066 visited : & mut HashSet < PackageId > ,
10731067 checked : & mut HashSet < PackageId > ,
10741068 ) -> CargoResult < ( ) > {
@@ -1089,22 +1083,18 @@ fn check_cycles(resolve: &Resolve, activations: &Activations) -> CargoResult<()>
10891083 // visitation list as we can't induce a cycle through transitive
10901084 // dependencies.
10911085 if checked. insert ( id) {
1092- let summary = summaries[ & id] ;
1093- for dep in resolve. deps_not_replaced ( id) {
1094- let is_transitive = summary
1095- . dependencies ( )
1096- . iter ( )
1097- . any ( |d| d. matches_id ( dep) && d. is_transitive ( ) ) ;
1086+ for ( dep, listings) in resolve. deps_not_replaced ( id) {
1087+ let is_transitive = listings. iter ( ) . any ( |d| d. is_transitive ( ) ) ;
10981088 let mut empty = HashSet :: new ( ) ;
10991089 let visited = if is_transitive {
11001090 & mut * visited
11011091 } else {
11021092 & mut empty
11031093 } ;
1104- visit ( resolve, dep, summaries , visited, checked) ?;
1094+ visit ( resolve, dep, visited, checked) ?;
11051095
11061096 if let Some ( id) = resolve. replacement ( dep) {
1107- visit ( resolve, id, summaries , visited, checked) ?;
1097+ visit ( resolve, id, visited, checked) ?;
11081098 }
11091099 }
11101100 }
0 commit comments