@@ -2,6 +2,7 @@ use clap::Parser;
22
33use crate :: client:: globalsettings:: GlobalSettings ;
44use crate :: client:: job:: get_worker_map;
5+ use crate :: client:: output:: cli:: CANCEL_REASON_MAX_LEN ;
56use crate :: client:: output:: outputs:: OutputStream ;
67use crate :: client:: output:: resolve_task_paths;
78use crate :: client:: status:: { Status , job_status} ;
@@ -26,6 +27,10 @@ pub struct JobListOpts {
2627 /// You can use multiple states separated by a comma.
2728 #[ arg( long, value_delimiter( ',' ) , value_enum) ]
2829 pub filter : Vec < Status > ,
30+
31+ /// Display additional information <Cancel Reason>
32+ #[ arg( long) ]
33+ pub verbose : bool ,
2934}
3035
3136#[ derive( Parser ) ]
@@ -35,11 +40,26 @@ pub struct JobInfoOpts {
3540 pub selector : IdSelector ,
3641}
3742
43+ fn check_max_reason_len ( s : & str ) -> Result < String , String > {
44+ if s. len ( ) <= CANCEL_REASON_MAX_LEN {
45+ Ok ( s. to_string ( ) )
46+ } else {
47+ Err ( format ! (
48+ "Cancel reason must be shorter than {} you entered {}." ,
49+ CANCEL_REASON_MAX_LEN ,
50+ s. len( )
51+ ) )
52+ }
53+ }
54+
3855#[ derive( Parser ) ]
3956pub struct JobCancelOpts {
4057 /// Select job(s) to cancel
4158 #[ arg( value_parser = parse_last_all_range) ]
4259 pub selector : IdSelector ,
60+ /// Reason for the cancelation
61+ #[ arg( long, value_parser = check_max_reason_len) ]
62+ pub reason : Option < String > ,
4363}
4464
4565#[ derive( Parser ) ]
@@ -123,6 +143,7 @@ pub async fn output_job_list(
123143 session : & mut ClientSession ,
124144 job_filters : Vec < Status > ,
125145 show_open : bool ,
146+ verbose : bool ,
126147) -> anyhow:: Result < ( ) > {
127148 let message = FromClientMessage :: JobInfo (
128149 JobInfoRequest {
@@ -138,12 +159,12 @@ pub async fn output_job_list(
138159 if !job_filters. is_empty ( ) {
139160 response
140161 . jobs
141- . retain ( |j| ( show_open && j. is_open ) || job_filters. contains ( & job_status ( j) ) ) ;
162+ . retain ( |j| ( show_open && j. is_open ( ) ) || job_filters. contains ( & job_status ( j) ) ) ;
142163 }
143164 response. jobs . sort_unstable_by_key ( |j| j. id ) ;
144165 gsettings
145166 . printer ( )
146- . print_job_list ( response. jobs , total_count) ;
167+ . print_job_list ( response. jobs , total_count, verbose ) ;
147168 Ok ( ( ) )
148169}
149170
@@ -253,9 +274,11 @@ pub async fn cancel_job(
253274 _gsettings : & GlobalSettings ,
254275 session : & mut ClientSession ,
255276 selector : IdSelector ,
277+ reason : Option < String > ,
256278) -> anyhow:: Result < ( ) > {
257279 let mut responses = rpc_call ! ( session. connection( ) , FromClientMessage :: Cancel ( CancelRequest {
258280 selector,
281+ reason,
259282 } ) , ToClientMessage :: CancelJobResponse ( r) => r)
260283 . await ?;
261284 responses. sort_unstable_by_key ( |x| x. 0 ) ;
0 commit comments