Skip to content

Commit

Permalink
don't refetch releases lists in platform & versions ajax partials
Browse files Browse the repository at this point in the history
  • Loading branch information
syphar committed Mar 10, 2024
1 parent a1928f7 commit 3baecb4
Show file tree
Hide file tree
Showing 7 changed files with 74 additions and 141 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

This file was deleted.

This file was deleted.

This file was deleted.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

55 changes: 19 additions & 36 deletions src/web/crate_details.rs
Original file line number Diff line number Diff line change
Expand Up @@ -461,29 +461,21 @@ pub(crate) async fn get_all_releases(
let req_path: String = params.path.clone().unwrap_or_default();
let req_path: Vec<&str> = req_path.split('/').collect();

let version = match_version(&mut conn, &params.name, &params.version)
let matched_release = match_version(&mut conn, &params.name, &params.version)
.await?
.into_canonical_req_version_or_else(|_| AxumNope::VersionNotFound)?
.into_version();
.into_canonical_req_version_or_else(|_| AxumNope::VersionNotFound)?;

let row = sqlx::query!(
"SELECT
crates.id AS crate_id,
releases.doc_targets,
releases.target_name
FROM crates
INNER JOIN releases on crates.id = releases.crate_id
WHERE crates.name = $1 and releases.version = $2;",
params.name,
&version.to_string(),
releases.doc_targets
FROM releases
WHERE releases.id = $1;",
matched_release.id(),
)
.fetch_optional(&mut *conn)
.await?
.ok_or(AxumNope::CrateNotFound)?;

// get releases, sorted by semver
let releases: Vec<Release> = releases_for_crate(&mut conn, row.crate_id).await?;

let doc_targets = MetaData::parse_doc_targets(row.doc_targets);

let inner;
Expand All @@ -505,9 +497,9 @@ pub(crate) async fn get_all_releases(
(target, inner.trim_end_matches('/'))
};
let inner_path = if inner_path.is_empty() {
format!("{}/index.html", row.target_name)
format!("{}/index.html", matched_release.target_name())
} else {
format!("{}/{inner_path}", row.target_name)
format!("{}/{inner_path}", matched_release.target_name())
};

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

let res = ReleaseList {
releases,
releases: matched_release.all_releases,
target,
inner_path,
crate_name: params.name,
Expand Down Expand Up @@ -556,7 +548,7 @@ pub(crate) async fn get_all_platforms_inner(
let req_path: String = params.path.unwrap_or_default();
let req_path: Vec<&str> = req_path.split('/').collect();

let version = match_version(&mut conn, &params.name, &params.version)
let matched_release = match_version(&mut conn, &params.name, &params.version)
.await?
.into_exactly_named_or_else(|corrected_name, req_version| {
AxumNope::Redirect(
Expand All @@ -579,33 +571,24 @@ pub(crate) async fn get_all_platforms_inner(
)),
CachePolicy::ForeverInCdn,
)
})?
.into_version();
})?;

let krate = sqlx::query!(
"SELECT
crates.id,
crates.name,
releases.default_target,
releases.doc_targets
FROM releases
INNER JOIN crates ON releases.crate_id = crates.id
WHERE crates.name = $1 AND releases.version = $2;",
params.name,
version.to_string(),
WHERE releases.id = $1;",
matched_release.id(),
)
.fetch_optional(&mut *conn)
.await?
.ok_or(AxumNope::CrateNotFound)?;

let releases = releases_for_crate(&mut conn, krate.id).await?;

let doc_targets = MetaData::parse_doc_targets(krate.doc_targets);

let latest_release = releases
.iter()
.find(|release| release.version.pre.is_empty() && !release.yanked)
.unwrap_or(&releases[0]);
let latest_release = latest_release(&matched_release.all_releases)
.expect("we couldn't end up here without releases");

// The path within this crate version's rustdoc output
let inner;
Expand All @@ -627,9 +610,9 @@ pub(crate) async fn get_all_platforms_inner(
(target, inner.trim_end_matches('/'))
};
let inner_path = if inner_path.is_empty() {
format!("{}/index.html", krate.name)
format!("{}/index.html", matched_release.target_name())
} else {
format!("{}/{inner_path}", krate.name)
format!("{}/{inner_path}", matched_release.target_name())
};

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

let res = PlatformList {
metadata: ShortMetadata {
name: krate.name,
version: version.clone(),
name: params.name,
version: matched_release.version().clone(),
req_version: params.version.clone(),
doc_targets,
},
Expand Down
6 changes: 5 additions & 1 deletion src/web/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ pub(crate) struct MatchedRelease {
pub release: crate_details::Release,

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

impl MatchedRelease {
Expand Down Expand Up @@ -210,6 +210,10 @@ impl MatchedRelease {
&self.release.version
}

fn id(&self) -> i32 {
self.release.id
}

fn rustdoc_status(&self) -> bool {
self.release.rustdoc_status
}
Expand Down

0 comments on commit 3baecb4

Please sign in to comment.