@@ -21,8 +21,11 @@ impl<'c, 'o> Project<'c, 'o> {
2121 }
2222
2323 pub fn graph ( mut self ) -> CliResult < DepGraph < ' c , ' o > > {
24- let root_deps = try!( self . parse_root_deps ( ) ) ;
24+ let ( root_deps, root_name , root_version ) = try!( self . parse_root_deps ( ) ) ;
2525 let mut dg = try!( self . parse_lock_file ( ) ) ;
26+ if !dg. set_root ( & root_name, & root_version) {
27+ return Err ( From :: from ( CliErrorKind :: TomlNoName ) ) ;
28+ }
2629 self . set_resolved_kind ( & root_deps, & mut dg) ;
2730 if !self . cfg . include_vers {
2831 Project :: show_version_on_duplicates ( & mut dg) ;
@@ -155,8 +158,6 @@ impl<'c, 'o> Project<'c, 'o> {
155158
156159 if let Some ( root) = lock_toml. get ( "root" ) {
157160 parse_package ( & mut dg, root) ;
158- } else {
159- return Err ( From :: from ( CliErrorKind :: TomlTableRoot ) ) ;
160161 }
161162
162163 if let Some ( & Value :: Array ( ref packages) ) = lock_toml. get ( "package" ) {
@@ -166,18 +167,39 @@ impl<'c, 'o> Project<'c, 'o> {
166167 }
167168
168169 debugln ! ( "return=parse_lock_file; self={:#?}" , self ) ;
170+ debugln ! ( "return=parse_lock_file; dg={:#?}" , dg) ;
169171 Ok ( dg)
170172 }
171173
172174 /// Builds a list of the dependencies declared in the manifest file.
173- pub fn parse_root_deps ( & mut self ) -> CliResult < Vec < DeclaredDep > > {
175+ pub fn parse_root_deps ( & mut self ) -> CliResult < ( Vec < DeclaredDep > , String , String ) > {
174176 debugln ! ( "executing; parse_root_deps;" ) ;
175177 let manifest_path = try!( util:: find_manifest_file ( self . cfg . manifest_file ) ) ;
176178 let manifest_toml = try!( util:: toml_from_file ( manifest_path) ) ;
177179
178180 let mut declared_deps = vec ! [ ] ;
179181 let mut v = vec ! [ ] ;
180182
183+ let ( root_name, root_version) = {
184+ let mut name = None ;
185+ let mut version = None ;
186+ if let Some ( table) = manifest_toml. get ( "package" ) {
187+ if let Some ( table) = table. as_table ( ) {
188+ if let Some ( & Value :: String ( ref n) ) = table. get ( "name" ) {
189+ name = Some ( n) ;
190+ }
191+ if let Some ( & Value :: String ( ref v) ) = table. get ( "version" ) {
192+ version = Some ( v) ;
193+ }
194+ }
195+ }
196+ if let ( Some ( n) , Some ( v) ) = ( name, version) {
197+ ( n. to_owned ( ) , v. to_owned ( ) )
198+ } else {
199+ return Err ( From :: from ( CliErrorKind :: TomlNoName ) ) ;
200+ }
201+ } ;
202+
181203 if let Some ( table) = manifest_toml. get ( "dependencies" ) {
182204 if let Some ( table) = table. as_table ( ) {
183205 for ( name, dep_table) in table. into_iter ( ) {
@@ -202,6 +224,7 @@ impl<'c, 'o> Project<'c, 'o> {
202224
203225 debugln ! ( "return=parse_root_deps; self={:#?}" , self ) ;
204226 debugln ! ( "return=parse_root_deps; declared_deps={:#?}" , declared_deps) ;
205- Ok ( declared_deps)
227+ debugln ! ( "return=parse_root_deps; root_name={:#?}" , root_name) ;
228+ Ok ( ( declared_deps, root_name, root_version) )
206229 }
207230}
0 commit comments