@@ -22,9 +22,37 @@ pub fn to_manifest(contents: &[u8],
2222 manifest\n \n {}", e) ) )
2323 } ;
2424
25- toml_manifest. to_manifest ( source_id) . map_err ( |err| {
25+ let pair = try! ( toml_manifest. to_manifest ( source_id) . map_err ( |err| {
2626 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+
2856}
2957
3058pub fn parse ( toml : & str , file : & str ) -> CargoResult < toml:: Table > {
@@ -126,9 +154,9 @@ impl TomlManifest {
126154 ( Some ( string. clone ( ) ) , SourceId :: for_central ( ) )
127155 } ,
128156 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 ( ) )
132160 . unwrap_or_else ( || "master" . to_str ( ) ) ;
133161
134162 let new_source_id = match details. git {
@@ -161,11 +189,14 @@ impl TomlManifest {
161189 }
162190
163191 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+ } ) ) ;
165195
196+ let pkgid = try!( project. to_package_id ( source_id. get_location ( ) ) ) ;
197+ let summary = Summary :: new ( & pkgid, deps. as_slice ( ) ) ;
166198 Ok ( ( Manifest :: new (
167- & Summary :: new ( & try!( project. to_package_id ( source_id. get_location ( ) ) ) ,
168- deps. as_slice ( ) ) ,
199+ & summary,
169200 targets. as_slice ( ) ,
170201 & Path :: new ( "target" ) ,
171202 sources,
0 commit comments