@@ -4,7 +4,9 @@ use crate::experiments::{CapLints, CrateSelect, Experiment, GitHubIssue, Mode, S
4
4
use crate :: prelude:: * ;
5
5
use crate :: server:: github:: Issue ;
6
6
use 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
+ } ;
8
10
use crate :: server:: Data ;
9
11
10
12
pub fn ping ( data : & Data , issue : & Issue ) -> Fallible < ( ) > {
@@ -108,6 +110,31 @@ pub fn retry_report(data: &Data, issue: &Issue, args: RetryReportArgs) -> Fallib
108
110
}
109
111
}
110
112
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
+
111
138
pub fn abort ( data : & Data , issue : & Issue , args : AbortArgs ) -> Fallible < ( ) > {
112
139
let name = get_name ( & data. db , issue, args. name ) ?;
113
140
0 commit comments