@@ -60,7 +60,7 @@ use crate::util::config::Config;
60
60
use crate :: util:: errors:: CargoResult ;
61
61
use crate :: util:: profile;
62
62
63
- use self :: context:: { Activations , Context } ;
63
+ use self :: context:: Context ;
64
64
use self :: dep_cache:: RegistryQueryer ;
65
65
use self :: types:: { ConflictMap , ConflictReason , DepsFrame } ;
66
66
use self :: types:: { FeaturesSet , RcVecIter , RemainingDeps , ResolverProgress } ;
@@ -154,7 +154,7 @@ pub fn resolve(
154
154
ResolveVersion :: default ( ) ,
155
155
) ;
156
156
157
- check_cycles ( & resolve, & cx . activations ) ?;
157
+ check_cycles ( & resolve) ?;
158
158
check_duplicate_pkgs_in_lockfile ( & resolve) ?;
159
159
trace ! ( "resolved: {:?}" , resolve) ;
160
160
@@ -1048,27 +1048,21 @@ fn find_candidate(
1048
1048
None
1049
1049
}
1050
1050
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 < ( ) > {
1057
1052
// Sort packages to produce user friendly deterministic errors.
1058
1053
let mut all_packages: Vec < _ > = resolve. iter ( ) . collect ( ) ;
1059
1054
all_packages. sort_unstable ( ) ;
1060
1055
let mut checked = HashSet :: new ( ) ;
1061
1056
for pkg in all_packages {
1062
1057
if !checked. contains ( & pkg) {
1063
- visit ( resolve, pkg, & summaries , & mut HashSet :: new ( ) , & mut checked) ?
1058
+ visit ( resolve, pkg, & mut HashSet :: new ( ) , & mut checked) ?
1064
1059
}
1065
1060
}
1066
1061
return Ok ( ( ) ) ;
1067
1062
1068
1063
fn visit (
1069
1064
resolve : & Resolve ,
1070
1065
id : PackageId ,
1071
- summaries : & HashMap < PackageId , & Summary > ,
1072
1066
visited : & mut HashSet < PackageId > ,
1073
1067
checked : & mut HashSet < PackageId > ,
1074
1068
) -> CargoResult < ( ) > {
@@ -1089,22 +1083,18 @@ fn check_cycles(resolve: &Resolve, activations: &Activations) -> CargoResult<()>
1089
1083
// visitation list as we can't induce a cycle through transitive
1090
1084
// dependencies.
1091
1085
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 ( ) ) ;
1098
1088
let mut empty = HashSet :: new ( ) ;
1099
1089
let visited = if is_transitive {
1100
1090
& mut * visited
1101
1091
} else {
1102
1092
& mut empty
1103
1093
} ;
1104
- visit ( resolve, dep, summaries , visited, checked) ?;
1094
+ visit ( resolve, dep, visited, checked) ?;
1105
1095
1106
1096
if let Some ( id) = resolve. replacement ( dep) {
1107
- visit ( resolve, id, summaries , visited, checked) ?;
1097
+ visit ( resolve, id, visited, checked) ?;
1108
1098
}
1109
1099
}
1110
1100
}
0 commit comments