@@ -22,9 +22,37 @@ pub fn to_manifest(contents: &[u8],
22
22
manifest\n \n {}", e) ) )
23
23
} ;
24
24
25
- toml_manifest. to_manifest ( source_id) . map_err ( |err| {
25
+ let pair = try! ( toml_manifest. to_manifest ( source_id) . map_err ( |err| {
26
26
human ( format ! ( "Cargo.toml is not a valid manifest\n \n {}" , err) )
27
- } )
27
+ } ) ) ;
28
+ let ( mut manifest, paths) = pair;
29
+ match d. toml {
30
+ Some ( ref toml) => add_unused_keys ( & mut manifest, toml, "" . to_string ( ) ) ,
31
+ None => { }
32
+ }
33
+ return Ok ( ( manifest, paths) ) ;
34
+
35
+ fn add_unused_keys ( m : & mut Manifest , toml : & toml:: Value , key : String ) {
36
+ match * toml {
37
+ toml:: Table ( ref table) => {
38
+ for ( k, v) in table. iter ( ) {
39
+ add_unused_keys ( m, v, if key. len ( ) == 0 {
40
+ k. clone ( )
41
+ } else {
42
+ key + "." + k. as_slice ( )
43
+ } )
44
+ }
45
+ }
46
+ toml:: Array ( ref arr) => {
47
+ for v in arr. iter ( ) {
48
+ add_unused_keys ( m, v, key. clone ( ) ) ;
49
+ }
50
+ }
51
+ _ => m. add_unused_key ( key) ,
52
+ }
53
+ }
54
+
55
+
28
56
}
29
57
30
58
pub fn parse ( toml : & str , file : & str ) -> CargoResult < toml:: Table > {
@@ -126,9 +154,9 @@ impl TomlManifest {
126
154
( Some ( string. clone ( ) ) , SourceId :: for_central ( ) )
127
155
} ,
128
156
DetailedDep ( ref details) => {
129
- let reference = details. branch . as_ref ( ) . map ( |b| b . clone ( ) )
130
- . or_else ( || details. tag . as_ref ( ) . map ( |t| t . clone ( ) ) )
131
- . or_else ( || details. rev . as_ref ( ) . map ( |t| t . clone ( ) ) )
157
+ let reference = details. branch . clone ( )
158
+ . or_else ( || details. tag . clone ( ) )
159
+ . or_else ( || details. rev . clone ( ) )
132
160
. unwrap_or_else ( || "master" . to_str ( ) ) ;
133
161
134
162
let new_source_id = match details. git {
@@ -161,11 +189,14 @@ impl TomlManifest {
161
189
}
162
190
163
191
let project = self . project . as_ref ( ) . or_else ( || self . package . as_ref ( ) ) ;
164
- let project = try!( project. require ( || human ( "No `package` or `project` section found." ) ) ) ;
192
+ let project = try!( project. require ( || {
193
+ human ( "No `package` or `project` section found." )
194
+ } ) ) ;
165
195
196
+ let pkgid = try!( project. to_package_id ( source_id. get_location ( ) ) ) ;
197
+ let summary = Summary :: new ( & pkgid, deps. as_slice ( ) ) ;
166
198
Ok ( ( Manifest :: new (
167
- & Summary :: new ( & try!( project. to_package_id ( source_id. get_location ( ) ) ) ,
168
- deps. as_slice ( ) ) ,
199
+ & summary,
169
200
targets. as_slice ( ) ,
170
201
& Path :: new ( "target" ) ,
171
202
sources,
0 commit comments