Skip to content

Commit 0ac4fd0

Browse files
committed
---
yaml --- r: 8158 b: refs/heads/snap-stage3 c: 1ccbba3 h: refs/heads/master v: v3
1 parent 2ebe7a7 commit 0ac4fd0

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

102 files changed

+1390
-640
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
---
22
refs/heads/master: 2898dcc5d97da9427ac367542382b6239d9c0bbf
33
refs/heads/snap-stage1: e33de59e47c5076a89eadeb38f4934f58a3618a6
4-
refs/heads/snap-stage3: a422cd7ddba45cc943416851c4abc8ae915c4fe9
4+
refs/heads/snap-stage3: 1ccbba33414e68fda6a4a0886bc657069a9737dc
55
refs/heads/try: 2898dcc5d97da9427ac367542382b6239d9c0bbf
66
refs/tags/release-0.1: 1f5c5126e96c79d22cb7862f75304136e204f105

branches/snap-stage3/src/cargo/cargo.rs

Lines changed: 117 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ use std;
55

66
import rustc::syntax::{ast, codemap};
77
import rustc::syntax::parse::parser;
8-
import rustc::util::filesearch::get_cargo_root;
8+
import rustc::util::filesearch::{get_cargo_root, get_cargo_root_nearest,
9+
get_cargo_sysroot};
910
import rustc::driver::diagnostic;
1011

1112
import std::fs;
@@ -19,6 +20,8 @@ import std::run;
1920
import str;
2021
import std::tempfile;
2122
import vec;
23+
import std::getopts;
24+
import getopts::{optflag, optopt, opt_present};
2225

2326
enum _src {
2427
/* Break cycles in package <-> source */
@@ -53,7 +56,7 @@ type cargo = {
5356
workdir: str,
5457
sourcedir: str,
5558
sources: map::hashmap<str, source>,
56-
mutable test: bool
59+
opts: options
5760
};
5861

5962
type pkg = {
@@ -65,6 +68,18 @@ type pkg = {
6568
crate_type: option<str>
6669
};
6770

71+
type options = {
72+
test: bool,
73+
mode: mode,
74+
free: [str],
75+
};
76+
77+
enum mode { system_mode, user_mode, local_mode }
78+
79+
fn opts() -> [getopts::opt] {
80+
[optflag("g"), optflag("G"), optopt("mode"), optflag("test")]
81+
}
82+
6883
fn info(msg: str) {
6984
io::stdout().write_line("info: " + msg);
7085
}
@@ -322,10 +337,57 @@ fn load_source_packages(&c: cargo, &src: source) {
322337
};
323338
}
324339

325-
fn configure() -> cargo {
326-
let p = alt get_cargo_root() {
327-
result::ok(p) { p }
328-
result::err(e) { fail e }
340+
fn build_cargo_options(argv: [str]) -> options {
341+
let match = alt getopts::getopts(argv, opts()) {
342+
result::ok(m) { m }
343+
result::err(f) {
344+
fail #fmt["%s", getopts::fail_str(f)];
345+
}
346+
};
347+
348+
let test = opt_present(match, "test");
349+
let mode = if opt_present(match, "G") {
350+
if opt_present(match, "mode") { fail "--mode and -G both provided"; }
351+
if opt_present(match, "g") { fail "-G and -g both provided"; }
352+
system_mode
353+
} else if opt_present(match, "g") {
354+
if opt_present(match, "mode") { fail "--mode and -g both provided"; }
355+
if opt_present(match, "G") { fail "-G and -g both provided"; }
356+
user_mode
357+
} else if opt_present(match, "mode") {
358+
alt getopts::opt_str(match, "mode") {
359+
"system" { system_mode }
360+
"user" { user_mode }
361+
"local" { local_mode }
362+
_ { fail "argument to `mode` must be one of `system`" +
363+
", `user`, or `normal`";
364+
}
365+
}
366+
} else {
367+
local_mode
368+
};
369+
370+
if mode == system_mode {
371+
// FIXME: Per discussion on #1760, we need to think about how
372+
// system mode works. It should install files to the normal
373+
// sysroot paths, but it also needsd an area to place various
374+
// cargo configuration and work files.
375+
fail "system mode does not exist yet";
376+
}
377+
378+
{test: test, mode: mode, free: match.free}
379+
}
380+
381+
fn configure(opts: options) -> cargo {
382+
let get_cargo_dir = alt opts.mode {
383+
system_mode { get_cargo_sysroot }
384+
user_mode { get_cargo_root }
385+
local_mode { get_cargo_root_nearest }
386+
};
387+
388+
let p = alt get_cargo_dir() {
389+
result::ok(p) { p }
390+
result::err(e) { fail e }
329391
};
330392

331393
let sources = map::new_str_hash::<source>();
@@ -339,7 +401,7 @@ fn configure() -> cargo {
339401
workdir: fs::connect(p, "work"),
340402
sourcedir: fs::connect(p, "sources"),
341403
sources: sources,
342-
mutable test: false
404+
opts: opts
343405
};
344406

345407
need_dir(c.root);
@@ -430,7 +492,7 @@ fn install_source(c: cargo, path: str) {
430492
alt p {
431493
none { cont; }
432494
some(_p) {
433-
if c.test {
495+
if c.opts.test {
434496
test_one_crate(c, path, cf, _p);
435497
}
436498
install_one_crate(c, path, cf, _p);
@@ -573,19 +635,14 @@ fn install_named_specific(c: cargo, wd: str, src: str, name: str) {
573635
error("Can't find package " + src + "/" + name);
574636
}
575637

576-
fn cmd_install(c: cargo, argv: [str]) unsafe {
638+
fn cmd_install(c: cargo) unsafe {
577639
// cargo install <pkg>
578-
if vec::len(argv) < 3u {
640+
if vec::len(c.opts.free) < 3u {
579641
cmd_usage();
580642
ret;
581643
}
582644

583-
let target = argv[2];
584-
// TODO: getopts
585-
if vec::len(argv) > 3u && argv[2] == "--test" {
586-
c.test = true;
587-
target = argv[3];
588-
}
645+
let target = c.opts.free[2];
589646

590647
let wd = alt tempfile::mkdtemp(c.workdir + fs::path_sep(), "") {
591648
some(_wd) { _wd }
@@ -671,9 +728,9 @@ fn sync_one(c: cargo, name: str, src: source) {
671728
run::run_program("cp", [pkgfile, destpkgfile]);
672729
}
673730

674-
fn cmd_sync(c: cargo, argv: [str]) {
675-
if vec::len(argv) == 3u {
676-
sync_one(c, argv[2], c.sources.get(argv[2]));
731+
fn cmd_sync(c: cargo) {
732+
if vec::len(c.opts.free) == 3u {
733+
sync_one(c, c.opts.free[2], c.sources.get(c.opts.free[2]));
677734
} else {
678735
cargo_suggestion(c, true, { || } );
679736
c.sources.items { |k, v|
@@ -709,6 +766,8 @@ fn cmd_init(c: cargo) {
709766
}
710767
info(#fmt["signature ok for sources.json"]);
711768
run::run_program("cp", [srcfile, destsrcfile]);
769+
770+
info(#fmt["Initialized .cargo in %s", c.root]);
712771
}
713772

714773
fn print_pkg(s: source, p: package) {
@@ -721,22 +780,22 @@ fn print_pkg(s: source, p: package) {
721780
print(" >> " + p.description + "\n")
722781
}
723782
}
724-
fn cmd_list(c: cargo, argv: [str]) {
783+
fn cmd_list(c: cargo) {
725784
for_each_package(c, { |s, p|
726-
if vec::len(argv) <= 2u || argv[2] == s.name {
785+
if vec::len(c.opts.free) <= 2u || c.opts.free[2] == s.name {
727786
print_pkg(s, p);
728787
}
729788
});
730789
}
731790

732-
fn cmd_search(c: cargo, argv: [str]) {
733-
if vec::len(argv) < 3u {
791+
fn cmd_search(c: cargo) {
792+
if vec::len(c.opts.free) < 3u {
734793
cmd_usage();
735794
ret;
736795
}
737796
let n = 0;
738-
let name = argv[2];
739-
let tags = vec::slice(argv, 3u, vec::len(argv));
797+
let name = c.opts.free[2];
798+
let tags = vec::slice(c.opts.free, 3u, vec::len(c.opts.free));
740799
for_each_package(c, { |s, p|
741800
if (str::contains(p.name, name) || name == "*") &&
742801
vec::all(tags, { |t| vec::member(t, p.tags) }) {
@@ -748,28 +807,46 @@ fn cmd_search(c: cargo, argv: [str]) {
748807
}
749808

750809
fn cmd_usage() {
751-
print("Usage: cargo <verb> [args...]");
752-
print(" init Set up ~/.cargo");
753-
print(" install [--test] [source/]package-name Install by name");
754-
print(" install [--test] uuid:[source/]package-uuid Install by uuid");
755-
print(" list [source] List packages");
756-
print(" search <name | '*'> [tags...] Search packages");
757-
print(" sync Sync all sources");
758-
print(" usage This");
810+
print("Usage: cargo <verb> [options] [args...]" +
811+
"
812+
813+
init Set up .cargo
814+
install [--test] [source/]package-name Install by name
815+
install [--test] uuid:[source/]package-uuid Install by uuid
816+
list [source] List packages
817+
search <name | '*'> [tags...] Search packages
818+
sync Sync all sources
819+
usage This
820+
821+
Options:
822+
823+
--mode=[system,user,local] change mode as (system/user/local)
824+
-g equivalent to --mode=user
825+
-G equivalent to --mode=system
826+
827+
NOTE:
828+
This command creates/uses local-level .cargo by default.
829+
To create/use user-level .cargo, use option -g/--mode=user.
830+
To create/use system-level .cargo, use option -G/--mode=system.
831+
");
759832
}
760833

761834
fn main(argv: [str]) {
762-
if vec::len(argv) < 2u {
835+
let o = build_cargo_options(argv);
836+
837+
if vec::len(o.free) < 2u {
763838
cmd_usage();
764839
ret;
765840
}
766-
let c = configure();
767-
alt argv[1] {
841+
842+
let c = configure(o);
843+
844+
alt o.free[1] {
768845
"init" { cmd_init(c); }
769-
"install" { cmd_install(c, argv); }
770-
"list" { cmd_list(c, argv); }
771-
"search" { cmd_search(c, argv); }
772-
"sync" { cmd_sync(c, argv); }
846+
"install" { cmd_install(c); }
847+
"list" { cmd_list(c); }
848+
"search" { cmd_search(c); }
849+
"sync" { cmd_sync(c); }
773850
"usage" { cmd_usage(); }
774851
_ { cmd_usage(); }
775852
}

branches/snap-stage3/src/comp/back/link.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,13 @@
1-
import core::ctypes::{c_int, c_uint};
1+
import ctypes::{c_int, c_uint};
22
import driver::session;
33
import session::session;
44
import lib::llvm::llvm;
55
import front::attr;
66
import middle::ty;
77
import metadata::{encoder, cstore};
88
import middle::trans::common::crate_ctxt;
9-
import str;
109
import std::fs;
11-
import vec;
12-
import option;
1310
import std::run;
14-
import option::some;
15-
import option::none;
1611
import std::sha1::sha1;
1712
import syntax::ast;
1813
import syntax::print::pprust;

branches/snap-stage3/src/comp/back/rpath.rs

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,4 @@
1-
import std::os;
2-
import std::fs;
3-
import std::os_fs;
4-
import vec;
5-
import std::map;
6-
import str;
7-
import uint;
1+
import std::{os, fs, os_fs, map};
82
import metadata::cstore;
93
import driver::session;
104
import util::filesearch;

branches/snap-stage3/src/comp/driver/driver.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,9 @@ import middle::{trans, resolve, freevars, kind, ty, typeck, fn_usage,
1010
import syntax::print::{pp, pprust};
1111
import util::{ppaux, filesearch};
1212
import back::link;
13-
import core::{option, str, int, result};
1413
import result::{ok, err};
1514
import std::{fs, io, getopts};
1615
import io::{reader_util, writer_util};
17-
import option::{some, none};
1816
import getopts::{optopt, optmulti, optflag, optflagopt, opt_present};
1917
import back::{x86, x86_64};
2018

branches/snap-stage3/src/comp/driver/rustc.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@ use std;
22
use rustc;
33

44
// -*- rust -*-
5-
import core::{option, str, vec, result};
65
import result::{ok, err};
76
import std::{io, getopts};
87
import io::writer_util;
9-
import option::{some, none};
108
import getopts::{opt_present};
119
import rustc::driver::driver::*;
1210
import rustc::syntax::codemap;

branches/snap-stage3/src/comp/driver/session.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,6 @@ import syntax::{ast, codemap};
33
import syntax::ast::node_id;
44
import codemap::span;
55
import syntax::ast::{int_ty, uint_ty, float_ty};
6-
import option;
7-
import option::{some, none};
86
import syntax::parse::parser::parse_sess;
97
import util::filesearch;
108
import back::target_strs;

branches/snap-stage3/src/comp/front/attr.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// Functions dealing with attributes and meta_items
22

3-
import core::{either, vec, option};
43
import std::map;
54
import syntax::{ast, ast_util};
65
import driver::session::session;

branches/snap-stage3/src/comp/front/config.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
import core::{vec, option};
21
import syntax::{ast, fold};
3-
import attr;
42

53
export strip_unconfigured_items;
64
export metas_in_cfg;

branches/snap-stage3/src/comp/front/test.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
// Code that generates a test runner to run all the tests in a crate
22

3-
import core::{option, vec};
43
import syntax::{ast, ast_util};
54
import syntax::ast_util::*;
65
//import syntax::ast_util::dummy_sp;

branches/snap-stage3/src/comp/lib/llvm.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import core::{vec, str, option};
21
import str::sbuf;
32

43
import ctypes::{c_int, c_uint, unsigned, longlong, ulonglong};

branches/snap-stage3/src/comp/metadata/common.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
// EBML enum definitions and utils shared by the encoder and decoder
22

3-
import str;
4-
53
const tag_paths: uint = 0x01u;
64

75
const tag_items: uint = 0x02u;

branches/snap-stage3/src/comp/metadata/creader.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import syntax::codemap::span;
1010
import util::{filesearch};
1111
import std::{io, fs};
1212
import io::writer_util;
13-
import option::{none, some};
1413
import std::map::{hashmap, new_int_hash};
1514
import syntax::print::pprust;
1615
import common::*;

branches/snap-stage3/src/comp/metadata/csearch.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import syntax::ast;
44
import syntax::ast_util;
55
import middle::ty;
6-
import option::{some, none};
76
import driver::session;
87

98
export get_symbol;

branches/snap-stage3/src/comp/metadata/cstore.rs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
// The crate store - a central repo for information collected about external
22
// crates and libraries
33

4-
import core::{vec, str};
54
import std::map;
65
import syntax::ast;
76
import util::common::*;

0 commit comments

Comments
 (0)