From 78115216c6954171b8857576b0a4de2d3548faae Mon Sep 17 00:00:00 2001 From: Pietro Albini Date: Mon, 25 Nov 2019 12:11:06 +0100 Subject: [PATCH] rustwide_builder: handle renamed crates --- src/db/add_package.rs | 4 ++-- src/docbuilder/rustwide_builder.rs | 19 +++++++++++++------ src/utils/cargo_metadata.rs | 28 ++++++++++++++++++++++++---- 3 files changed, 39 insertions(+), 12 deletions(-) diff --git a/src/db/add_package.rs b/src/db/add_package.rs index de2aa4d99..94c8e3a41 100644 --- a/src/db/add_package.rs +++ b/src/db/add_package.rs @@ -63,7 +63,7 @@ pub(crate) fn add_package_into_database(conn: &Connection, &metadata_pkg.version, &release_time, &dependencies.to_json(), - &metadata_pkg.targets[0].name.replace("-", "_"), + &metadata_pkg.package_name(), &yanked, &res.successful, &has_docs, @@ -117,7 +117,7 @@ pub(crate) fn add_package_into_database(conn: &Connection, &format!("{}", metadata_pkg.version), &release_time, &dependencies.to_json(), - &metadata_pkg.targets[0].name.replace("-", "_"), + &metadata_pkg.package_name(), &yanked, &res.successful, &has_docs, diff --git a/src/docbuilder/rustwide_builder.rs b/src/docbuilder/rustwide_builder.rs index f90e5900d..b4094f123 100644 --- a/src/docbuilder/rustwide_builder.rs +++ b/src/docbuilder/rustwide_builder.rs @@ -281,12 +281,19 @@ impl RustwideBuilder { build.host_source_dir(), )?); - has_docs = build - .host_target_dir() - .join(&res.target) - .join("doc") - .join(name.replace("-", "_")) - .is_dir(); + has_docs = res + .cargo_metadata + .root() + .library_name() + .map(|name| { + build + .host_target_dir() + .join(&res.target) + .join("doc") + .join(name) + .is_dir() + }) + .unwrap_or(false); } if has_docs { diff --git a/src/utils/cargo_metadata.rs b/src/utils/cargo_metadata.rs index 3da424285..cb405fa4b 100644 --- a/src/utils/cargo_metadata.rs +++ b/src/utils/cargo_metadata.rs @@ -79,11 +79,31 @@ pub(crate) struct Package { } impl Package { + fn library_target(&self) -> Option<&Target> { + self.targets + .iter() + .find(|target| match target.kind.as_slice() { + [kind] if kind == "lib" || kind == "proc-macro" => true, + _ => false, + }) + } + pub(crate) fn is_library(&self) -> bool { - match self.targets[0].kind.as_slice() { - &[ref kind] if kind == "lib" || kind == "proc-macro" => true, - _ => false, - } + self.library_target().is_some() + } + + fn normalize_package_name(&self, name: &str) -> String { + name.replace('-', "_") + } + + pub(crate) fn package_name(&self) -> String { + self.library_name() + .unwrap_or_else(|| self.normalize_package_name(&self.targets[0].name)) + } + + pub(crate) fn library_name(&self) -> Option { + self.library_target() + .map(|target| self.normalize_package_name(&target.name)) } }