@@ -15,6 +15,7 @@ use structopt::StructOpt;
15
15
use toml_edit:: Value ;
16
16
17
17
use crate :: commands;
18
+ use crate :: util;
18
19
19
20
fn parse_identifiers ( src : & str ) -> Identifier {
20
21
Identifier :: AlphaNumeric ( src. to_owned ( ) )
@@ -350,7 +351,7 @@ pub struct Opt {
350
351
pub cmd : Command ,
351
352
}
352
353
353
- fn make_pkg_predicate ( args : PackageSelectOptions ) -> Result < Box < dyn Fn ( & Package ) -> bool > , String > {
354
+ fn make_pkg_predicate ( ws : & Workspace < ' _ > , args : PackageSelectOptions ) -> Result < Box < dyn Fn ( & Package ) -> bool > , String > {
354
355
let PackageSelectOptions {
355
356
packages,
356
357
skip,
@@ -374,16 +375,6 @@ fn make_pkg_predicate(args: PackageSelectOptions) -> Result<Box<dyn Fn(&Package)
374
375
}
375
376
}
376
377
377
- if changed_since. len ( ) != 0 {
378
- if !skip. is_empty ( ) || !ignore_pre_version. is_empty ( ) {
379
- return Err (
380
- "-c/--changed-since is mutually exlusive to using -s/--skip and -i/--ignore-version-pre"
381
- . into ( ) ,
382
- ) ;
383
- }
384
- }
385
-
386
-
387
378
let publish = move |p : & Package | {
388
379
let publ = if ignore_publish {
389
380
true
@@ -396,6 +387,35 @@ fn make_pkg_predicate(args: PackageSelectOptions) -> Result<Box<dyn Fn(&Package)
396
387
publ
397
388
} ;
398
389
390
+ if changed_since. len ( ) != 0 {
391
+ if !skip. is_empty ( ) || !ignore_pre_version. is_empty ( ) {
392
+ return Err (
393
+ "-c/--changed-since is mutually exlusive to using -s/--skip and -i/--ignore-version-pre"
394
+ . into ( ) ,
395
+ ) ;
396
+ }
397
+
398
+ }
399
+
400
+ let changed = util:: changed_packages ( ws, & changed_since) ;
401
+ if changed. len ( ) == 0 {
402
+ return Err ( "No changes detected" . into ( ) )
403
+ } ;
404
+
405
+ ws. config ( )
406
+ . shell ( )
407
+ . status ( "Calculating" , "Dependents of changed crates" )
408
+ . expect ( "Writing to Shell doesn't fail" ) ;
409
+
410
+ // FIXME: run through the changed once, mark which ones have major-changes
411
+ // update the set of changed to reflect that and calculate the
412
+ // remaining graph from that, probably useful to upgrade after
413
+ // every cycle
414
+ let ( dependents_graph, dependents_map) = util:: changed_dependents (
415
+ util:: members_deep ( ws) . into_iter ( ) . filter ( |p| publish ( & p) ) . collect ( ) ,
416
+ & changed,
417
+ publish
418
+ ) ;
399
419
400
420
401
421
if !packages. is_empty ( ) {
@@ -474,19 +494,20 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
474
494
pkg_opts,
475
495
check_only,
476
496
} => {
477
- let predicate = make_pkg_predicate ( pkg_opts) ?;
478
497
let ws = Workspace :: new ( & root_manifest, & c)
479
498
. map_err ( |e| format ! ( "Reading workspace {:?} failed: {:}" , root_manifest, e) ) ?;
499
+ let predicate = make_pkg_predicate ( & ws, pkg_opts) ?;
480
500
commands:: clean_up_unused_dependencies ( & ws, predicate, check_only)
481
501
}
482
502
Command :: AddOwner {
483
503
owner,
484
504
token,
485
505
pkg_opts,
486
506
} => {
487
- let predicate = make_pkg_predicate ( pkg_opts) ?;
488
507
let ws = Workspace :: new ( & root_manifest, & c)
489
508
. map_err ( |e| format ! ( "Reading workspace {:?} failed: {:}" , root_manifest, e) ) ?;
509
+
510
+ let predicate = make_pkg_predicate ( & ws, pkg_opts) ?;
490
511
for pkg in ws. members ( ) . filter ( |p| predicate ( p) ) {
491
512
commands:: add_owner ( ws. config ( ) , & pkg, owner. clone ( ) , token. clone ( ) ) ?;
492
513
}
@@ -501,7 +522,11 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
501
522
if name == "name" {
502
523
return Err ( "To change the name please use the rename command!" . into ( ) ) ;
503
524
}
504
- let predicate = make_pkg_predicate ( pkg_opts) ?;
525
+
526
+ let ws = Workspace :: new ( & root_manifest, & c)
527
+ . map_err ( |e| format ! ( "Reading workspace {:?} failed: {:}" , root_manifest, e) ) ?;
528
+
529
+ let predicate = make_pkg_predicate ( & ws, pkg_opts) ?;
505
530
let type_value = {
506
531
if let Ok ( v) = bool:: from_str ( & value) {
507
532
Value :: from ( v)
@@ -512,8 +537,6 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
512
537
}
513
538
} ;
514
539
515
- let ws = Workspace :: new ( & root_manifest, & c)
516
- . map_err ( |e| format ! ( "Reading workspace {:?} failed: {:}" , root_manifest, e) ) ?;
517
540
commands:: set_field (
518
541
ws. members ( )
519
542
. filter ( |p| predicate ( p) && c. shell ( ) . status ( "Setting on" , p. name ( ) ) . is_ok ( ) ) ,
@@ -539,7 +562,7 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
539
562
force_update,
540
563
version,
541
564
} => {
542
- let predicate = make_pkg_predicate ( pkg_opts) ?;
565
+ let predicate = make_pkg_predicate ( & ws , pkg_opts) ?;
543
566
commands:: set_version (
544
567
& ws,
545
568
|p| predicate ( p) ,
@@ -551,7 +574,7 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
551
574
pkg_opts,
552
575
force_update,
553
576
} => {
554
- let predicate = make_pkg_predicate ( pkg_opts) ?;
577
+ let predicate = make_pkg_predicate ( & ws , pkg_opts) ?;
555
578
commands:: set_version (
556
579
& ws,
557
580
|p| predicate ( p) ,
@@ -580,7 +603,7 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
580
603
pkg_opts,
581
604
force_update,
582
605
} => {
583
- let predicate = make_pkg_predicate ( pkg_opts) ?;
606
+ let predicate = make_pkg_predicate ( & ws , pkg_opts) ?;
584
607
commands:: set_version (
585
608
& ws,
586
609
|p| predicate ( p) ,
@@ -597,7 +620,7 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
597
620
pkg_opts,
598
621
force_update,
599
622
} => {
600
- let predicate = make_pkg_predicate ( pkg_opts) ?;
623
+ let predicate = make_pkg_predicate ( & ws , pkg_opts) ?;
601
624
commands:: set_version (
602
625
& ws,
603
626
|p| predicate ( p) ,
@@ -614,7 +637,7 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
614
637
pkg_opts,
615
638
force_update,
616
639
} => {
617
- let predicate = make_pkg_predicate ( pkg_opts) ?;
640
+ let predicate = make_pkg_predicate ( & ws , pkg_opts) ?;
618
641
commands:: set_version (
619
642
& ws,
620
643
|p| predicate ( p) ,
@@ -632,7 +655,7 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
632
655
pkg_opts,
633
656
force_update,
634
657
} => {
635
- let predicate = make_pkg_predicate ( pkg_opts) ?;
658
+ let predicate = make_pkg_predicate ( & ws , pkg_opts) ?;
636
659
commands:: set_version (
637
660
& ws,
638
661
|p| predicate ( p) ,
@@ -649,7 +672,7 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
649
672
pkg_opts,
650
673
force_update,
651
674
} => {
652
- let predicate = make_pkg_predicate ( pkg_opts) ?;
675
+ let predicate = make_pkg_predicate ( & ws , pkg_opts) ?;
653
676
commands:: set_version (
654
677
& ws,
655
678
|p| predicate ( p) ,
@@ -665,7 +688,7 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
665
688
pkg_opts,
666
689
force_update,
667
690
} => {
668
- let predicate = make_pkg_predicate ( pkg_opts) ?;
691
+ let predicate = make_pkg_predicate ( & ws , pkg_opts) ?;
669
692
commands:: set_version (
670
693
& ws,
671
694
|p| predicate ( p) ,
@@ -680,16 +703,20 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
680
703
}
681
704
}
682
705
}
683
- Command :: DeDevDeps { pkg_opts } => maybe_patch ( false , & make_pkg_predicate ( pkg_opts) ?) ,
706
+ Command :: DeDevDeps { pkg_opts } => {
707
+ let ws = Workspace :: new ( & root_manifest, & c)
708
+ . map_err ( |e| format ! ( "Reading workspace {:?} failed: {:}" , root_manifest, e) ) ?;
709
+ maybe_patch ( false , & make_pkg_predicate ( & ws, pkg_opts) ?)
710
+ } ,
684
711
Command :: ToRelease {
685
712
include_dev,
686
713
pkg_opts,
687
714
} => {
688
- let predicate = make_pkg_predicate ( pkg_opts) ?;
689
- maybe_patch ( include_dev, & predicate) ?;
690
-
691
715
let ws = Workspace :: new ( & root_manifest, & c)
692
716
. map_err ( |e| format ! ( "Reading workspace {:?} failed: {:}" , root_manifest, e) ) ?;
717
+ let predicate = make_pkg_predicate ( & ws, pkg_opts) ?;
718
+ maybe_patch ( include_dev, & predicate) ?;
719
+
693
720
let packages = commands:: packages_to_release ( & ws, predicate) ?;
694
721
println ! (
695
722
"{:}" ,
@@ -712,11 +739,12 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
712
739
verify_readme_feature ( ) ?;
713
740
}
714
741
715
- let predicate = make_pkg_predicate ( pkg_opts) ?;
716
- maybe_patch ( include_dev, & predicate) ?;
717
-
718
742
let ws = Workspace :: new ( & root_manifest, & c)
719
743
. map_err ( |e| format ! ( "Reading workspace {:?} failed: {:}" , root_manifest, e) ) ?;
744
+
745
+ let predicate = make_pkg_predicate ( & ws, pkg_opts) ?;
746
+ maybe_patch ( include_dev, & predicate) ?;
747
+
720
748
let packages = commands:: packages_to_release ( & ws, predicate) ?;
721
749
722
750
commands:: check ( & packages, & ws, build, check_readme)
@@ -726,11 +754,12 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
726
754
pkg_opts,
727
755
readme_mode,
728
756
} => {
729
- let predicate = make_pkg_predicate ( pkg_opts) ?;
730
- maybe_patch ( false , & predicate) ?;
731
-
732
757
let ws = Workspace :: new ( & root_manifest, & c)
733
758
. map_err ( |e| format ! ( "Reading workspace {:?} failed: {:}" , root_manifest, e) ) ?;
759
+
760
+ let predicate = make_pkg_predicate ( & ws, pkg_opts) ?;
761
+ maybe_patch ( false , & predicate) ?;
762
+
734
763
let packages = commands:: packages_to_release ( & ws, predicate) ?;
735
764
736
765
commands:: gen_all_readme ( packages, & ws, readme_mode)
@@ -745,11 +774,10 @@ pub fn run(args: Opt) -> Result<(), Box<dyn Error>> {
745
774
pkg_opts,
746
775
check_readme,
747
776
} => {
748
- let predicate = make_pkg_predicate ( pkg_opts) ?;
749
- maybe_patch ( include_dev, & predicate) ?;
750
-
751
777
let ws = Workspace :: new ( & root_manifest, & c)
752
778
. map_err ( |e| format ! ( "Reading workspace {:?} failed: {:}" , root_manifest, e) ) ?;
779
+ let predicate = make_pkg_predicate ( & ws, pkg_opts) ?;
780
+ maybe_patch ( include_dev, & predicate) ?;
753
781
754
782
let packages = commands:: packages_to_release ( & ws, predicate) ?;
755
783
0 commit comments