@@ -380,6 +380,8 @@ pub struct TaskFlags {
380
380
pub cwd : Option < String > ,
381
381
pub task : Option < String > ,
382
382
pub is_run : bool ,
383
+ pub recursive : bool ,
384
+ pub filter : Option < String > ,
383
385
pub eval : bool ,
384
386
}
385
387
@@ -3046,13 +3048,27 @@ Evaluate a task from string
3046
3048
. help ( "Specify the directory to run the task in" )
3047
3049
. value_hint ( ValueHint :: DirPath ) ,
3048
3050
)
3051
+ . arg (
3052
+ Arg :: new ( "recursive" )
3053
+ . long ( "recursive" )
3054
+ . short ( 'r' )
3055
+ . help ( "Run the task in all projects in the workspace" )
3056
+ . action ( ArgAction :: SetTrue ) ,
3057
+ )
3058
+ . arg (
3059
+ Arg :: new ( "filter" )
3060
+ . long ( "filter" )
3061
+ . short ( 'f' )
3062
+ . help ( "Filter members of the workspace by name - should be used with --recursive" )
3063
+ . value_parser ( value_parser ! ( String ) ) ,
3064
+ )
3049
3065
. arg (
3050
3066
Arg :: new ( "eval" )
3051
3067
. long ( "eval" )
3052
3068
. help (
3053
3069
"Evaluate the passed value as if, it was a task in a configuration file" ,
3054
3070
) . action ( ArgAction :: SetTrue )
3055
- )
3071
+ )
3056
3072
. arg ( node_modules_dir_arg ( ) )
3057
3073
} )
3058
3074
}
@@ -5212,10 +5228,15 @@ fn task_parse(
5212
5228
unstable_args_parse ( flags, matches, UnstableArgsConfig :: ResolutionAndRuntime ) ;
5213
5229
node_modules_arg_parse ( flags, matches) ;
5214
5230
5231
+ let filter = matches. remove_one :: < String > ( "filter" ) ;
5232
+ let recursive = matches. get_flag ( "recursive" ) || filter. is_some ( ) ;
5233
+
5215
5234
let mut task_flags = TaskFlags {
5216
5235
cwd : matches. remove_one :: < String > ( "cwd" ) ,
5217
5236
task : None ,
5218
5237
is_run : false ,
5238
+ recursive,
5239
+ filter,
5219
5240
eval : matches. get_flag ( "eval" ) ,
5220
5241
} ;
5221
5242
@@ -10418,6 +10439,8 @@ mod tests {
10418
10439
cwd: None ,
10419
10440
task: Some ( "build" . to_string( ) ) ,
10420
10441
is_run: false ,
10442
+ recursive: false ,
10443
+ filter: None ,
10421
10444
eval: false ,
10422
10445
} ) ,
10423
10446
argv: svec![ "hello" , "world" ] ,
@@ -10433,6 +10456,8 @@ mod tests {
10433
10456
cwd: None ,
10434
10457
task: Some ( "build" . to_string( ) ) ,
10435
10458
is_run: false ,
10459
+ recursive: false ,
10460
+ filter: None ,
10436
10461
eval: false ,
10437
10462
} ) ,
10438
10463
..Flags :: default ( )
@@ -10447,6 +10472,56 @@ mod tests {
10447
10472
cwd: Some ( "foo" . to_string( ) ) ,
10448
10473
task: Some ( "build" . to_string( ) ) ,
10449
10474
is_run: false ,
10475
+ recursive: false ,
10476
+ filter: None ,
10477
+ eval: false ,
10478
+ } ) ,
10479
+ ..Flags :: default ( )
10480
+ }
10481
+ ) ;
10482
+
10483
+ let r = flags_from_vec ( svec ! [ "deno" , "task" , "--filter" , "*" , "build" ] ) ;
10484
+ assert_eq ! (
10485
+ r. unwrap( ) ,
10486
+ Flags {
10487
+ subcommand: DenoSubcommand :: Task ( TaskFlags {
10488
+ cwd: None ,
10489
+ task: Some ( "build" . to_string( ) ) ,
10490
+ is_run: false ,
10491
+ recursive: true ,
10492
+ filter: Some ( "*" . to_string( ) ) ,
10493
+ eval: false ,
10494
+ } ) ,
10495
+ ..Flags :: default ( )
10496
+ }
10497
+ ) ;
10498
+
10499
+ let r = flags_from_vec ( svec ! [ "deno" , "task" , "--recursive" , "build" ] ) ;
10500
+ assert_eq ! (
10501
+ r. unwrap( ) ,
10502
+ Flags {
10503
+ subcommand: DenoSubcommand :: Task ( TaskFlags {
10504
+ cwd: None ,
10505
+ task: Some ( "build" . to_string( ) ) ,
10506
+ is_run: false ,
10507
+ recursive: true ,
10508
+ filter: None ,
10509
+ eval: false ,
10510
+ } ) ,
10511
+ ..Flags :: default ( )
10512
+ }
10513
+ ) ;
10514
+
10515
+ let r = flags_from_vec ( svec ! [ "deno" , "task" , "-r" , "build" ] ) ;
10516
+ assert_eq ! (
10517
+ r. unwrap( ) ,
10518
+ Flags {
10519
+ subcommand: DenoSubcommand :: Task ( TaskFlags {
10520
+ cwd: None ,
10521
+ task: Some ( "build" . to_string( ) ) ,
10522
+ is_run: false ,
10523
+ recursive: true ,
10524
+ filter: None ,
10450
10525
eval: false ,
10451
10526
} ) ,
10452
10527
..Flags :: default ( )
@@ -10461,6 +10536,8 @@ mod tests {
10461
10536
cwd: None ,
10462
10537
task: Some ( "echo 1" . to_string( ) ) ,
10463
10538
is_run: false ,
10539
+ recursive: false ,
10540
+ filter: None ,
10464
10541
eval: true ,
10465
10542
} ) ,
10466
10543
..Flags :: default ( )
@@ -10490,6 +10567,8 @@ mod tests {
10490
10567
cwd: None ,
10491
10568
task: Some ( "build" . to_string( ) ) ,
10492
10569
is_run: false ,
10570
+ recursive: false ,
10571
+ filter: None ,
10493
10572
eval: false ,
10494
10573
} ) ,
10495
10574
argv: svec![ "--" , "hello" , "world" ] ,
@@ -10508,6 +10587,8 @@ mod tests {
10508
10587
cwd: Some ( "foo" . to_string( ) ) ,
10509
10588
task: Some ( "build" . to_string( ) ) ,
10510
10589
is_run: false ,
10590
+ recursive: false ,
10591
+ filter: None ,
10511
10592
eval: false ,
10512
10593
} ) ,
10513
10594
argv: svec![ "--" , "hello" , "world" ] ,
@@ -10527,6 +10608,8 @@ mod tests {
10527
10608
cwd: None ,
10528
10609
task: Some ( "build" . to_string( ) ) ,
10529
10610
is_run: false ,
10611
+ recursive: false ,
10612
+ filter: None ,
10530
10613
eval: false ,
10531
10614
} ) ,
10532
10615
argv: svec![ "--" ] ,
@@ -10545,6 +10628,8 @@ mod tests {
10545
10628
cwd: None ,
10546
10629
task: Some ( "build" . to_string( ) ) ,
10547
10630
is_run: false ,
10631
+ recursive: false ,
10632
+ filter: None ,
10548
10633
eval: false ,
10549
10634
} ) ,
10550
10635
argv: svec![ "-1" , "--test" ] ,
@@ -10563,6 +10648,8 @@ mod tests {
10563
10648
cwd: None ,
10564
10649
task: Some ( "build" . to_string( ) ) ,
10565
10650
is_run: false ,
10651
+ recursive: false ,
10652
+ filter: None ,
10566
10653
eval: false ,
10567
10654
} ) ,
10568
10655
argv: svec![ "--test" ] ,
@@ -10582,6 +10669,8 @@ mod tests {
10582
10669
cwd: None ,
10583
10670
task: Some ( "build" . to_string( ) ) ,
10584
10671
is_run: false ,
10672
+ recursive: false ,
10673
+ filter: None ,
10585
10674
eval: false ,
10586
10675
} ) ,
10587
10676
log_level: Some ( log:: Level :: Error ) ,
@@ -10600,6 +10689,8 @@ mod tests {
10600
10689
cwd: None ,
10601
10690
task: None ,
10602
10691
is_run: false ,
10692
+ recursive: false ,
10693
+ filter: None ,
10603
10694
eval: false ,
10604
10695
} ) ,
10605
10696
..Flags :: default ( )
@@ -10617,6 +10708,8 @@ mod tests {
10617
10708
cwd: None ,
10618
10709
task: None ,
10619
10710
is_run: false ,
10711
+ recursive: false ,
10712
+ filter: None ,
10620
10713
eval: false ,
10621
10714
} ) ,
10622
10715
config_flag: ConfigFlag :: Path ( "deno.jsonc" . to_string( ) ) ,
@@ -10635,6 +10728,8 @@ mod tests {
10635
10728
cwd: None ,
10636
10729
task: None ,
10637
10730
is_run: false ,
10731
+ recursive: false ,
10732
+ filter: None ,
10638
10733
eval: false ,
10639
10734
} ) ,
10640
10735
config_flag: ConfigFlag :: Path ( "deno.jsonc" . to_string( ) ) ,
0 commit comments