@@ -780,7 +780,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
780780
781781 let id = unit. pkg . package_id ( ) ;
782782 let deps = self . resolve . deps ( id) ;
783- let mut ret = deps. filter ( |dep| {
783+ let pkg_ids : Vec < _ > = deps. filter ( |dep| {
784784 unit. pkg . dependencies ( ) . iter ( ) . filter ( |d| {
785785 d. name ( ) == dep. name ( ) && d. version_req ( ) . matches ( dep. version ( ) )
786786 } ) . any ( |d| {
@@ -814,22 +814,19 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
814814 // actually used!
815815 true
816816 } )
817- } ) . filter_map ( |id| {
818- match self . get_package ( id) {
819- Ok ( pkg) => {
820- pkg. targets ( ) . iter ( ) . find ( |t| t. is_lib ( ) ) . map ( |t| {
821- let unit = Unit {
822- pkg,
823- target : t,
824- profile : self . lib_or_check_profile ( unit, t) ,
825- kind : unit. kind . for_target ( t) ,
826- } ;
827- Ok ( unit)
828- } )
817+ } ) . collect ( ) ;
818+
819+ let pkgs = self . get_packages ( & * pkg_ids) ?;
820+ let mut ret: Vec < _ > = pkgs. into_iter ( ) . filter_map ( |pkg| {
821+ pkg. targets ( ) . iter ( ) . find ( |t| t. is_lib ( ) ) . map ( |t| {
822+ Unit {
823+ pkg,
824+ target : t,
825+ profile : self . lib_or_check_profile ( unit, t) ,
826+ kind : unit. kind . for_target ( t) ,
829827 }
830- Err ( e) => Some ( Err ( e) )
831- }
832- } ) . collect :: < CargoResult < Vec < _ > > > ( ) ?;
828+ } )
829+ } ) . collect ( ) ;
833830
834831 // If this target is a build script, then what we've collected so far is
835832 // all we need. If this isn't a build script, then it depends on the
@@ -913,7 +910,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
913910
914911 /// Returns the dependencies necessary to document a package
915912 fn doc_deps ( & self , unit : & Unit < ' a > ) -> CargoResult < Vec < Unit < ' a > > > {
916- let deps = self . resolve . deps ( unit. pkg . package_id ( ) ) . filter ( |dep| {
913+ let dep_ids : Vec < _ > = self . resolve . deps ( unit. pkg . package_id ( ) ) . filter ( |dep| {
917914 unit. pkg . dependencies ( ) . iter ( ) . filter ( |d| {
918915 d. name ( ) == dep. name ( )
919916 } ) . any ( |dep| {
@@ -923,16 +920,15 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
923920 _ => false ,
924921 }
925922 } )
926- } ) . map ( |dep| {
927- self . get_package ( dep )
928- } ) ;
923+ } ) . collect ( ) ;
924+
925+ let deps = self . get_packages ( & * dep_ids ) ? ;
929926
930927 // To document a library, we depend on dependencies actually being
931928 // built. If we're documenting *all* libraries, then we also depend on
932929 // the documentation of the library being built.
933930 let mut ret = Vec :: new ( ) ;
934931 for dep in deps {
935- let dep = dep?;
936932 let lib = match dep. targets ( ) . iter ( ) . find ( |t| t. is_lib ( ) ) {
937933 Some ( lib) => lib,
938934 None => continue ,
@@ -1007,7 +1003,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
10071003 }
10081004
10091005 /// Gets a package for the given package id.
1010- pub fn get_package ( & self , id : & PackageId ) -> CargoResult < & ' a Package > {
1006+ pub fn get_packages ( & self , id : & [ & PackageId ] ) -> CargoResult < Vec < & ' a Package > > {
10111007 self . packages . get ( id)
10121008 }
10131009
0 commit comments