@@ -32,28 +32,25 @@ fn main() {
32
32
download_src ( & tmpdir, & commit) ;
33
33
}
34
34
35
- println ! ( "learning about the dependency graph" ) ;
36
- let metadata = Command :: new ( "cargo" )
37
- . arg ( "+nightly" )
38
- . current_dir ( dst. join ( "src/libsyntax" ) )
39
- . arg ( "metadata" )
40
- . arg ( "--format-version=1" )
41
- . output ( )
42
- . expect ( "failed to execute cargo" ) ;
43
- if !metadata. status . success ( ) {
44
- panic ! ( "failed to run rustc: {:?}" , metadata) ;
45
- }
46
- let output = str:: from_utf8 ( & metadata. stdout ) . unwrap ( ) ;
47
- let output: Metadata = serde_json:: from_str ( output) . unwrap ( ) ;
48
-
49
- let syntax = output
50
- . packages
51
- . iter ( )
52
- . find ( |p| p. name == "syntax" )
53
- . expect ( "failed to find libsyntax" ) ;
35
+ let target_crates = vec ! [
36
+ RustcApCrate {
37
+ name: "syntax" ,
38
+ dir: "src/libsyntax" ,
39
+ } ,
40
+ RustcApCrate {
41
+ name: "rustc_parse" ,
42
+ dir: "src/librustc_parse" ,
43
+ } ,
44
+ ] ;
54
45
46
+ println ! ( "learning about the dependency graph" ) ;
47
+ let rustc_packages = get_rustc_packages ( & target_crates, & dst) ;
55
48
let mut crates = Vec :: new ( ) ;
56
- fill ( & output, & syntax, & mut crates, & mut HashSet :: new ( ) ) ;
49
+ let mut seen = HashSet :: new ( ) ;
50
+
51
+ for RustcPackageInfo { package, metadata } in rustc_packages. iter ( ) {
52
+ fill ( & metadata, & package, & mut crates, & mut seen) ;
53
+ }
57
54
58
55
let version_to_publish = get_version_to_publish ( & crates) ;
59
56
println ! ( "going to publish {}" , version_to_publish) ;
@@ -127,6 +124,39 @@ fn download_src(dst: &Path, commit: &str) {
127
124
File :: create ( & root. join ( ".ok" ) ) . unwrap ( ) ;
128
125
}
129
126
127
+ fn get_rustc_packages ( target_crates : & [ RustcApCrate ] , dst : & Path ) -> Vec < RustcPackageInfo > {
128
+ let mut packages = Vec :: new ( ) ;
129
+
130
+ for RustcApCrate { name, dir } in target_crates. iter ( ) {
131
+ let metadata = Command :: new ( "cargo" )
132
+ . arg ( "+nightly" )
133
+ . current_dir ( dst. join ( dir) )
134
+ . arg ( "metadata" )
135
+ . arg ( "--format-version=1" )
136
+ . output ( )
137
+ . expect ( "failed to execute cargo" ) ;
138
+ if !metadata. status . success ( ) {
139
+ panic ! ( "failed to run rustc: {:?}" , metadata) ;
140
+ }
141
+ let output = str:: from_utf8 ( & metadata. stdout ) . unwrap ( ) ;
142
+ let output: Metadata = serde_json:: from_str ( output) . unwrap ( ) ;
143
+
144
+ let rustc_package = output
145
+ . packages
146
+ . iter ( )
147
+ . find ( |p| p. name == * name)
148
+ . expect ( & format ! ( "failed to find {}" , & name) )
149
+ . clone ( ) ;
150
+
151
+ packages. push ( RustcPackageInfo {
152
+ package : rustc_package,
153
+ metadata : output,
154
+ } )
155
+ }
156
+
157
+ packages
158
+ }
159
+
130
160
fn fill < ' a > (
131
161
output : & ' a Metadata ,
132
162
pkg : & ' a Package ,
@@ -157,7 +187,7 @@ struct Metadata {
157
187
resolve : Resolve ,
158
188
}
159
189
160
- #[ derive( Deserialize ) ]
190
+ #[ derive( Deserialize , Clone ) ]
161
191
struct Package {
162
192
id : String ,
163
193
name : String ,
@@ -176,6 +206,16 @@ struct ResolveNode {
176
206
dependencies : Vec < String > ,
177
207
}
178
208
209
+ struct RustcApCrate < ' a > {
210
+ name : & ' a str ,
211
+ dir : & ' a str ,
212
+ }
213
+
214
+ struct RustcPackageInfo {
215
+ package : Package ,
216
+ metadata : Metadata ,
217
+ }
218
+
179
219
fn get_version_to_publish ( crates : & [ & Package ] ) -> semver:: Version {
180
220
let mut cur = crates. iter ( ) . map ( |p| get_current_version ( p) ) . max ( ) . unwrap ( ) ;
181
221
cur. major += 1 ;
0 commit comments