@@ -4,7 +4,9 @@ use crate::experiments::{CapLints, CrateSelect, Experiment, GitHubIssue, Mode, S
44use crate :: prelude:: * ;
55use crate :: server:: github:: Issue ;
66use crate :: server:: messages:: { Label , Message } ;
7- use crate :: server:: routes:: webhooks:: args:: { AbortArgs , EditArgs , RetryReportArgs , RunArgs } ;
7+ use crate :: server:: routes:: webhooks:: args:: {
8+ AbortArgs , EditArgs , RetryArgs , RetryReportArgs , RunArgs ,
9+ } ;
810use crate :: server:: Data ;
911
1012pub fn ping ( data : & Data , issue : & Issue ) -> Fallible < ( ) > {
@@ -108,6 +110,31 @@ pub fn retry_report(data: &Data, issue: &Issue, args: RetryReportArgs) -> Fallib
108110 }
109111}
110112
113+ pub fn retry ( data : & Data , issue : & Issue , args : RetryArgs ) -> Fallible < ( ) > {
114+ let name = get_name ( & data. db , issue, args. name ) ?;
115+
116+ if let Some ( mut experiment) = Experiment :: get ( & data. db , & name) ? {
117+ if experiment. status != Status :: Failed {
118+ bail ! ( "Experiment **`{}`** didn't fail!" , name) ;
119+ }
120+
121+ experiment. set_status ( & data. db , Status :: Queued ) ?;
122+ data. reports_worker . wake ( ) ;
123+
124+ Message :: new ( )
125+ . line (
126+ "hammer_and_wrench" ,
127+ format ! ( "Experiment **`{}`** queued again." , name) ,
128+ )
129+ . set_label ( Label :: ExperimentQueued )
130+ . send ( & issue. url , data) ?;
131+
132+ Ok ( ( ) )
133+ } else {
134+ bail ! ( "an experiment named **`{}`** doesn't exist!" , name) ;
135+ }
136+ }
137+
111138pub fn abort ( data : & Data , issue : & Issue , args : AbortArgs ) -> Fallible < ( ) > {
112139 let name = get_name ( & data. db , issue, args. name ) ?;
113140
0 commit comments