@@ -5,11 +5,22 @@ use serde::{Deserialize, Serialize};
5
5
use crate :: Commit ;
6
6
7
7
#[ derive( Serialize , Deserialize , Debug ) ]
8
- struct GithubCommitElem { commit : GithubCommit , sha : String }
8
+ struct GithubCommitElem {
9
+ commit : GithubCommit ,
10
+ sha : String ,
11
+ }
9
12
#[ derive( Serialize , Deserialize , Debug ) ]
10
- struct GithubCommit { author : GithubAuthor , committer : GithubAuthor , message : String , }
13
+ struct GithubCommit {
14
+ author : GithubAuthor ,
15
+ committer : GithubAuthor ,
16
+ message : String ,
17
+ }
11
18
#[ derive( Serialize , Deserialize , Debug ) ]
12
- struct GithubAuthor { date : String , email : String , name : String }
19
+ struct GithubAuthor {
20
+ date : String ,
21
+ email : String ,
22
+ name : String ,
23
+ }
13
24
14
25
type GitDate = chrono:: DateTime < chrono:: Utc > ;
15
26
@@ -43,9 +54,7 @@ fn headers() -> Result<reqwest::header::HeaderMap, Error> {
43
54
44
55
pub ( crate ) fn get_commit ( sha : & str ) -> Result < Commit , Error > {
45
56
let url = SingleCommitUrl { sha } . url ( ) ;
46
- let client = Client :: builder ( )
47
- . default_headers ( headers ( ) ?)
48
- . build ( ) ?;
57
+ let client = Client :: builder ( ) . default_headers ( headers ( ) ?) . build ( ) ?;
49
58
let response: Response = client. get ( & url) . send ( ) ?;
50
59
let elem: GithubCommitElem = response. json ( ) ?;
51
60
elem. git_commit ( )
@@ -71,26 +80,44 @@ const PER_PAGE: usize = 100;
71
80
const OWNER : & ' static str = "rust-lang" ;
72
81
const REPO : & ' static str = "rust" ;
73
82
74
-
75
- trait ToUrl { fn url ( & self ) -> String ; }
76
- struct CommitsUrl < ' a > { page : usize , author : & ' a str , since : & ' a str , sha : & ' a str }
77
- struct SingleCommitUrl < ' a > { sha : & ' a str }
83
+ trait ToUrl {
84
+ fn url ( & self ) -> String ;
85
+ }
86
+ struct CommitsUrl < ' a > {
87
+ page : usize ,
88
+ author : & ' a str ,
89
+ since : & ' a str ,
90
+ sha : & ' a str ,
91
+ }
92
+ struct SingleCommitUrl < ' a > {
93
+ sha : & ' a str ,
94
+ }
78
95
79
96
impl < ' a > ToUrl for CommitsUrl < ' a > {
80
97
fn url ( & self ) -> String {
81
- format ! ( "https://api.github.com/repos/{OWNER}/{REPO}/commits\
98
+ format ! (
99
+ "https://api.github.com/repos/{OWNER}/{REPO}/commits\
82
100
?page={PAGE}&per_page={PER_PAGE}\
83
101
&author={AUTHOR}&since={SINCE}&sha={SHA}",
84
- OWNER =OWNER , REPO =REPO ,
85
- PAGE =self . page, PER_PAGE =PER_PAGE ,
86
- AUTHOR =self . author, SINCE =self . since, SHA =self . sha)
102
+ OWNER = OWNER ,
103
+ REPO = REPO ,
104
+ PAGE = self . page,
105
+ PER_PAGE = PER_PAGE ,
106
+ AUTHOR = self . author,
107
+ SINCE = self . since,
108
+ SHA = self . sha
109
+ )
87
110
}
88
111
}
89
112
90
113
impl < ' a > ToUrl for SingleCommitUrl < ' a > {
91
114
fn url ( & self ) -> String {
92
- format ! ( "https://api.github.com/repos/{OWNER}/{REPO}/commits/{REF}" ,
93
- OWNER =OWNER , REPO =REPO , REF =self . sha)
115
+ format ! (
116
+ "https://api.github.com/repos/{OWNER}/{REPO}/commits/{REF}" ,
117
+ OWNER = OWNER ,
118
+ REPO = REPO ,
119
+ REF = self . sha
120
+ )
94
121
}
95
122
}
96
123
@@ -102,11 +129,15 @@ fn get_commits(q: CommitsQuery) -> Result<Vec<Commit>, Error> {
102
129
// focus on Pull Request merges, all authored and committed by bors.
103
130
let author = "bors" ;
104
131
105
- let client = Client :: builder ( )
106
- . default_headers ( headers ( ) ?)
107
- . build ( ) ?;
132
+ let client = Client :: builder ( ) . default_headers ( headers ( ) ?) . build ( ) ?;
108
133
for page in 1 .. {
109
- let url = CommitsUrl { page, author, since : q. since_date , sha : q. most_recent_sha } . url ( ) ;
134
+ let url = CommitsUrl {
135
+ page,
136
+ author,
137
+ since : q. since_date ,
138
+ sha : q. most_recent_sha ,
139
+ }
140
+ . url ( ) ;
110
141
111
142
let response: Response = client. get ( & url) . send ( ) ?;
112
143
@@ -121,35 +152,49 @@ fn get_commits(q: CommitsQuery) -> Result<Vec<Commit>, Error> {
121
152
commits. push ( commit) ;
122
153
123
154
if elem. sha == q. earliest_sha {
124
- eprintln ! ( "ending github query because we found starting sha: {}" , elem. sha) ;
155
+ eprintln ! (
156
+ "ending github query because we found starting sha: {}" ,
157
+ elem. sha
158
+ ) ;
125
159
return Loop :: Break ;
126
160
}
127
161
128
162
Loop :: Next
129
163
} ) ?;
130
164
131
- if let Loop :: Break = action { break ; }
165
+ if let Loop :: Break = action {
166
+ break ;
167
+ }
132
168
}
133
169
134
- eprintln ! ( "get_commits_between returning commits, len: {}" , commits. len( ) ) ;
170
+ eprintln ! (
171
+ "get_commits_between returning commits, len: {}" ,
172
+ commits. len( )
173
+ ) ;
135
174
136
175
// reverse to obtain chronological order
137
176
commits. reverse ( ) ;
138
177
Ok ( commits)
139
178
}
140
179
141
- enum Loop < E > { Break , Next , Err ( E ) }
142
- enum Void { }
180
+ enum Loop < E > {
181
+ Break ,
182
+ Next ,
183
+ Err ( E ) ,
184
+ }
185
+ enum Void { }
143
186
144
- fn parse_paged_elems < Elem : for < ' a > serde:: Deserialize < ' a > > ( response : Response ,
145
- mut k : impl FnMut ( Elem ) -> Loop < Error > )
146
- -> Result < Loop < Void > , Error >
147
- {
187
+ fn parse_paged_elems < Elem : for < ' a > serde:: Deserialize < ' a > > (
188
+ response : Response ,
189
+ mut k : impl FnMut ( Elem ) -> Loop < Error > ,
190
+ ) -> Result < Loop < Void > , Error > {
148
191
// parse the JSON into an array of the expected Elem type
149
192
let elems: Vec < Elem > = response. json ( ) ?;
150
193
151
194
// if `elems` is empty, then we've run out of useful pages to lookup.
152
- if elems. len ( ) == 0 { return Ok ( Loop :: Break ) ; }
195
+ if elems. len ( ) == 0 {
196
+ return Ok ( Loop :: Break ) ;
197
+ }
153
198
154
199
for elem in elems. into_iter ( ) {
155
200
let act = k ( elem) ;
0 commit comments