1
- use std:: collections:: HashMap ;
2
- use std:: collections:: HashSet ;
3
1
use std:: path:: PathBuf ;
4
2
use std:: process:: Command ;
5
3
@@ -12,7 +10,6 @@ use crate::{Build, Crate};
12
10
#[ derive( Deserialize ) ]
13
11
struct Output {
14
12
packages : Vec < Package > ,
15
- resolve : Resolve ,
16
13
}
17
14
18
15
#[ derive( Deserialize ) ]
@@ -21,65 +18,39 @@ struct Package {
21
18
name : String ,
22
19
source : Option < String > ,
23
20
manifest_path : String ,
21
+ dependencies : Vec < Dependency > ,
24
22
}
25
23
26
24
#[ derive( Deserialize ) ]
27
- struct Resolve {
28
- nodes : Vec < ResolveNode > ,
29
- }
30
-
31
- #[ derive( Deserialize ) ]
32
- struct ResolveNode {
33
- id : String ,
34
- dependencies : Vec < String > ,
25
+ struct Dependency {
26
+ name : String ,
27
+ source : Option < String > ,
35
28
}
36
29
37
30
pub fn build ( build : & mut Build ) {
38
31
// Run `cargo metadata` to figure out what crates we're testing.
39
- let features: Vec < _ > = build
40
- . std_features ( )
41
- . split_whitespace ( )
42
- . map ( |f| format ! ( "test/{}" , f) )
43
- . chain ( build. rustc_features ( ) . split_whitespace ( ) . map ( |f| format ! ( "rustc-main/{}" , f) ) )
44
- . collect ( ) ;
45
32
let mut cargo = Command :: new ( & build. initial_cargo ) ;
46
33
cargo
47
34
. arg ( "metadata" )
48
35
. arg ( "--format-version" )
49
36
. arg ( "1" )
50
- . arg ( "--features" )
51
- . arg ( features. join ( "," ) )
52
- . arg ( "-Zpackage-features" )
37
+ . arg ( "--no-deps" )
53
38
. arg ( "--manifest-path" )
54
- . arg ( build. src . join ( "Cargo.toml" ) )
55
- . env ( "RUSTC_BOOTSTRAP" , "1" ) ;
39
+ . arg ( build. src . join ( "Cargo.toml" ) ) ;
56
40
let output = output ( & mut cargo) ;
57
41
let output: Output = serde_json:: from_str ( & output) . unwrap ( ) ;
58
42
for package in output. packages {
59
43
if package. source . is_none ( ) {
60
44
let name = INTERNER . intern_string ( package. name ) ;
61
45
let mut path = PathBuf :: from ( package. manifest_path ) ;
62
46
path. pop ( ) ;
63
- build. crates . insert ( name, Crate { name, id : package. id , deps : HashSet :: new ( ) , path } ) ;
64
- }
65
- }
66
-
67
- let id2name: HashMap < _ , _ > =
68
- build. crates . iter ( ) . map ( |( name, krate) | ( krate. id . clone ( ) , name. clone ( ) ) ) . collect ( ) ;
69
-
70
- for node in output. resolve . nodes {
71
- let name = match id2name. get ( & node. id ) {
72
- Some ( name) => name,
73
- None => continue ,
74
- } ;
75
-
76
- let krate = build. crates . get_mut ( name) . unwrap ( ) ;
77
- for dep in node. dependencies . iter ( ) {
78
- let dep = match id2name. get ( dep) {
79
- Some ( dep) => dep,
80
- None => continue ,
81
- } ;
82
- krate. deps . insert ( * dep) ;
47
+ let deps = package
48
+ . dependencies
49
+ . into_iter ( )
50
+ . filter ( |dep| dep. source . is_none ( ) )
51
+ . map ( |dep| INTERNER . intern_string ( dep. name ) )
52
+ . collect ( ) ;
53
+ build. crates . insert ( name, Crate { name, id : package. id , deps, path } ) ;
83
54
}
84
55
}
85
56
}
0 commit comments