1
- #
1
+
2
2
# (c) Jan Gehring <jan.gehring@gmail.com>
3
3
#
4
4
# vim: set ts=2 sw=2 tw=0:
@@ -1011,16 +1011,22 @@ sub needs {
1011
1011
}
1012
1012
1013
1013
if ( $self eq " main" ) {
1014
- $self = " Rex::CLI" ;
1014
+ $self = " " ; # Tasks in main namespace are really registered in Rex::CLI
1015
1015
}
1016
1016
1017
- no strict ' refs' ;
1018
- my @maybe_tasks_to_run = @{" ${self} ::tasks" };
1019
- use strict;
1017
+ my $tl = Rex::TaskList-> create();
1018
+ my @maybe_tasks_to_run ;
1019
+ if ($self ) {
1020
+ @maybe_tasks_to_run = $tl -> get_all_tasks(qr { ^\Q $self \E :[A-Za-z0-9_\- ]+$} );
1021
+ }
1022
+ else {
1023
+ @maybe_tasks_to_run = $tl -> get_all_tasks(qr { ^[A-Za-z0-9_\- ]+$} );
1024
+ }
1020
1025
1021
1026
if ( !@args && !@maybe_tasks_to_run ) {
1022
1027
@args = ($self );
1023
1028
($self ) = caller ;
1029
+ $self = " " if ($self =~ m / ^(Rex::CLI|main)$ / );
1024
1030
}
1025
1031
1026
1032
if ( ref ( $args [0] ) eq " ARRAY" ) {
@@ -1029,24 +1035,36 @@ sub needs {
1029
1035
1030
1036
Rex::Logger::debug(" need to call tasks from $self " );
1031
1037
1032
- no strict ' refs' ;
1033
- my @tasks_to_run = @{" ${self} ::tasks" };
1034
- use strict;
1038
+ my @tasks_to_run ;
1039
+ if ($self ) {
1040
+ @tasks_to_run = $tl -> get_all_tasks(qr { ^\Q $self \E :[A-Za-z0-9_\- ]+$} );
1041
+ }
1042
+ else {
1043
+ @tasks_to_run = $tl -> get_all_tasks(qr { ^[A-Za-z0-9_\- ]+$} );
1044
+ }
1035
1045
1036
1046
my $run_list = Rex::RunList-> instance;
1037
1047
my $current_task = $run_list -> current_task;
1038
1048
my %task_opts = $current_task -> get_opts;
1039
1049
my @task_args = $current_task -> get_args;
1040
1050
1051
+ if ($self ) {
1052
+ my $suffix = $self ;
1053
+ $suffix =~ s / ::/ :/ g ;
1054
+ @args = map { $_ = " $suffix :$_ " } @args ;
1055
+ }
1056
+
1041
1057
for my $task (@tasks_to_run ) {
1042
- my $task_name = $task -> {" name" };
1043
- if ( @args && grep ( / ^$task_name $ / , @args ) ) {
1044
- Rex::Logger::debug( " Calling " . $task -> {" name" } );
1045
- $task -> {" code" }-> ( \%task_opts , \@task_args );
1058
+ my $task_o = $tl -> get_task($task );
1059
+ my $task_name = $task_o -> name;
1060
+ my $suffix = $self . " :" ;
1061
+ if ( @args && grep ( / ^\Q $task_name \E $ / , @args ) ) {
1062
+ Rex::Logger::debug( " Calling " . $task_o -> name );
1063
+ $task_o -> run( " <func>" , params => \@task_args , args => \%task_opts );
1046
1064
}
1047
1065
elsif ( !@args ) {
1048
- Rex::Logger::debug( " Calling " . $task -> { " name" } );
1049
- $task -> { " code " } -> ( \ %task_opts , \ @task_args );
1066
+ Rex::Logger::debug( " Calling " . $task_o -> name );
1067
+ $task_o -> run( " <func> " , params => \ @task_args , args => \ %task_opts );
1050
1068
}
1051
1069
}
1052
1070
0 commit comments