From 045ae1c335239a4b1b6e982191bfc86e1cdd4100 Mon Sep 17 00:00:00 2001 From: Denis Cornehl Date: Fri, 1 Mar 2024 13:06:18 +0100 Subject: [PATCH] take param by value in CrateDetails::from_matched_release --- src/web/crate_details.rs | 12 ++++++------ src/web/rustdoc.rs | 33 +++++++++++++++++---------------- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/web/crate_details.rs b/src/web/crate_details.rs index 812d2bf64..5d71671ef 100644 --- a/src/web/crate_details.rs +++ b/src/web/crate_details.rs @@ -32,7 +32,7 @@ use std::sync::Arc; #[derive(Debug, Clone, PartialEq, Serialize)] pub struct CrateDetails { name: String, - version: Version, + pub version: Version, description: Option, owners: Vec<(String, String)>, dependencies: Option, @@ -100,14 +100,14 @@ impl CrateDetails { #[tracing::instrument(skip(conn))] pub(crate) async fn from_matched_release( conn: &mut sqlx::PgConnection, - release: &MatchedRelease, + release: MatchedRelease, ) -> Result { Ok(Self::new( conn, &release.name, - release.version(), - Some(release.req_version.clone()), - release.all_releases.clone(), + &release.release.version, + Some(release.req_version), + release.all_releases, ) .await? .unwrap()) @@ -422,7 +422,7 @@ pub(crate) async fn crate_details_handler( ) })?; - let mut details = CrateDetails::from_matched_release(&mut conn, &matched_release).await?; + let mut details = CrateDetails::from_matched_release(&mut conn, matched_release).await?; match details.fetch_readme(&storage).await { Ok(readme) => details.readme = readme.or(details.readme), diff --git a/src/web/rustdoc.rs b/src/web/rustdoc.rs index be6fed59b..b44b55ae1 100644 --- a/src/web/rustdoc.rs +++ b/src/web/rustdoc.rs @@ -180,16 +180,14 @@ pub(crate) async fn rustdoc_redirector_handler( rendering_time.step("serve JS for crate"); return async { - let krate = CrateDetails::from_matched_release(&mut conn, &matched_release).await?; - - let version = matched_release.into_version(); + let krate = CrateDetails::from_matched_release(&mut conn, matched_release).await?; rendering_time.step("fetch from storage"); match storage .fetch_rustdoc_file( &crate_name, - &version.to_string(), + &krate.version.to_string(), krate.latest_build_id.unwrap_or(0), target, krate.archive_storage, @@ -435,8 +433,7 @@ pub(crate) async fn rustdoc_html_server_handler( rendering_time.step("crate details"); // Get the crate's details from the database - let krate = CrateDetails::from_matched_release(&mut conn, &matched_release).await?; - let version = matched_release.into_version(); + let krate = CrateDetails::from_matched_release(&mut conn, matched_release).await?; if !krate.rustdoc_status { rendering_time.step("redirect to crate"); @@ -452,7 +449,7 @@ pub(crate) async fn rustdoc_html_server_handler( if req_path.first().copied() == Some(&krate.metadata.default_target) { return redirect( ¶ms.name, - &version, + &krate.version, &req_path[1..], CachePolicy::ForeverInCdn, ); @@ -476,7 +473,7 @@ pub(crate) async fn rustdoc_html_server_handler( let blob = match storage .fetch_rustdoc_file( ¶ms.name, - &version.to_string(), + &krate.version.to_string(), krate.latest_build_id.unwrap_or(0), &storage_path, krate.archive_storage, @@ -498,14 +495,19 @@ pub(crate) async fn rustdoc_html_server_handler( return if storage .rustdoc_file_exists( ¶ms.name, - &version.to_string(), + &krate.version.to_string(), krate.latest_build_id.unwrap_or(0), &storage_path, krate.archive_storage, ) .await? { - redirect(¶ms.name, &version, &req_path, CachePolicy::ForeverInCdn) + redirect( + ¶ms.name, + &krate.version, + &req_path, + CachePolicy::ForeverInCdn, + ) } else if req_path.first().map_or(false, |p| p.contains('-')) { // This is a target, not a module; it may not have been built. // Redirect to the default target and show a search page instead of a hard 404. @@ -523,7 +525,7 @@ pub(crate) async fn rustdoc_html_server_handler( if storage_path == format!("{}/index.html", krate.target_name) { error!( krate = params.name, - version = version.to_string(), + version = krate.version.to_string(), original_path = original_path.as_ref(), storage_path, "Couldn't find crate documentation root on storage. @@ -553,8 +555,8 @@ pub(crate) async fn rustdoc_html_server_handler( // Get the latest version of the crate let latest_version = latest_release.version.clone(); - let is_latest_version = latest_version == version; - let is_prerelease = !(version.pre.is_empty()); + let is_latest_version = latest_version == krate.version; + let is_prerelease = !(krate.version.pre.is_empty()); // The path within this crate version's rustdoc output let (target, inner_path) = { @@ -726,8 +728,7 @@ pub(crate) async fn target_redirect_handler( .await? .into_canonical_req_version_or_else(|_| AxumNope::VersionNotFound)?; - let crate_details = CrateDetails::from_matched_release(&mut conn, &matched_release).await?; - let version = matched_release.into_version(); + let crate_details = CrateDetails::from_matched_release(&mut conn, matched_release).await?; // We're trying to find the storage location // for the requested path in the target-redirect. @@ -757,7 +758,7 @@ pub(crate) async fn target_redirect_handler( let (redirect_path, query_args) = if storage .rustdoc_file_exists( &name, - &version.to_string(), + &crate_details.version.to_string(), crate_details.latest_build_id.unwrap_or(0), &storage_location_for_path, crate_details.archive_storage,