File tree Expand file tree Collapse file tree 2 files changed +18
-9
lines changed Expand file tree Collapse file tree 2 files changed +18
-9
lines changed Original file line number Diff line number Diff line change @@ -980,15 +980,24 @@ impl<'a> Context<'a> {
980
980
fn check_cycles ( resolve : & Resolve ,
981
981
activations : & HashMap < ( String , SourceId ) , Vec < Rc < Summary > > > )
982
982
-> CargoResult < ( ) > {
983
- let mut summaries = HashMap :: new ( ) ;
984
- for summary in activations. values ( ) . flat_map ( |v| v) {
985
- summaries. insert ( summary. package_id ( ) , & * * summary) ;
983
+ let summaries: HashMap < & PackageId , & Summary > = activations. values ( )
984
+ . flat_map ( |v| v)
985
+ . map ( |s| ( s. package_id ( ) , & * * s) )
986
+ . collect ( ) ;
987
+
988
+ // Sort packages to produce user friendly deterministic errors.
989
+ let all_packages = resolve. iter ( ) . collect :: < BinaryHeap < _ > > ( ) . into_sorted_vec ( ) ;
990
+ let mut checked = HashSet :: new ( ) ;
991
+ for pkg in all_packages {
992
+ if !checked. contains ( pkg) {
993
+ try!( visit ( resolve,
994
+ pkg,
995
+ & summaries,
996
+ & mut HashSet :: new ( ) ,
997
+ & mut checked) )
998
+ }
986
999
}
987
- return visit ( resolve,
988
- resolve. root ( ) ,
989
- & summaries,
990
- & mut HashSet :: new ( ) ,
991
- & mut HashSet :: new ( ) ) ;
1000
+ return Ok ( ( ) ) ;
992
1001
993
1002
fn visit < ' a > ( resolve : & ' a Resolve ,
994
1003
id : & ' a PackageId ,
Original file line number Diff line number Diff line change @@ -1887,7 +1887,7 @@ fn cyclic_deps_rejected() {
1887
1887
assert_that ( p. cargo_process ( "build" ) . arg ( "-v" ) ,
1888
1888
execs ( ) . with_status ( 101 )
1889
1889
. with_stderr ( "\
1890
- [ERROR] cyclic package dependency: package `foo v0.0.1 ([..])` depends on itself
1890
+ [ERROR] cyclic package dependency: package `a v0.0.1 ([..])` depends on itself
1891
1891
" ) ) ;
1892
1892
}
1893
1893
You can’t perform that action at this time.
0 commit comments