@@ -9,6 +9,8 @@ use std::sync::Arc;
9
9
10
10
use cargo:: core:: { SourceId , Dependency , Source , Package , Workspace } ;
11
11
use cargo:: core:: compiler:: { DefaultExecutor , CompileMode , MessageFormat , BuildConfig , Executor } ;
12
+ use cargo:: core:: package:: PackageSet ;
13
+ use cargo:: core:: source:: SourceMap ;
12
14
use cargo:: util:: { CargoResult , Config , internal, Filesystem } ;
13
15
use cargo:: sources:: SourceConfigMap ;
14
16
use cargo:: ops:: { self , Packages } ;
@@ -31,19 +33,25 @@ pub fn build_doc(name: &str, vers: Option<&str>, target: Option<&str>) -> Result
31
33
let config = try!( Config :: default ( ) ) ;
32
34
let source_id = try!( SourceId :: crates_io ( & config) ) ;
33
35
34
- let source_map = try!( SourceConfigMap :: new ( & config) ) ;
35
- let mut source = try!( source_map . load ( & source_id) ) ;
36
+ let source_cfg_map = try!( SourceConfigMap :: new ( & config) ) ;
37
+ let mut source = try!( source_cfg_map . load ( & source_id) ) ;
36
38
37
39
// update crates.io-index registry
38
40
try!( source. update ( ) ) ;
39
41
40
42
let dep = try!( Dependency :: parse_no_deprecated ( name, vers, & source_id) ) ;
41
43
let deps = try!( source. query_vec ( & dep) ) ;
42
- let pkg = try!( deps. iter ( ) . map ( |p| p. package_id ( ) ) . max ( )
43
- // FIXME: This is probably not a rusty way to handle options and results
44
- // or maybe it is who knows...
45
- . map ( |pkgid| source. download ( pkgid) )
46
- . unwrap_or ( Err ( internal ( "PKG download error" ) ) ) ) ;
44
+ let pkgid = try!( deps. iter ( ) . map ( |p| p. package_id ( ) ) . max ( )
45
+ // FIXME: This is probably not a rusty way to handle options and results
46
+ // or maybe it is who knows...
47
+ . ok_or ( internal ( "no package id available" ) ) ) ;
48
+
49
+ let mut source_map = SourceMap :: new ( ) ;
50
+ source_map. insert ( source) ;
51
+
52
+ let pkg_set = try!( PackageSet :: new ( & [ pkgid. clone ( ) ] , source_map, & config) ) ;
53
+
54
+ let pkg = try!( pkg_set. get_one ( & pkgid) ) . clone ( ) ;
47
55
48
56
let current_dir = try!( env:: current_dir ( ) ) ;
49
57
let target_dir = PathBuf :: from ( current_dir) . join ( "cratesfyi" ) ;
@@ -93,11 +101,13 @@ pub fn build_doc(name: &str, vers: Option<&str>, target: Option<&str>) -> Result
93
101
false ) ,
94
102
target_rustc_args : None ,
95
103
target_rustdoc_args : Some ( rustdoc_args) ,
104
+ local_rustdoc_args : None ,
96
105
export_dir : None ,
97
106
} ;
98
107
99
108
let ws = try!( Workspace :: ephemeral ( pkg, & config, Some ( Filesystem :: new ( target_dir) ) , false ) ) ;
100
109
let exec: Arc < Executor > = Arc :: new ( DefaultExecutor ) ;
110
+ let source = try!( source_cfg_map. load ( & source_id) ) ;
101
111
try!( ops:: compile_ws ( & ws, Some ( source) , & opts, & exec) ) ;
102
112
103
113
Ok ( try!( ws. current ( ) ) . clone ( ) )
@@ -118,11 +128,17 @@ pub fn get_package(name: &str, vers: Option<&str>) -> CargoResult<Package> {
118
128
119
129
let dep = try!( Dependency :: parse_no_deprecated ( name, vers, & source_id) ) ;
120
130
let deps = try!( source. query_vec ( & dep) ) ;
121
- let pkg = try!( deps. iter ( ) . map ( |p| p. package_id ( ) ) . max ( )
122
- // FIXME: This is probably not a rusty way to handle options and results
123
- // or maybe it is who knows...
124
- . map ( |pkgid| source. download ( pkgid) )
125
- . unwrap_or ( Err ( internal ( "PKG download error" ) ) ) ) ;
131
+ let pkgid = try!( deps. iter ( ) . map ( |p| p. package_id ( ) ) . max ( )
132
+ // FIXME: This is probably not a rusty way to handle options and results
133
+ // or maybe it is who knows...
134
+ . ok_or ( internal ( "no package id available" ) ) ) ;
135
+
136
+ let mut source_map = SourceMap :: new ( ) ;
137
+ source_map. insert ( source) ;
138
+
139
+ let pkg_set = try!( PackageSet :: new ( & [ pkgid. clone ( ) ] , source_map, & config) ) ;
140
+
141
+ let pkg = try!( pkg_set. get_one ( & pkgid) ) . clone ( ) ;
126
142
127
143
Ok ( pkg)
128
144
}
0 commit comments