Skip to content

Commit 97fde48

Browse files
authored
Merge pull request #1258 from coolshaurya/2021_01_22
Make /crate/:crate/latest/builds.json not strip .json suffix
2 parents 12b591c + 9aa1a9c commit 97fde48

File tree

1 file changed

+31
-7
lines changed

1 file changed

+31
-7
lines changed

src/web/builds.rs

Lines changed: 31 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,26 @@ pub fn build_list_handler(req: &mut Request) -> IronResult<Response> {
4343
let mut conn = extension!(req, Pool).get()?;
4444
let limits = ctry!(req, Limits::for_crate(&mut conn, name));
4545

46+
let is_json = req
47+
.url
48+
.path()
49+
.last()
50+
.map_or(false, |segment| segment.ends_with(".json"));
51+
4652
let version =
4753
match match_version(&mut conn, name, req_version).and_then(|m| m.assume_exact())? {
4854
MatchSemver::Exact((version, _)) => version,
4955

5056
MatchSemver::Semver((version, _)) => {
57+
let ext = if is_json { ".json" } else { "" };
5158
let url = ctry!(
5259
req,
5360
Url::parse(&format!(
54-
"{}/crate/{}/{}/builds",
61+
"{}/crate/{}/{}/builds{}",
5562
redirect_base(req),
5663
name,
57-
version
64+
version,
65+
ext,
5866
)),
5967
);
6068

@@ -95,7 +103,7 @@ pub fn build_list_handler(req: &mut Request) -> IronResult<Response> {
95103
})
96104
.collect();
97105

98-
if req.url.path().join("/").ends_with(".json") {
106+
if is_json {
99107
let mut resp = Response::with((status::Ok, serde_json::to_string(&builds).unwrap()));
100108
resp.headers.set(ContentType::json());
101109
resp.headers.set(Expires(HttpDate(time::now())));
@@ -302,23 +310,39 @@ mod tests {
302310
fn latest_redirect() {
303311
wrapper(|env| {
304312
env.fake_release()
305-
.name("foo")
313+
.name("aquarelle")
306314
.version("0.1.0")
307315
.builds(vec![FakeBuild::default()
308316
.rustc_version("rustc 1.0.0")
309317
.docsrs_version("docs.rs 1.0.0")])
310318
.create()?;
311319

312320
env.fake_release()
313-
.name("foo")
321+
.name("aquarelle")
314322
.version("0.2.0")
315323
.builds(vec![FakeBuild::default()
316324
.rustc_version("rustc 1.0.0")
317325
.docsrs_version("docs.rs 1.0.0")])
318326
.create()?;
319327

320-
let resp = env.frontend().get("/crate/foo/latest/builds").send()?;
321-
assert!(resp.url().as_str().ends_with("/crate/foo/0.2.0/builds"));
328+
let resp = env
329+
.frontend()
330+
.get("/crate/aquarelle/latest/builds")
331+
.send()?;
332+
assert!(resp
333+
.url()
334+
.as_str()
335+
.ends_with("/crate/aquarelle/0.2.0/builds"));
336+
337+
let resp_json = env
338+
.frontend()
339+
.get("/crate/aquarelle/latest/builds.json")
340+
.send()?;
341+
assert!(resp_json
342+
.url()
343+
.as_str()
344+
.ends_with("/crate/aquarelle/0.2.0/builds.json"));
345+
322346
Ok(())
323347
});
324348
}

0 commit comments

Comments
 (0)