@@ -14,6 +14,14 @@ import std::str;
14
14
import std:: tempfile;
15
15
import std:: vec;
16
16
17
+ type cargo = {
18
+ root : str ,
19
+ bindir : str ,
20
+ libdir : str ,
21
+ workdir : str ,
22
+ fetchdir : str
23
+ } ;
24
+
17
25
type pkg = {
18
26
name : str ,
19
27
vers : str ,
@@ -109,7 +117,7 @@ fn need_dir(s: str) {
109
117
}
110
118
}
111
119
112
- fn setup_dirs ( ) -> str {
120
+ fn configure ( ) -> cargo {
113
121
let p = alt generic_os:: getenv ( "CARGO_ROOT" ) {
114
122
some ( _p) { _p }
115
123
none. {
@@ -122,18 +130,24 @@ fn setup_dirs() -> str {
122
130
123
131
log #fmt[ "p: %s" , p] ;
124
132
125
- need_dir ( p) ;
126
- need_dir ( fs:: connect ( p, "fetch" ) ) ;
127
- need_dir ( fs:: connect ( p, "work" ) ) ;
128
- need_dir ( fs:: connect ( p, "lib" ) ) ;
129
- need_dir ( fs:: connect ( p, "bin" ) ) ;
133
+ let c = {
134
+ root: p,
135
+ bindir: fs:: connect ( p, "bin" ) ,
136
+ libdir: fs:: connect ( p, "lib" ) ,
137
+ workdir: fs:: connect ( p, "work" ) ,
138
+ fetchdir: fs:: connect ( p, "fetch" )
139
+ } ;
140
+
141
+ need_dir ( c. root ) ;
142
+ need_dir ( c. fetchdir ) ;
143
+ need_dir ( c. workdir ) ;
144
+ need_dir ( c. libdir ) ;
145
+ need_dir ( c. bindir ) ;
130
146
131
- p
147
+ c
132
148
}
133
149
134
- fn install_one_crate ( cargo_root : str , path : str , cf : str , p : pkg ) {
135
- let bindir = fs:: connect ( cargo_root, "bin" ) ;
136
- let libdir = fs:: connect ( cargo_root, "lib" ) ;
150
+ fn install_one_crate ( c : cargo , path : str , cf : str , p : pkg ) {
137
151
let name = fs:: basename ( cf) ;
138
152
let ri = str:: index ( name, '.' as u8 ) ;
139
153
if ri != -1 {
@@ -144,19 +158,19 @@ fn install_one_crate(cargo_root: str, path: str, cf: str, p: pkg) {
144
158
run:: run_program ( "rustc" , [ cf] ) ;
145
159
let new = fs:: list_dir ( "." ) ;
146
160
let created = vec:: filter :: < str > ( { |n| !vec:: member :: < str > ( n, old) } , new) ;
147
- for c : str in created {
148
- if str:: ends_with ( c , os:: exec_suffix ( ) ) {
149
- log #fmt[ " bin: %s" , c ] ;
161
+ for ct : str in created {
162
+ if str:: ends_with ( ct , os:: exec_suffix ( ) ) {
163
+ log #fmt[ " bin: %s" , ct ] ;
150
164
// FIXME: need libstd fs::copy or something
151
- run:: run_program ( "cp" , [ c , fs :: connect ( bindir , c ) ] ) ;
165
+ run:: run_program ( "cp" , [ ct , c . bindir ] ) ;
152
166
} else {
153
- log #fmt[ " lib: %s" , c ] ;
154
- run:: run_program ( "cp" , [ c , fs :: connect ( libdir , c ) ] ) ;
167
+ log #fmt[ " lib: %s" , ct ] ;
168
+ run:: run_program ( "cp" , [ ct , c . libdir ] ) ;
155
169
}
156
170
}
157
171
}
158
172
159
- fn install_source ( cargo_root : str , path : str ) {
173
+ fn install_source ( c : cargo , path : str ) {
160
174
log #fmt[ "source: %s" , path] ;
161
175
fs:: change_dir ( path) ;
162
176
let contents = fs:: list_dir ( "." ) ;
@@ -174,25 +188,25 @@ fn install_source(cargo_root: str, path: str) {
174
188
alt p {
175
189
none. { cont; }
176
190
some ( _p) {
177
- install_one_crate ( cargo_root , path, cf, _p) ;
191
+ install_one_crate ( c , path, cf, _p) ;
178
192
}
179
193
}
180
194
}
181
195
}
182
196
183
- fn install_file ( cargo_root : str , _path : str ) {
184
- let wd = tempfile:: mkdtemp ( cargo_root + "/work/" , "" ) ;
197
+ fn install_file ( c : cargo , _path : str ) {
198
+ let wd = tempfile:: mkdtemp ( c . workdir + fs :: path_sep ( ) , "" ) ;
185
199
alt wd {
186
200
some( p) {
187
201
run:: run_program ( "tar" , [ "-x" , "--strip-components=1" ,
188
202
"-C" , p, "-f" , _path] ) ;
189
- install_source ( cargo_root , p) ;
203
+ install_source ( c , p) ;
190
204
}
191
205
_ { fail "needed temp dir" ; }
192
206
}
193
207
}
194
208
195
- fn cmd_install ( cargo_root : str , argv : [ str ] ) {
209
+ fn cmd_install ( c : cargo , argv : [ str ] ) {
196
210
// cargo install <pkg>
197
211
if vec:: len ( argv) < 3 u {
198
212
cmd_usage ( ) ;
@@ -201,7 +215,7 @@ fn cmd_install(cargo_root: str, argv: [str]) {
201
215
202
216
if str:: starts_with ( argv[ 2 ] , "file:" ) {
203
217
let path = rest ( argv[ 2 ] , 5 u) ;
204
- install_file ( cargo_root , path) ;
218
+ install_file ( c , path) ;
205
219
}
206
220
}
207
221
@@ -214,9 +228,9 @@ fn main(argv: [str]) {
214
228
cmd_usage ( ) ;
215
229
ret;
216
230
}
217
- let cargo_root = setup_dirs ( ) ;
231
+ let c = configure ( ) ;
218
232
alt argv[ 1 ] {
219
- "install" { cmd_install ( cargo_root , argv) ; }
233
+ "install" { cmd_install ( c , argv) ; }
220
234
"usage" { cmd_usage ( ) ; }
221
235
_ { cmd_usage( ) ; }
222
236
}
0 commit comments