Skip to content

Commit 7a9b351

Browse files
committed
migrate from internal cargo-metadata crate to cargo_metadata and its structs
1 parent df6e3cb commit 7a9b351

File tree

15 files changed

+284
-293
lines changed

15 files changed

+284
-293
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ aws-sdk-cloudfront = "1.3.0"
7575
aws-smithy-types-convert = { version = "0.60.0", features = ["convert-chrono"] }
7676
http = "1.0.0"
7777
uuid = { version = "1.1.2", features = ["v4"]}
78+
cargo_metadata = "0.23.0"
7879

7980
# Data serialization and deserialization
8081
serde = { version = "1.0", features = ["derive"] }
@@ -118,6 +119,7 @@ aws-smithy-runtime = {version = "1.0.1", features = ["client", "test-util"]}
118119
aws-smithy-http = "0.62.0"
119120
indoc = "2.0.0"
120121
pretty_assertions = "1.4.0"
122+
cargo_metadata = { version = "0.23.0", features = ["builder"] }
121123

122124
[profile.dev.package."*"]
123125
opt-level = 2

src/db/add_package.rs

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ use crate::{
44
error::Result,
55
registry_api::{CrateData, CrateOwner, ReleaseData},
66
storage::CompressionAlgorithm,
7-
utils::{MetadataPackage, rustc_version::parse_rustc_date},
7+
utils::{cargo_metadata::PackageExt as _, rustc_version::parse_rustc_date},
88
web::crate_details::{latest_release, releases_for_crate},
99
};
1010
use anyhow::{Context, anyhow};
11+
use cargo_metadata::DependencyKind;
1112
use derive_more::Display;
1213
use futures_util::stream::TryStreamExt;
1314
use semver::VersionReq;
@@ -46,7 +47,7 @@ pub(crate) async fn finish_release(
4647
conn: &mut sqlx::PgConnection,
4748
crate_id: CrateId,
4849
release_id: ReleaseId,
49-
metadata_pkg: &MetadataPackage,
50+
metadata_pkg: &cargo_metadata::Package,
5051
source_dir: &Path,
5152
default_target: &str,
5253
source_files: Value,
@@ -394,24 +395,22 @@ pub(crate) async fn initialize_build(
394395
Ok(build_id)
395396
}
396397

397-
/// Convert dependencies into Vec<(String, VersionReq, String, bool)>
398-
fn convert_dependencies(pkg: &MetadataPackage) -> Vec<(String, VersionReq, String, bool)> {
398+
fn convert_dependencies(
399+
pkg: &cargo_metadata::Package,
400+
) -> Vec<(String, VersionReq, DependencyKind, bool)> {
399401
pkg.dependencies
400402
.iter()
401403
.map(|dependency| {
402404
let name = dependency.name.clone();
403405
let version = dependency.req.clone();
404-
let kind = dependency
405-
.kind
406-
.clone()
407-
.unwrap_or_else(|| "normal".to_string());
406+
let kind = dependency.kind;
408407
(name, version, kind, dependency.optional)
409408
})
410409
.collect()
411410
}
412411

413412
/// Reads features and converts them to Vec<Feature> with default being first
414-
fn get_features(pkg: &MetadataPackage) -> Vec<Feature> {
413+
fn get_features(pkg: &cargo_metadata::Package) -> Vec<Feature> {
415414
let mut features = Vec::with_capacity(pkg.features.len());
416415
if let Some(subfeatures) = pkg.features.get("default") {
417416
features.push(Feature::new("default".into(), subfeatures.clone()));
@@ -426,8 +425,8 @@ fn get_features(pkg: &MetadataPackage) -> Vec<Feature> {
426425
}
427426

428427
/// Reads readme if there is any read defined in Cargo.toml of a Package
429-
fn get_readme(pkg: &MetadataPackage, source_dir: &Path) -> Result<Option<String>> {
430-
let readme_path = source_dir.join(pkg.readme.as_deref().unwrap_or("README.md"));
428+
fn get_readme(pkg: &cargo_metadata::Package, source_dir: &Path) -> Result<Option<String>> {
429+
let readme_path = source_dir.join(pkg.readme.as_deref().unwrap_or("README.md".into()));
431430

432431
if !readme_path.exists() {
433432
return Ok(None);
@@ -447,8 +446,8 @@ fn get_readme(pkg: &MetadataPackage, source_dir: &Path) -> Result<Option<String>
447446
}
448447
}
449448

450-
fn get_rustdoc(pkg: &MetadataPackage, source_dir: &Path) -> Result<Option<String>> {
451-
if let Some(src_path) = &pkg.targets.first().and_then(|t| t.src_path.as_ref()) {
449+
fn get_rustdoc(pkg: &cargo_metadata::Package, source_dir: &Path) -> Result<Option<String>> {
450+
if let Some(src_path) = &pkg.targets.first().map(|t| &t.src_path) {
452451
let src_path = Path::new(src_path);
453452
if src_path.is_absolute() {
454453
read_rust_doc(src_path)
@@ -496,7 +495,7 @@ fn read_rust_doc(file_path: &Path) -> Result<Option<String>> {
496495
/// Adds keywords into database
497496
async fn add_keywords_into_database(
498497
conn: &mut sqlx::PgConnection,
499-
pkg: &MetadataPackage,
498+
pkg: &cargo_metadata::Package,
500499
release_id: ReleaseId,
501500
) -> Result<()> {
502501
let wanted_keywords: HashMap<String, String> = pkg
@@ -648,7 +647,7 @@ mod test {
648647
use super::*;
649648
use crate::registry_api::OwnerKind;
650649
use crate::test::*;
651-
use crate::utils::CargoMetadata;
650+
use crate::utils::cargo_metadata::{MetadataExt as _, load_cargo_metadata_from_host_path};
652651
use chrono::NaiveDate;
653652
use std::slice;
654653
use test_case::test_case;
@@ -1194,7 +1193,7 @@ mod test {
11941193
"#;
11951194

11961195
std::fs::write(dir.path().join("Cargo.toml"), [base, extra].concat())?;
1197-
let metadata = CargoMetadata::load_from_host_path(dir.path())?;
1196+
let metadata = load_cargo_metadata_from_host_path(dir.path())?;
11981197
let features = super::get_features(metadata.root());
11991198
assert_eq!(features, expected.as_ref());
12001199

src/docbuilder/rustwide_builder.rs

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ use crate::{
1717
rustdoc_archive_path, rustdoc_json_path, source_archive_path,
1818
},
1919
utils::{
20-
CargoMetadata, ConfigName, MetadataPackage, copy_dir_all, get_config, parse_rustc_version,
21-
report_error, set_config,
20+
ConfigName,
21+
cargo_metadata::{MetadataExt as _, PackageExt as _, load_cargo_metadata_from_rustwide},
22+
copy_dir_all, get_config, parse_rustc_version, report_error, set_config,
2223
},
2324
};
2425
use anyhow::{Context as _, Error, anyhow, bail};
@@ -379,14 +380,14 @@ impl RustwideBuilder {
379380
}
380381

381382
pub fn build_local_package(&mut self, path: &Path) -> Result<BuildPackageSummary> {
382-
let metadata = CargoMetadata::load_from_rustwide(&self.workspace, &self.toolchain, path)
383+
let metadata = load_cargo_metadata_from_rustwide(&self.workspace, &self.toolchain, path)
383384
.map_err(|err| {
384385
err.context(format!("failed to load local package {}", path.display()))
385386
})?;
386387
let package = metadata.root();
387388
self.build_package(
388389
&package.name,
389-
&package.version,
390+
&package.version(),
390391
PackageKind::Local(path),
391392
false,
392393
)
@@ -1001,7 +1002,7 @@ impl RustwideBuilder {
10011002
create_essential_files: bool,
10021003
collect_metrics: bool,
10031004
) -> Result<FullBuildResult> {
1004-
let cargo_metadata = CargoMetadata::load_from_rustwide(
1005+
let cargo_metadata = load_cargo_metadata_from_rustwide(
10051006
&self.workspace,
10061007
&self.toolchain,
10071008
&build.host_source_dir(),
@@ -1232,7 +1233,7 @@ impl RustwideBuilder {
12321233
copy_dir_all(source, dest).map_err(Into::into)
12331234
}
12341235

1235-
fn get_repo(&self, metadata: &MetadataPackage) -> Result<Option<i32>> {
1236+
fn get_repo(&self, metadata: &cargo_metadata::Package) -> Result<Option<i32>> {
12361237
self.runtime
12371238
.block_on(self.repository_stats_updater.load_repository(metadata))
12381239
}
@@ -1241,7 +1242,7 @@ impl RustwideBuilder {
12411242
struct FullBuildResult {
12421243
result: BuildResult,
12431244
target: String,
1244-
cargo_metadata: CargoMetadata,
1245+
cargo_metadata: cargo_metadata::Metadata,
12451246
doc_coverage: Option<DocCoverage>,
12461247
build_log: String,
12471248
}
@@ -1286,10 +1287,12 @@ impl Default for BuildPackageSummary {
12861287
#[cfg(test)]
12871288
mod tests {
12881289
use super::*;
1289-
use crate::db::types::Feature;
1290-
use crate::registry_api::ReleaseData;
1291-
use crate::storage::{CompressionAlgorithm, compression};
1292-
use crate::test::{AxumRouterTestExt, TestEnvironment};
1290+
use crate::{
1291+
db::types::Feature,
1292+
registry_api::ReleaseData,
1293+
storage::{CompressionAlgorithm, compression},
1294+
test::{AxumRouterTestExt, TestEnvironment, dummy_metadata_package},
1295+
};
12931296
use pretty_assertions::assert_eq;
12941297
use std::{io, iter};
12951298
use test_case::test_case;
@@ -1660,21 +1663,7 @@ mod tests {
16601663
&mut conn,
16611664
crate_id,
16621665
release_id,
1663-
&MetadataPackage {
1664-
name: crate_.into(),
1665-
version: version.clone(),
1666-
id: "".into(),
1667-
license: None,
1668-
repository: None,
1669-
homepage: None,
1670-
description: None,
1671-
documentation: None,
1672-
dependencies: vec![],
1673-
targets: vec![],
1674-
readme: None,
1675-
keywords: vec![],
1676-
features: HashMap::new(),
1677-
},
1666+
&dummy_metadata_package().build().unwrap(),
16781667
Path::new("/unknown/"),
16791668
"x86_64-unknown-linux-gnu",
16801669
serde_json::Value::Array(vec![]),

src/repositories/updater.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use crate::error::Result;
22
use crate::repositories::{GitHub, GitLab, RateLimitReached};
3-
use crate::utils::MetadataPackage;
43
use crate::{Config, db::Pool};
54
use async_trait::async_trait;
65
use chrono::{DateTime, Utc};
@@ -81,7 +80,10 @@ impl RepositoryStatsUpdater {
8180
Self { updaters, pool }
8281
}
8382

84-
pub(crate) async fn load_repository(&self, metadata: &MetadataPackage) -> Result<Option<i32>> {
83+
pub(crate) async fn load_repository(
84+
&self,
85+
metadata: &cargo_metadata::Package,
86+
) -> Result<Option<i32>> {
8587
let url = match &metadata.repository {
8688
Some(url) => url,
8789
None => {

0 commit comments

Comments
 (0)