@@ -780,7 +780,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
780
780
781
781
let id = unit. pkg . package_id ( ) ;
782
782
let deps = self . resolve . deps ( id) ;
783
- let mut ret = deps. filter ( |dep| {
783
+ let pkg_ids : Vec < _ > = deps. filter ( |dep| {
784
784
unit. pkg . dependencies ( ) . iter ( ) . filter ( |d| {
785
785
d. name ( ) == dep. name ( ) && d. version_req ( ) . matches ( dep. version ( ) )
786
786
} ) . any ( |d| {
@@ -814,22 +814,19 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
814
814
// actually used!
815
815
true
816
816
} )
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) ,
829
827
}
830
- Err ( e) => Some ( Err ( e) )
831
- }
832
- } ) . collect :: < CargoResult < Vec < _ > > > ( ) ?;
828
+ } )
829
+ } ) . collect ( ) ;
833
830
834
831
// If this target is a build script, then what we've collected so far is
835
832
// 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> {
913
910
914
911
/// Returns the dependencies necessary to document a package
915
912
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| {
917
914
unit. pkg . dependencies ( ) . iter ( ) . filter ( |d| {
918
915
d. name ( ) == dep. name ( )
919
916
} ) . any ( |dep| {
@@ -923,16 +920,15 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
923
920
_ => false ,
924
921
}
925
922
} )
926
- } ) . map ( |dep| {
927
- self . get_package ( dep )
928
- } ) ;
923
+ } ) . collect ( ) ;
924
+
925
+ let deps = self . get_packages ( & * dep_ids ) ? ;
929
926
930
927
// To document a library, we depend on dependencies actually being
931
928
// built. If we're documenting *all* libraries, then we also depend on
932
929
// the documentation of the library being built.
933
930
let mut ret = Vec :: new ( ) ;
934
931
for dep in deps {
935
- let dep = dep?;
936
932
let lib = match dep. targets ( ) . iter ( ) . find ( |t| t. is_lib ( ) ) {
937
933
Some ( lib) => lib,
938
934
None => continue ,
@@ -1007,7 +1003,7 @@ impl<'a, 'cfg> Context<'a, 'cfg> {
1007
1003
}
1008
1004
1009
1005
/// 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 > > {
1011
1007
self . packages . get ( id)
1012
1008
}
1013
1009
0 commit comments