Skip to content

Commit f9e8223

Browse files
committed
[broken] [WIP] switch to cargo_metadata instead of rewriting it
1 parent f3a3740 commit f9e8223

File tree

7 files changed

+132
-151
lines changed

7 files changed

+132
-151
lines changed

Cargo.lock

+47-5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+1
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ regex = "1"
2424
structopt = "0.3"
2525
crates-index = { version = "0.15.1", optional = true }
2626
crates-index-diff = "7.1.1"
27+
cargo_metadata = "0.12"
2728
reqwest = { version = "0.11", features = ["blocking", "json"] } # TODO: Remove blocking when async is ready
2829
semver = { version = "0.9", features = ["serde"] }
2930
slug = "=0.1.1"

src/db/add_package.rs

+9-17
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ use crate::{
1010
error::Result,
1111
index::api::{CrateData, CrateOwner, ReleaseData},
1212
storage::CompressionAlgorithm,
13-
utils::MetadataPackage,
13+
utils::{MetadataPackage, PackageExt},
1414
};
1515
use log::{debug, info};
1616
use postgres::Client;
@@ -89,7 +89,7 @@ pub(crate) fn add_package_into_database(
8989
RETURNING id",
9090
&[
9191
&crate_id,
92-
&metadata_pkg.version,
92+
&metadata_pkg.version.to_string(),
9393
&registry_data.release_time,
9494
&serde_json::to_value(&dependencies)?,
9595
&metadata_pkg.package_name(),
@@ -202,11 +202,8 @@ fn convert_dependencies(pkg: &MetadataPackage) -> Vec<(String, String, String)>
202202
.iter()
203203
.map(|dependency| {
204204
let name = dependency.name.clone();
205-
let version = dependency.req.clone();
206-
let kind = dependency
207-
.kind
208-
.clone()
209-
.unwrap_or_else(|| "normal".to_string());
205+
let version = dependency.req.to_string();
206+
let kind = dbg!(serde_json::to_string(&dependency.kind).unwrap());
210207

211208
(name, version, kind)
212209
})
@@ -246,7 +243,7 @@ fn get_optional_dependencies(pkg: &MetadataPackage) -> Vec<Feature> {
246243

247244
/// Reads readme if there is any read defined in Cargo.toml of a Package
248245
fn get_readme(pkg: &MetadataPackage, source_dir: &Path) -> Result<Option<String>> {
249-
let readme_path = source_dir.join(pkg.readme.as_deref().unwrap_or("README.md"));
246+
let readme_path = source_dir.join(pkg.readme.as_deref().unwrap_or(Path::new("README.md")));
250247

251248
if !readme_path.exists() {
252249
return Ok(None);
@@ -267,16 +264,11 @@ fn get_readme(pkg: &MetadataPackage, source_dir: &Path) -> Result<Option<String>
267264
}
268265

269266
fn get_rustdoc(pkg: &MetadataPackage, source_dir: &Path) -> Result<Option<String>> {
270-
if let Some(src_path) = &pkg.targets[0].src_path {
271-
let src_path = Path::new(src_path);
272-
if src_path.is_absolute() {
273-
read_rust_doc(src_path)
274-
} else {
275-
read_rust_doc(&source_dir.join(src_path))
276-
}
267+
let src_path = &pkg.targets[0].src_path;
268+
if src_path.is_absolute() {
269+
read_rust_doc(src_path)
277270
} else {
278-
// FIXME: should we care about metabuild targets?
279-
Ok(None)
271+
read_rust_doc(&source_dir.join(src_path))
280272
}
281273
}
282274

src/docbuilder/rustwide_builder.rs

+6-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ use crate::docbuilder::{crates::crates_from_path, Limits};
77
use crate::error::Result;
88
use crate::index::api::ReleaseData;
99
use crate::storage::CompressionAlgorithms;
10-
use crate::utils::{copy_dir_all, parse_rustc_version, CargoMetadata, GithubUpdater};
10+
use crate::utils::{copy_dir_all, parse_rustc_version, CargoMetadata, GithubUpdater, PackageExt};
1111
use crate::{db::blacklist::is_blacklisted, utils::MetadataPackage};
1212
use crate::{Config, Context, Index, Metrics, Storage};
1313
use docsrs_metadata::{Metadata, DEFAULT_TARGETS, HOST_TARGET};
@@ -236,7 +236,11 @@ impl RustwideBuilder {
236236
err.context(format!("failed to load local package {}", path.display()))
237237
})?;
238238
let package = metadata.root();
239-
self.build_package(&package.name, &package.version, PackageKind::Local(path))
239+
self.build_package(
240+
&package.name,
241+
&package.version.to_string(),
242+
PackageKind::Local(path),
243+
)
240244
}
241245

242246
pub fn build_package(

src/test/fakes.rs

+44-37
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@ use super::TestDatabase;
22
use crate::docbuilder::{BuildResult, DocCoverage};
33
use crate::index::api::{CrateData, CrateOwner, ReleaseData};
44
use crate::storage::Storage;
5-
use crate::utils::{Dependency, MetadataPackage, Target};
5+
use crate::utils::{MetadataPackage, PackageExt};
6+
use cargo_metadata::PackageId;
67
use chrono::{DateTime, Utc};
78
use failure::Error;
89
use postgres::Client;
@@ -45,35 +46,35 @@ impl<'a> FakeRelease<'a> {
4546
FakeRelease {
4647
db,
4748
storage,
48-
package: MetadataPackage {
49-
id: "fake-package-id".into(),
50-
name: "fake-package".into(),
51-
version: "1.0.0".into(),
52-
license: Some("MIT".into()),
53-
repository: Some("https://git.example.com".into()),
54-
homepage: Some("https://www.example.com".into()),
55-
description: Some("Fake package".into()),
56-
documentation: Some("https://docs.example.com".into()),
57-
dependencies: vec![Dependency {
58-
name: "fake-dependency".into(),
59-
req: "^1.0.0".into(),
60-
kind: None,
61-
rename: None,
62-
optional: false,
49+
package: serde_json::from_value(serde_json::json!({
50+
"id": "fake-package-id",
51+
"name": "fake-package",
52+
"version": "1.0.0",
53+
"license": "MIT",
54+
"repository": "https://git.example.com",
55+
"homepage": "https://www.example.com",
56+
"description": "Fake package",
57+
"documentation": "https://docs.example.com",
58+
"dependencies": [{
59+
"name": "fake-dependency",
60+
"req": "^1.0.0",
61+
"kind": null,
62+
"rename": null,
63+
"optional": false
6364
}],
64-
targets: vec![Target::dummy_lib("fake_package".into(), None)],
65-
readme: None,
66-
keywords: vec!["fake".into(), "package".into()],
67-
features: [
68-
("default".into(), vec!["feature1".into(), "feature3".into()]),
69-
("feature1".into(), Vec::new()),
70-
("feature2".into(), vec!["feature1".into()]),
71-
("feature3".into(), Vec::new()),
72-
]
73-
.iter()
74-
.cloned()
75-
.collect::<HashMap<String, Vec<String>>>(),
76-
},
65+
"targets": [{
66+
"name": "fake_package"
67+
}],
68+
"readme": null,
69+
"keywords": ["fake", "package"],
70+
"features": {
71+
"default": ["feature1", "feature3"],
72+
"feature1": [],
73+
"feature2": ["feature1"],
74+
"feature3": []
75+
}
76+
}))
77+
.unwrap(),
7778
builds: vec![],
7879
source_files: Vec::new(),
7980
rustdoc_files: Vec::new(),
@@ -110,13 +111,15 @@ impl<'a> FakeRelease<'a> {
110111

111112
pub(crate) fn name(mut self, new: &str) -> Self {
112113
self.package.name = new.into();
113-
self.package.id = format!("{}-id", new);
114+
self.package.id = PackageId {
115+
repr: format!("{}-id", new),
116+
};
114117
self.package.targets[0].name = new.into();
115118
self
116119
}
117120

118121
pub(crate) fn version(mut self, new: &str) -> Self {
119-
self.package.version = new.into();
122+
self.package.version = cargo_metadata::Version::parse(new).expect("invalid semver");
120123
self
121124
}
122125

@@ -191,7 +194,11 @@ impl<'a> FakeRelease<'a> {
191194
pub(crate) fn add_platform<S: Into<String>>(mut self, platform: S) -> Self {
192195
let platform = platform.into();
193196
let name = self.package.targets[0].name.clone();
194-
let target = Target::dummy_lib(name, Some(platform.clone()));
197+
let target = serde_json::from_value(serde_json::json!({
198+
"name": name,
199+
"src_path": platform.clone()
200+
}))
201+
.unwrap();
195202
self.package.targets.push(target);
196203
self.doc_targets.push(platform);
197204
self
@@ -256,10 +263,10 @@ impl<'a> FakeRelease<'a> {
256263
}
257264
}
258265

259-
let upload_files = |prefix: &str, files: &[(&str, &[u8])], target: Option<&str>| {
266+
let upload_files = |prefix: &str, files: &[(&str, &[u8])], target: Option<&Path>| {
260267
let mut path_prefix = tempdir.path().join(prefix);
261268
if let Some(target) = target {
262-
path_prefix.push(target);
269+
path_prefix.push(target.to_owned());
263270
}
264271
fs::create_dir(&path_prefix)?;
265272

@@ -278,7 +285,7 @@ impl<'a> FakeRelease<'a> {
278285
prefix,
279286
package.name,
280287
package.version,
281-
target.unwrap_or("")
288+
target.unwrap_or(Path::new("")).display()
282289
);
283290
log::debug!("adding directory {} from {}", prefix, path_prefix.display());
284291
crate::db::add_path_into_database(&storage, &prefix, path_prefix)
@@ -304,9 +311,9 @@ impl<'a> FakeRelease<'a> {
304311
log::debug!("added rustdoc files {}", rustdoc_meta);
305312

306313
for target in &package.targets[1..] {
307-
let platform = target.src_path.as_ref().unwrap();
314+
let platform = &target.src_path;
308315
upload_files("rustdoc", &rustdoc_files, Some(platform))?;
309-
log::debug!("added platform files for {}", platform);
316+
log::debug!("added platform files for {}", platform.display());
310317
}
311318
}
312319

0 commit comments

Comments
 (0)