Skip to content

Commit 62438ad

Browse files
committed
[broken] [WIP] switch to cargo_metadata instead of rewriting it
1 parent f6fd6cf commit 62438ad

File tree

3 files changed

+60
-14
lines changed

3 files changed

+60
-14
lines changed

Cargo.lock

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

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ regex = "1"
2121
structopt = "0.3"
2222
crates-index = "0.15.1"
2323
crates-index-diff = "7"
24+
cargo_metadata = "0.12"
2425
reqwest = { version = "0.10.6", features = ["blocking", "json"] } # TODO: Remove blocking when async is ready
2526
semver = { version = "0.9", features = ["serde"] }
2627
slug = "=0.1.1"

src/utils/cargo_metadata.rs

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11
use crate::error::Result;
2+
use failure::ResultExt;
23
use rustwide::{cmd::Command, Toolchain, Workspace};
34
use serde::{Deserialize, Serialize};
45
use std::collections::{HashMap, HashSet};
56
use std::path::Path;
67

78
pub(crate) struct CargoMetadata {
8-
packages: HashMap<String, Package>,
9+
packages: HashMap<String, ::cargo_metadata::Package>,
910
deps_graph: HashMap<String, HashSet<String>>,
1011
root_id: String,
1112
}
@@ -22,33 +23,46 @@ impl CargoMetadata {
2223
.log_output(false)
2324
.run_capture()?;
2425

26+
let metadata = cargo_metadata::MetadataCommand::parse(&res.stdout_lines().join("\n"))
27+
.context("invalid output returned by `cargo metadata`")?;
28+
/*
2529
let mut iter = res.stdout_lines().iter();
2630
let metadata = if let (Some(serialized), None) = (iter.next(), iter.next()) {
2731
serde_json::from_str::<DeserializedMetadata>(serialized)?
2832
} else {
2933
return Err(::failure::err_msg(
30-
"invalid output returned by `cargo metadata`",
3134
));
3235
};
36+
*/
3337

38+
let resolve = metadata
39+
.resolve
40+
.ok_or(failure::err_msg("expected resolve metadata"))?;
3441
// Convert from Vecs to HashMaps and HashSets to get more efficient lookups
3542
Ok(CargoMetadata {
3643
packages: metadata
3744
.packages
3845
.into_iter()
39-
.map(|pkg| (pkg.id.clone(), pkg))
46+
.map(|pkg| (pkg.id.to_string(), pkg))
4047
.collect(),
41-
deps_graph: metadata
42-
.resolve
48+
deps_graph: resolve
4349
.nodes
4450
.into_iter()
45-
.map(|node| (node.id, node.deps.into_iter().map(|d| d.pkg).collect()))
51+
.map(|node| {
52+
(
53+
node.id.to_string(),
54+
node.deps.into_iter().map(|d| d.pkg.to_string()).collect(),
55+
)
56+
})
4657
.collect(),
47-
root_id: metadata.resolve.root,
58+
root_id: resolve
59+
.root
60+
.ok_or(failure::err_msg("expected resolve root"))?
61+
.to_string(),
4862
})
4963
}
5064

51-
pub(crate) fn root_dependencies(&self) -> Vec<&Package> {
65+
pub(crate) fn root_dependencies(&self) -> Vec<&cargo_metadata::Package> {
5266
let ids = &self.deps_graph[&self.root_id];
5367
self.packages
5468
.iter()
@@ -57,7 +71,7 @@ impl CargoMetadata {
5771
.collect()
5872
}
5973

60-
pub(crate) fn root(&self) -> &Package {
74+
pub(crate) fn root(&self) -> &cargo_metadata::Package {
6175
&self.packages[&self.root_id]
6276
}
6377
}

0 commit comments

Comments
 (0)