@@ -400,67 +400,78 @@ pub fn registry_strategy(
400
400
401
401
let list_of_raw_dependency = vec ( raw_dependency, ..=max_deps) ;
402
402
403
- ( list_of_crates_with_versions, list_of_raw_dependency) . prop_map (
404
- |( crate_vers_by_name, raw_dependencies) | {
405
- let list_of_pkgid: Vec < _ > = crate_vers_by_name
406
- . iter ( )
407
- . flat_map ( |( name, vers) | vers. iter ( ) . map ( move |x| ( ( name. as_str ( ) , & x. 0 ) , x. 1 ) ) )
408
- . collect ( ) ;
409
- let len_all_pkgid = list_of_pkgid. len ( ) ;
410
- let mut dependency_by_pkgid = vec ! [ vec![ ] ; len_all_pkgid] ;
411
- for ( a, b, ( c, d) , k) in raw_dependencies {
412
- let ( a, b) = order_index ( a, b, len_all_pkgid) ;
413
- let ( ( dep_name, _) , _) = list_of_pkgid[ a] ;
414
- if ( list_of_pkgid[ b] . 0 ) . 0 == dep_name {
415
- continue ;
403
+ // By default a package depends only on other packages that have a smaller name,
404
+ // this helps make sure that all things in the resulting index are DAGs.
405
+ // If this is true then the DAG is maintained with grater instead.
406
+ let reverse_alphabetical = any :: < bool > ( ) ;
407
+
408
+ (
409
+ list_of_crates_with_versions,
410
+ list_of_raw_dependency,
411
+ reverse_alphabetical,
412
+ )
413
+ . prop_map (
414
+ |( crate_vers_by_name, raw_dependencies, reverse_alphabetical) | {
415
+ let list_of_pkgid: Vec < _ > = crate_vers_by_name
416
+ . iter ( )
417
+ . flat_map ( |( name, vers) | vers. iter ( ) . map ( move |x| ( ( name. as_str ( ) , & x. 0 ) , x. 1 ) ) )
418
+ . collect ( ) ;
419
+ let len_all_pkgid = list_of_pkgid. len ( ) ;
420
+ let mut dependency_by_pkgid = vec ! [ vec![ ] ; len_all_pkgid] ;
421
+ for ( a, b, ( c, d) , k) in raw_dependencies {
422
+ let ( a, b) = order_index ( a, b, len_all_pkgid) ;
423
+ let ( a, b) = if reverse_alphabetical { ( b, a) } else { ( a, b) } ;
424
+ let ( ( dep_name, _) , _) = list_of_pkgid[ a] ;
425
+ if ( list_of_pkgid[ b] . 0 ) . 0 == dep_name {
426
+ continue ;
427
+ }
428
+ let s = & crate_vers_by_name[ dep_name] ;
429
+ let s_last_index = s. len ( ) - 1 ;
430
+ let ( c, d) = order_index ( c, d, s. len ( ) ) ;
431
+
432
+ dependency_by_pkgid[ b] . push ( dep_req_kind (
433
+ & dep_name,
434
+ & if c == 0 && d == s_last_index {
435
+ "*" . to_string ( )
436
+ } else if c == 0 {
437
+ format ! ( "<={}" , s[ d] . 0 )
438
+ } else if d == s_last_index {
439
+ format ! ( ">={}" , s[ c] . 0 )
440
+ } else if c == d {
441
+ format ! ( "={}" , s[ c] . 0 )
442
+ } else {
443
+ format ! ( ">={}, <={}" , s[ c] . 0 , s[ d] . 0 )
444
+ } ,
445
+ match k {
446
+ 0 => Kind :: Normal ,
447
+ 1 => Kind :: Build ,
448
+ // => Kind::Development, // Development has not impact so don't gen
449
+ _ => panic ! ( "bad index for Kind" ) ,
450
+ } ,
451
+ ) )
416
452
}
417
- let s = & crate_vers_by_name[ dep_name] ;
418
- let s_last_index = s. len ( ) - 1 ;
419
- let ( c, d) = order_index ( c, d, s. len ( ) ) ;
420
-
421
- dependency_by_pkgid[ b] . push ( dep_req_kind (
422
- & dep_name,
423
- & if c == 0 && d == s_last_index {
424
- "*" . to_string ( )
425
- } else if c == 0 {
426
- format ! ( "<={}" , s[ d] . 0 )
427
- } else if d == s_last_index {
428
- format ! ( ">={}" , s[ c] . 0 )
429
- } else if c == d {
430
- format ! ( "={}" , s[ c] . 0 )
431
- } else {
432
- format ! ( ">={}, <={}" , s[ c] . 0 , s[ d] . 0 )
433
- } ,
434
- match k {
435
- 0 => Kind :: Normal ,
436
- 1 => Kind :: Build ,
437
- // => Kind::Development, // Development has not impact so don't gen
438
- _ => panic ! ( "bad index for Kind" ) ,
439
- } ,
440
- ) )
441
- }
442
453
443
- PrettyPrintRegistry (
444
- list_of_pkgid
445
- . into_iter ( )
446
- . zip ( dependency_by_pkgid. into_iter ( ) )
447
- . map ( |( ( ( name, ver) , allow_deps) , deps) | {
448
- pkg_dep (
449
- ( name, ver) . to_pkgid ( ) ,
450
- if !allow_deps {
451
- vec ! [ dep_req( "bad" , "*" ) ]
452
- } else {
453
- let mut deps = deps;
454
- deps. sort_by_key ( |d| d. name_in_toml ( ) ) ;
455
- deps. dedup_by_key ( |d| d. name_in_toml ( ) ) ;
456
- deps
457
- } ,
458
- )
459
- } )
460
- . collect ( ) ,
461
- )
462
- } ,
463
- )
454
+ PrettyPrintRegistry (
455
+ list_of_pkgid
456
+ . into_iter ( )
457
+ . zip ( dependency_by_pkgid. into_iter ( ) )
458
+ . map ( |( ( ( name, ver) , allow_deps) , deps) | {
459
+ pkg_dep (
460
+ ( name, ver) . to_pkgid ( ) ,
461
+ if !allow_deps {
462
+ vec ! [ dep_req( "bad" , "*" ) ]
463
+ } else {
464
+ let mut deps = deps;
465
+ deps. sort_by_key ( |d| d. name_in_toml ( ) ) ;
466
+ deps. dedup_by_key ( |d| d. name_in_toml ( ) ) ;
467
+ deps
468
+ } ,
469
+ )
470
+ } )
471
+ . collect ( ) ,
472
+ )
473
+ } ,
474
+ )
464
475
}
465
476
466
477
/// This test is to test the generator to ensure
0 commit comments