Skip to content

Commit

Permalink
Read rustc_version directly from builds instead of release
Browse files Browse the repository at this point in the history
  • Loading branch information
Nemo157 committed Oct 12, 2023
1 parent 58a74d4 commit bfaaf07
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 63 deletions.
7 changes: 5 additions & 2 deletions src/web/crate_details.rs
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@ impl CrateDetails {
releases.license,
releases.documentation_url,
releases.default_target,
releases.doc_rustc_version,
builds.rustc_version,
doc_coverage.total_items,
doc_coverage.documented_items,
doc_coverage.total_items_needing_examples,
Expand Down Expand Up @@ -188,7 +188,10 @@ impl CrateDetails {
default_target: krate.get("default_target"),
doc_targets: MetaData::parse_doc_targets(krate.get("doc_targets")),
yanked: krate.get("yanked"),
rustdoc_css_file: get_correct_docsrs_style_file(krate.get("doc_rustc_version"))?,
rustdoc_css_file: krate
.get::<_, Option<&str>>("rustc_version")
.map(get_correct_docsrs_style_file)
.transpose()?,
};

let mut crate_details = CrateDetails {
Expand Down
66 changes: 38 additions & 28 deletions src/web/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -509,44 +509,54 @@ pub(crate) struct MetaData {
pub(crate) yanked: bool,
/// CSS file to use depending on the rustdoc version used to generate this version of this
/// crate.
pub(crate) rustdoc_css_file: String,
pub(crate) rustdoc_css_file: Option<String>,
}

impl MetaData {
#[fn_error_context::context("getting metadata for {name} {version}")]
fn from_crate(
conn: &mut Client,
name: &str,
version: &str,
version_or_latest: &str,
) -> Result<MetaData> {
conn.query_opt(
"SELECT crates.name,
releases.version,
releases.description,
releases.target_name,
releases.rustdoc_status,
releases.default_target,
releases.doc_targets,
releases.yanked,
releases.doc_rustc_version
FROM releases
INNER JOIN crates ON crates.id = releases.crate_id
WHERE crates.name = $1 AND releases.version = $2",
let row = conn.query_one(
"SELECT
crates.name,
releases.version,
releases.description,
releases.target_name,
releases.rustdoc_status,
releases.default_target,
releases.doc_targets,
releases.yanked,
builds.rustc_version
FROM releases
INNER JOIN crates ON crates.id = releases.crate_id
LEFT JOIN LATERAL (
SELECT * FROM builds
WHERE builds.rid = releases.id
ORDER BY builds.build_time
DESC LIMIT 1
) AS builds ON true
WHERE crates.name = $1 AND releases.version = $2",
&[&name, &version],
)?
.map(|row| MetaData {
name: row.get(0),
version: row.get(1),
)?;
Ok(MetaData {
name: row.get("name"),
version: row.get("version"),
version_or_latest: version_or_latest.to_string(),
description: row.get(2),
target_name: row.get(3),
rustdoc_status: row.get(4),
default_target: row.get(5),
doc_targets: MetaData::parse_doc_targets(row.get(6)),
yanked: row.get(7),
rustdoc_css_file: get_correct_docsrs_style_file(row.get(8)).unwrap(),
description: row.get("description"),
target_name: row.get("target_name"),
rustdoc_status: row.get("rustdoc_status"),
default_target: row.get("default_target"),
doc_targets: MetaData::parse_doc_targets(row.get("doc_targets")),
yanked: row.get("yanked"),
rustdoc_css_file: row
.get::<_, Option<&str>>("rustc_version")
.map(get_correct_docsrs_style_file)
.transpose()?,
})
.ok_or_else(|| anyhow!("missing metadata for {} {}", name, version))
}

fn parse_doc_targets(targets: Value) -> Vec<String> {
Expand Down Expand Up @@ -938,7 +948,7 @@ mod test {
"arm64-unknown-linux-gnu".to_string(),
],
yanked: false,
rustdoc_css_file: "rustdoc.css".to_string(),
rustdoc_css_file: Some("rustdoc.css".to_string()),
};

let correct_json = json!({
Expand Down Expand Up @@ -1016,7 +1026,7 @@ mod test {
default_target: "x86_64-unknown-linux-gnu".to_string(),
doc_targets: vec![],
yanked: false,
rustdoc_css_file: "rustdoc.css".to_string(),
rustdoc_css_file: Some("rustdoc.css".to_string()),
},
);
Ok(())
Expand Down
44 changes: 11 additions & 33 deletions src/web/source.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use super::{error::AxumResult, match_version_axum};
use crate::{
db::Pool,
impl_axum_webpage,
utils::{get_correct_docsrs_style_file, spawn_blocking},
utils::spawn_blocking,
web::{
cache::CachePolicy, error::AxumNope, file::File as DbFile, headers::CanonicalUrl,
MatchSemver, MetaData,
Expand Down Expand Up @@ -75,29 +75,18 @@ impl FileList {
version_or_latest: &str,
folder: &str,
) -> Result<Option<FileList>> {
let row = match conn.query_opt(
"SELECT crates.name,
releases.version,
releases.description,
releases.target_name,
releases.rustdoc_status,
releases.files,
releases.default_target,
releases.doc_targets,
releases.yanked,
releases.doc_rustc_version
FROM releases
LEFT OUTER JOIN crates ON crates.id = releases.crate_id
WHERE crates.name = $1 AND releases.version = $2",
let Some(row) = conn.query_opt(
"SELECT releases.files
FROM releases
LEFT OUTER JOIN crates ON crates.id = releases.crate_id
WHERE crates.name = $1 AND releases.version = $2",
&[&name, &version],
)? {
Some(row) => row,
None => return Ok(None),
)?
else {
return Ok(None);
};

let files = if let Some(files) = row.try_get::<_, Option<Value>>(5)? {
files
} else {
let Some(files) = row.try_get::<_, Option<Value>>("files")? else {
return Ok(None);
};

Expand Down Expand Up @@ -143,18 +132,7 @@ impl FileList {
});

Ok(Some(FileList {
metadata: MetaData {
name: row.get(0),
version: row.get(1),
version_or_latest: version_or_latest.to_string(),
description: row.get(2),
target_name: row.get(3),
rustdoc_status: row.get(4),
default_target: row.get(6),
doc_targets: MetaData::parse_doc_targets(row.get(7)),
yanked: row.get(8),
rustdoc_css_file: get_correct_docsrs_style_file(row.get(9))?,
},
metadata: MetaData::from_crate(conn, name, version, version_or_latest)?,
files: file_list,
}))
} else {
Expand Down
2 changes: 2 additions & 0 deletions templates/rustdoc/head.html
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
{%- import "macros.html" as macros -%}
{% if metadata.rustdoc_css_file %}
<link rel="stylesheet" href="/-/static/{{metadata.rustdoc_css_file}}?{{ docsrs_version() | slugify }}" media="all" />
{% endif %}

<link rel="search" href="/-/static/opensearch.xml" type="application/opensearchdescription+xml" title="Docs.rs" />

Expand Down

0 comments on commit bfaaf07

Please sign in to comment.