@@ -7,17 +7,17 @@ use crate::load::SiteCtxt;
7
7
8
8
use std:: sync:: Arc ;
9
9
10
- use regex:: Regex ;
10
+ use regex:: { Captures , Regex } ;
11
11
12
12
lazy_static:: lazy_static! {
13
13
static ref BODY_TRY_COMMIT : Regex =
14
14
Regex :: new( r#"(?:\W|^)@rust-timer\s+build\s+(\w+)(?:\W|$)(?:include=(\S+))?\s*(?:exclude=(\S+))?\s*(?:runs=(\d+))?"# ) . unwrap( ) ;
15
15
static ref BODY_QUEUE : Regex =
16
16
Regex :: new( r#"(?:\W|^)@rust-timer\s+queue(?:\W|$)(?:include=(\S+))?\s*(?:exclude=(\S+))?\s*(?:runs=(\d+))?"# ) . unwrap( ) ;
17
17
static ref BODY_MAKE_PR_FOR : Regex =
18
- Regex :: new( r#"(?:\W|^)@rust-timer\s+make-pr-for\s+(\w +)(?:\W|$)"# ) . unwrap( ) ;
18
+ Regex :: new( r#"(?:\W|^)@rust-timer\s+make-pr-for\s+([\w:/\.\-] +)(?:\W|$)"# ) . unwrap( ) ;
19
19
static ref BODY_UDPATE_PR_FOR : Regex =
20
- Regex :: new( r#"(?:\W|^)@rust-timer\s+update-branch-for\s+(\w +)(?:\W|$)"# ) . unwrap( ) ;
20
+ Regex :: new( r#"(?:\W|^)@rust-timer\s+update-branch-for\s+([\w:/\.\-] +)(?:\W|$)"# ) . unwrap( ) ;
21
21
}
22
22
23
23
pub async fn handle_github (
@@ -86,50 +86,93 @@ pub async fn handle_github(
86
86
}
87
87
}
88
88
89
- let captures = BODY_MAKE_PR_FOR
90
- . captures_iter ( & request. comment . body )
91
- . collect :: < Vec < _ > > ( ) ;
92
- for capture in captures {
93
- if let Some ( rollup_merge) = capture. get ( 1 ) . map ( |c| c. as_str ( ) . to_owned ( ) ) {
94
- let rollup_merge =
95
- rollup_merge. trim_start_matches ( "https://github.com/rust-lang/rust/commit/" ) ;
96
- let client = reqwest:: Client :: new ( ) ;
97
- pr_and_try_for_rollup (
98
- & client,
99
- ctxt. clone ( ) ,
100
- & request. issue . repository_url ,
101
- & rollup_merge,
102
- & request. comment . html_url ,
103
- )
104
- . await
105
- . map_err ( |e| format ! ( "{:?}" , e) ) ?;
106
- }
89
+ for rollup_merge in extract_make_pr_for ( & request. comment . body ) {
90
+ let client = reqwest:: Client :: new ( ) ;
91
+ pr_and_try_for_rollup (
92
+ & client,
93
+ ctxt. clone ( ) ,
94
+ & request. issue . repository_url ,
95
+ & rollup_merge,
96
+ & request. comment . html_url ,
97
+ )
98
+ . await
99
+ . map_err ( |e| format ! ( "{:?}" , e) ) ?;
107
100
}
108
101
109
- let captures = BODY_UDPATE_PR_FOR
110
- . captures_iter ( & request. comment . body )
111
- . collect :: < Vec < _ > > ( ) ;
112
- for capture in captures {
113
- if let Some ( rollup_merge) = capture. get ( 1 ) . map ( |c| c. as_str ( ) . to_owned ( ) ) {
114
- let rollup_merge =
115
- rollup_merge. trim_start_matches ( "https://github.com/rust-lang/rust/commit/" ) ;
116
-
117
- // This just creates or updates the branch for this merge commit.
118
- // Intended for resolving the race condition of master merging in
119
- // between us updating the commit and merging things.
120
- let client = reqwest:: Client :: new ( ) ;
121
- let branch =
122
- branch_for_rollup ( & client, & ctxt, & request. issue . repository_url , rollup_merge)
123
- . await
124
- . map_err ( |e| e. to_string ( ) ) ?;
125
- post_comment (
126
- & ctxt. config ,
127
- request. issue . number ,
128
- & format ! ( "Master base SHA: {}" , branch. master_base_sha) ,
129
- )
130
- . await ;
131
- }
102
+ for rollup_merge in extract_update_pr_for ( & request. comment . body ) {
103
+ // This just creates or updates the branch for this merge commit.
104
+ // Intended for resolving the race condition of master merging in
105
+ // between us updating the commit and merging things.
106
+ let client = reqwest:: Client :: new ( ) ;
107
+ let branch = branch_for_rollup ( & client, & ctxt, & request. issue . repository_url , rollup_merge)
108
+ . await
109
+ . map_err ( |e| e. to_string ( ) ) ?;
110
+ post_comment (
111
+ & ctxt. config ,
112
+ request. issue . number ,
113
+ & format ! ( "Master base SHA: {}" , branch. master_base_sha) ,
114
+ )
115
+ . await ;
132
116
}
133
117
134
118
Ok ( github:: Response )
135
119
}
120
+
121
+ fn extract_make_pr_for ( body : & str ) -> impl Iterator < Item = & str > + ' _ {
122
+ BODY_MAKE_PR_FOR
123
+ . captures_iter ( body)
124
+ . filter_map ( |c| extract_rollup_merge ( c) )
125
+ }
126
+
127
+ fn extract_update_pr_for ( body : & str ) -> impl Iterator < Item = & str > + ' _ {
128
+ BODY_UDPATE_PR_FOR
129
+ . captures_iter ( body)
130
+ . filter_map ( |c| extract_rollup_merge ( c) )
131
+ }
132
+
133
+ fn extract_rollup_merge ( capture : Captures ) -> Option < & str > {
134
+ capture. get ( 1 ) . map ( |c| {
135
+ println ! ( "{}" , c. as_str( ) ) ;
136
+ c. as_str ( )
137
+ . trim_start_matches ( "https://github.com/rust-lang/rust/commit/" )
138
+ } )
139
+ }
140
+
141
+ #[ cfg( test) ]
142
+ mod tests {
143
+ use super :: * ;
144
+
145
+ #[ test]
146
+ fn captures_the_right_sha ( ) {
147
+ let message = r#"This is a message.
148
+
149
+ @rust-timer make-pr-for https://github.com/rust-lang/rust/commit/857afc75e6ca69cc7dcae36a6fac8c093ee6fa31
150
+ @rust-timer make-pr-for https://github.com/rust-lang/rust/commit/857afc75e6ca69cc7dcae36a6fac8c093ee6fa31
151
+ "# ;
152
+
153
+ let mut iter = extract_make_pr_for ( message) ;
154
+ assert_eq ! (
155
+ iter. next( ) . unwrap( ) ,
156
+ "857afc75e6ca69cc7dcae36a6fac8c093ee6fa31" ,
157
+ "sha did not match"
158
+ ) ;
159
+ assert_eq ! (
160
+ iter. next( ) . unwrap( ) ,
161
+ "857afc75e6ca69cc7dcae36a6fac8c093ee6fa31" ,
162
+ "sha did not match"
163
+ ) ;
164
+ assert ! ( iter. next( ) . is_none( ) , "there were more rollup merges" ) ;
165
+ let message = r#"This is a message.
166
+
167
+ @rust-timer update-branch-for https://github.com/rust-lang/rust/commit/857afc75e6ca69cc7dcae36a6fac8c093ee6fa31"# ;
168
+
169
+ let mut iter = extract_update_pr_for ( message) ;
170
+ let sha = iter. next ( ) . unwrap ( ) ;
171
+ println ! ( "{sha}" ) ;
172
+ assert_eq ! (
173
+ sha, "857afc75e6ca69cc7dcae36a6fac8c093ee6fa31" ,
174
+ "sha did not match"
175
+ ) ;
176
+ assert ! ( iter. next( ) . is_none( ) , "there were more rollup merges" ) ;
177
+ }
178
+ }
0 commit comments