@@ -3,7 +3,7 @@ use crate::core::compiler::{CompileKind, RustcTargetData};
33use crate :: core:: dependency:: DepKind ;
44use crate :: core:: package:: SerializedPackage ;
55use crate :: core:: resolver:: { features:: CliFeatures , HasDevUnits , Resolve } ;
6- use crate :: core:: { Package , PackageId , Workspace } ;
6+ use crate :: core:: { Package , PackageId , PackageIdSpec , Workspace } ;
77use crate :: ops:: { self , Packages } ;
88use crate :: util:: interning:: InternedString ;
99use crate :: util:: CargoResult ;
@@ -42,8 +42,14 @@ pub fn output_metadata(ws: &Workspace<'_>, opt: &OutputMetadataOptions) -> Cargo
4242
4343 Ok ( ExportInfo {
4444 packages,
45- workspace_members : ws. members ( ) . map ( |pkg| pkg. package_id ( ) ) . collect ( ) ,
46- workspace_default_members : ws. default_members ( ) . map ( |pkg| pkg. package_id ( ) ) . collect ( ) ,
45+ workspace_members : ws
46+ . members ( )
47+ . map ( |pkg| PackageIdSpec :: from_package_id ( pkg. package_id ( ) ) )
48+ . collect ( ) ,
49+ workspace_default_members : ws
50+ . default_members ( )
51+ . map ( |pkg| PackageIdSpec :: from_package_id ( pkg. package_id ( ) ) )
52+ . collect ( ) ,
4753 resolve,
4854 target_directory : ws. target_dir ( ) . into_path_unlocked ( ) ,
4955 version : VERSION ,
@@ -58,8 +64,8 @@ pub fn output_metadata(ws: &Workspace<'_>, opt: &OutputMetadataOptions) -> Cargo
5864#[ derive( Serialize ) ]
5965pub struct ExportInfo {
6066 packages : Vec < SerializedPackage > ,
61- workspace_members : Vec < PackageId > ,
62- workspace_default_members : Vec < PackageId > ,
67+ workspace_members : Vec < PackageIdSpec > ,
68+ workspace_default_members : Vec < PackageIdSpec > ,
6369 resolve : Option < MetadataResolve > ,
6470 target_directory : PathBuf ,
6571 version : u32 ,
@@ -70,13 +76,13 @@ pub struct ExportInfo {
7076#[ derive( Serialize ) ]
7177struct MetadataResolve {
7278 nodes : Vec < MetadataResolveNode > ,
73- root : Option < PackageId > ,
79+ root : Option < PackageIdSpec > ,
7480}
7581
7682#[ derive( Serialize ) ]
7783struct MetadataResolveNode {
78- id : PackageId ,
79- dependencies : Vec < PackageId > ,
84+ id : PackageIdSpec ,
85+ dependencies : Vec < PackageIdSpec > ,
8086 deps : Vec < Dep > ,
8187 features : Vec < InternedString > ,
8288}
@@ -86,7 +92,9 @@ struct Dep {
8692 // TODO(bindeps): after -Zbindeps gets stabilized,
8793 // mark this field as deprecated in the help manual of cargo-metadata
8894 name : InternedString ,
89- pkg : PackageId ,
95+ pkg : PackageIdSpec ,
96+ #[ serde( skip) ]
97+ pkg_id : PackageId ,
9098 dep_kinds : Vec < DepKindInfo > ,
9199}
92100
@@ -179,7 +187,9 @@ fn build_resolve_graph(
179187
180188 let mr = MetadataResolve {
181189 nodes : node_map. into_iter ( ) . map ( |( _pkg_id, node) | node) . collect ( ) ,
182- root : ws. current_opt ( ) . map ( |pkg| pkg. package_id ( ) ) ,
190+ root : ws
191+ . current_opt ( )
192+ . map ( |pkg| PackageIdSpec :: from_package_id ( pkg. package_id ( ) ) ) ,
183193 } ;
184194 Ok ( ( actual_packages, mr) )
185195}
@@ -301,18 +311,20 @@ fn build_resolve_graph_r(
301311
302312 dep_kinds. sort ( ) ;
303313
304- let pkg = normalize_id ( dep_id) ;
314+ let pkg_id = normalize_id ( dep_id) ;
305315
306316 let dep = match ( lib_target, dep_kinds. len ( ) ) {
307317 ( Some ( target) , _) => Dep {
308318 name : extern_name ( target) ?,
309- pkg,
319+ pkg : PackageIdSpec :: from_package_id ( pkg_id. clone ( ) ) ,
320+ pkg_id,
310321 dep_kinds,
311322 } ,
312323 // No lib target exists but contains artifact deps.
313324 ( None , 1 ..) => Dep {
314325 name : InternedString :: new ( "" ) ,
315- pkg,
326+ pkg : PackageIdSpec :: from_package_id ( pkg_id. clone ( ) ) ,
327+ pkg_id,
316328 dep_kinds,
317329 } ,
318330 // No lib or artifact dep exists.
@@ -325,11 +337,13 @@ fn build_resolve_graph_r(
325337 dep_metadatas
326338 } ;
327339
328- let dumb_deps: Vec < PackageId > = deps. iter ( ) . map ( |dep| dep. pkg ) . collect ( ) ;
329- let to_visit = dumb_deps. clone ( ) ;
340+ let to_visit: Vec < PackageId > = deps. iter ( ) . map ( |dep| dep. pkg_id ) . collect ( ) ;
330341 let node = MetadataResolveNode {
331- id : normalize_id ( pkg_id) ,
332- dependencies : dumb_deps,
342+ id : PackageIdSpec :: from_package_id ( normalize_id ( pkg_id) ) ,
343+ dependencies : to_visit
344+ . iter ( )
345+ . map ( |id| PackageIdSpec :: from_package_id ( id. clone ( ) ) )
346+ . collect ( ) ,
333347 deps,
334348 features,
335349 } ;
0 commit comments