Skip to content

Commit 7b0c73d

Browse files
Elly Jonesgraydon
Elly Jones
authored andcommitted
cargo: refactor a bit
1 parent 7f945ee commit 7b0c73d

File tree

1 file changed

+39
-25
lines changed

1 file changed

+39
-25
lines changed

src/cargo/cargo.rs

Lines changed: 39 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,14 @@ import std::str;
1414
import std::tempfile;
1515
import std::vec;
1616

17+
type cargo = {
18+
root: str,
19+
bindir: str,
20+
libdir: str,
21+
workdir: str,
22+
fetchdir: str
23+
};
24+
1725
type pkg = {
1826
name: str,
1927
vers: str,
@@ -109,7 +117,7 @@ fn need_dir(s: str) {
109117
}
110118
}
111119

112-
fn setup_dirs() -> str {
120+
fn configure() -> cargo {
113121
let p = alt generic_os::getenv("CARGO_ROOT") {
114122
some(_p) { _p }
115123
none. {
@@ -122,18 +130,24 @@ fn setup_dirs() -> str {
122130

123131
log #fmt["p: %s", p];
124132

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);
130146

131-
p
147+
c
132148
}
133149

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) {
137151
let name = fs::basename(cf);
138152
let ri = str::index(name, '.' as u8);
139153
if ri != -1 {
@@ -144,19 +158,19 @@ fn install_one_crate(cargo_root: str, path: str, cf: str, p: pkg) {
144158
run::run_program("rustc", [cf]);
145159
let new = fs::list_dir(".");
146160
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];
150164
// 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]);
152166
} 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]);
155169
}
156170
}
157171
}
158172

159-
fn install_source(cargo_root: str, path: str) {
173+
fn install_source(c: cargo, path: str) {
160174
log #fmt["source: %s", path];
161175
fs::change_dir(path);
162176
let contents = fs::list_dir(".");
@@ -174,25 +188,25 @@ fn install_source(cargo_root: str, path: str) {
174188
alt p {
175189
none. { cont; }
176190
some(_p) {
177-
install_one_crate(cargo_root, path, cf, _p);
191+
install_one_crate(c, path, cf, _p);
178192
}
179193
}
180194
}
181195
}
182196

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(), "");
185199
alt wd {
186200
some(p) {
187201
run::run_program("tar", ["-x", "--strip-components=1",
188202
"-C", p, "-f", _path]);
189-
install_source(cargo_root, p);
203+
install_source(c, p);
190204
}
191205
_ { fail "needed temp dir"; }
192206
}
193207
}
194208

195-
fn cmd_install(cargo_root: str, argv: [str]) {
209+
fn cmd_install(c: cargo, argv: [str]) {
196210
// cargo install <pkg>
197211
if vec::len(argv) < 3u {
198212
cmd_usage();
@@ -201,7 +215,7 @@ fn cmd_install(cargo_root: str, argv: [str]) {
201215

202216
if str::starts_with(argv[2], "file:") {
203217
let path = rest(argv[2], 5u);
204-
install_file(cargo_root, path);
218+
install_file(c, path);
205219
}
206220
}
207221

@@ -214,9 +228,9 @@ fn main(argv: [str]) {
214228
cmd_usage();
215229
ret;
216230
}
217-
let cargo_root = setup_dirs();
231+
let c = configure();
218232
alt argv[1] {
219-
"install" { cmd_install(cargo_root, argv); }
233+
"install" { cmd_install(c, argv); }
220234
"usage" { cmd_usage(); }
221235
_ { cmd_usage(); }
222236
}

0 commit comments

Comments
 (0)