@@ -6,9 +6,9 @@ use crate::skeleton::target::{Target, TargetKind};
66use crate :: OptimisationProfile ;
77use anyhow:: Context ;
88use cargo_manifest:: Product ;
9- use cargo_metadata:: Metadata ;
109use fs_err as fs;
1110use globwalk:: GlobWalkerBuilder ;
11+ use guppy:: graph:: PackageGraph ;
1212use pathdiff:: diff_paths;
1313use serde:: { Deserialize , Serialize } ;
1414use std:: path:: { Path , PathBuf } ;
@@ -47,13 +47,13 @@ impl Skeleton {
4747 base_path : P ,
4848 member : Option < String > ,
4949 ) -> Result < Self , anyhow:: Error > {
50- let metadata = extract_cargo_metadata ( base_path. as_ref ( ) ) ?;
50+ let graph = extract_package_graph ( base_path. as_ref ( ) ) ?;
5151
5252 // Read relevant files from the filesystem
5353 let config_file = read:: config ( & base_path) ?;
54- let mut manifests = read:: manifests ( & base_path, & metadata ) ?;
54+ let mut manifests = read:: manifests ( & base_path, & graph ) ?;
5555 if let Some ( member) = member {
56- ignore_all_members_except ( & mut manifests, & metadata , member) ;
56+ ignore_all_members_except ( & mut manifests, & graph , member) ;
5757 }
5858
5959 let mut lock_file = read:: lockfile ( & base_path) ?;
@@ -311,12 +311,10 @@ fn serialize_manifests(manifests: Vec<ParsedManifest>) -> Result<Vec<Manifest>,
311311 Ok ( serialised_manifests)
312312}
313313
314- fn extract_cargo_metadata ( path : & Path ) -> Result < cargo_metadata :: Metadata , anyhow:: Error > {
315- let mut cmd = cargo_metadata :: MetadataCommand :: new ( ) ;
314+ fn extract_package_graph ( path : & Path ) -> Result < PackageGraph , anyhow:: Error > {
315+ let mut cmd = guppy :: MetadataCommand :: new ( ) ;
316316 cmd. current_dir ( path) ;
317- cmd. no_deps ( ) ;
318-
319- cmd. exec ( ) . context ( "Cannot extract Cargo metadata" )
317+ cmd. build_graph ( ) . context ( "Cannot extract package graph" )
320318}
321319
322320/// If the top-level `Cargo.toml` has a `members` field, replace it with
@@ -326,7 +324,7 @@ fn extract_cargo_metadata(path: &Path) -> Result<cargo_metadata::Metadata, anyho
326324/// with a modified `members` field and has no effect on cooking the final recipe.
327325fn ignore_all_members_except (
328326 manifests : & mut [ ParsedManifest ] ,
329- metadata : & Metadata ,
327+ graph : & PackageGraph ,
330328 member : String ,
331329) {
332330 let workspace_toml = manifests
@@ -335,15 +333,12 @@ fn ignore_all_members_except(
335333
336334 if let Some ( workspace) = workspace_toml. and_then ( |toml| toml. contents . get_mut ( "workspace" ) ) {
337335 if let Some ( members) = workspace. get_mut ( "members" ) {
338- let workspace_root = & metadata . workspace_root ;
339- let workspace_packages = metadata . workspace_packages ( ) ;
336+ let ws = graph . workspace ( ) ;
337+ let workspace_root = ws . root ( ) ;
340338
341- if let Some ( pkg) = workspace_packages
342- . into_iter ( )
343- . find ( |pkg| pkg. name == member)
344- {
339+ if let Ok ( pkg) = ws. member_by_name ( & member) {
345340 // Make this a relative path to the workspace, and remove the `Cargo.toml` child.
346- let member_cargo_path = diff_paths ( pkg. manifest_path . as_os_str ( ) , workspace_root) ;
341+ let member_cargo_path = diff_paths ( pkg. manifest_path ( ) , workspace_root) ;
347342 let member_workspace_path = member_cargo_path
348343 . as_ref ( )
349344 . and_then ( |path| path. parent ( ) )
0 commit comments