Skip to content

Commit a82561c

Browse files
committed
don't refetch releases lists in platform & versions ajax partials
1 parent 8522660 commit a82561c

7 files changed

+74
-141
lines changed

.sqlx/query-0011936b31678ee644dff3f5f8d8e1276f7f814f22b830c46d6b77edb209a033.json

Lines changed: 28 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.sqlx/query-0ce07fe1eea10dafed3c3feb36010045c8cbcf443f6bfe78598bb75f05ecb249.json

Lines changed: 0 additions & 41 deletions
This file was deleted.

.sqlx/query-0f51891df12ccdbecbdffef1588695c7a88206171881f2d9951eb2f40125b244.json

Lines changed: 0 additions & 28 deletions
This file was deleted.

.sqlx/query-3f0fb7b26fb494e04dab61a8a831d0839fd63d13b08546c1506e7163bd363c19.json

Lines changed: 0 additions & 35 deletions
This file was deleted.

.sqlx/query-9a3bcf29ba086cd26102227e024218a0fd4b7bbe2b229350523a1aa69a4d731f.json

Lines changed: 22 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/web/crate_details.rs

Lines changed: 19 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -461,29 +461,21 @@ pub(crate) async fn get_all_releases(
461461
let req_path: String = params.path.clone().unwrap_or_default();
462462
let req_path: Vec<&str> = req_path.split('/').collect();
463463

464-
let version = match_version(&mut conn, &params.name, &params.version)
464+
let matched_release = match_version(&mut conn, &params.name, &params.version)
465465
.await?
466-
.into_canonical_req_version_or_else(|_| AxumNope::VersionNotFound)?
467-
.into_version();
466+
.into_canonical_req_version_or_else(|_| AxumNope::VersionNotFound)?;
468467

469468
let row = sqlx::query!(
470469
"SELECT
471-
crates.id AS crate_id,
472-
releases.doc_targets,
473-
releases.target_name
474-
FROM crates
475-
INNER JOIN releases on crates.id = releases.crate_id
476-
WHERE crates.name = $1 and releases.version = $2;",
477-
params.name,
478-
&version.to_string(),
470+
releases.doc_targets
471+
FROM releases
472+
WHERE releases.id = $1;",
473+
matched_release.id(),
479474
)
480475
.fetch_optional(&mut *conn)
481476
.await?
482477
.ok_or(AxumNope::CrateNotFound)?;
483478

484-
// get releases, sorted by semver
485-
let releases: Vec<Release> = releases_for_crate(&mut conn, row.crate_id).await?;
486-
487479
let doc_targets = MetaData::parse_doc_targets(row.doc_targets);
488480

489481
let inner;
@@ -505,9 +497,9 @@ pub(crate) async fn get_all_releases(
505497
(target, inner.trim_end_matches('/'))
506498
};
507499
let inner_path = if inner_path.is_empty() {
508-
format!("{}/index.html", row.target_name)
500+
format!("{}/index.html", matched_release.target_name())
509501
} else {
510-
format!("{}/{inner_path}", row.target_name)
502+
format!("{}/{inner_path}", matched_release.target_name())
511503
};
512504

513505
let target = if target.is_empty() {
@@ -517,7 +509,7 @@ pub(crate) async fn get_all_releases(
517509
};
518510

519511
let res = ReleaseList {
520-
releases,
512+
releases: matched_release.all_releases,
521513
target,
522514
inner_path,
523515
crate_name: params.name,
@@ -556,7 +548,7 @@ pub(crate) async fn get_all_platforms_inner(
556548
let req_path: String = params.path.unwrap_or_default();
557549
let req_path: Vec<&str> = req_path.split('/').collect();
558550

559-
let version = match_version(&mut conn, &params.name, &params.version)
551+
let matched_release = match_version(&mut conn, &params.name, &params.version)
560552
.await?
561553
.into_exactly_named_or_else(|corrected_name, req_version| {
562554
AxumNope::Redirect(
@@ -579,33 +571,24 @@ pub(crate) async fn get_all_platforms_inner(
579571
)),
580572
CachePolicy::ForeverInCdn,
581573
)
582-
})?
583-
.into_version();
574+
})?;
584575

585576
let krate = sqlx::query!(
586577
"SELECT
587-
crates.id,
588-
crates.name,
589578
releases.default_target,
590579
releases.doc_targets
591580
FROM releases
592-
INNER JOIN crates ON releases.crate_id = crates.id
593-
WHERE crates.name = $1 AND releases.version = $2;",
594-
params.name,
595-
version.to_string(),
581+
WHERE releases.id = $1;",
582+
matched_release.id(),
596583
)
597584
.fetch_optional(&mut *conn)
598585
.await?
599586
.ok_or(AxumNope::CrateNotFound)?;
600587

601-
let releases = releases_for_crate(&mut conn, krate.id).await?;
602-
603588
let doc_targets = MetaData::parse_doc_targets(krate.doc_targets);
604589

605-
let latest_release = releases
606-
.iter()
607-
.find(|release| release.version.pre.is_empty() && !release.yanked)
608-
.unwrap_or(&releases[0]);
590+
let latest_release = latest_release(&matched_release.all_releases)
591+
.expect("we couldn't end up here without releases");
609592

610593
// The path within this crate version's rustdoc output
611594
let inner;
@@ -627,9 +610,9 @@ pub(crate) async fn get_all_platforms_inner(
627610
(target, inner.trim_end_matches('/'))
628611
};
629612
let inner_path = if inner_path.is_empty() {
630-
format!("{}/index.html", krate.name)
613+
format!("{}/index.html", matched_release.target_name())
631614
} else {
632-
format!("{}/{inner_path}", krate.name)
615+
format!("{}/{inner_path}", matched_release.target_name())
633616
};
634617

635618
let current_target = if latest_release.build_status {
@@ -644,8 +627,8 @@ pub(crate) async fn get_all_platforms_inner(
644627

645628
let res = PlatformList {
646629
metadata: ShortMetadata {
647-
name: krate.name,
648-
version: version.clone(),
630+
name: params.name,
631+
version: matched_release.version().clone(),
649632
req_version: params.version.clone(),
650633
doc_targets,
651634
},

src/web/mod.rs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,7 @@ pub(crate) struct MatchedRelease {
127127
pub release: crate_details::Release,
128128

129129
/// all releases since we have them anyways and so we can pass them to CrateDetails
130-
all_releases: Vec<crate_details::Release>,
130+
pub(crate) all_releases: Vec<crate_details::Release>,
131131
}
132132

133133
impl MatchedRelease {
@@ -210,6 +210,10 @@ impl MatchedRelease {
210210
&self.release.version
211211
}
212212

213+
fn id(&self) -> i32 {
214+
self.release.id
215+
}
216+
213217
fn rustdoc_status(&self) -> bool {
214218
self.release.rustdoc_status
215219
}

0 commit comments

Comments
 (0)