Skip to content

Commit 40bb272

Browse files
Elly Jonesgraydon
authored andcommitted
---
yaml --- r: 6533 b: refs/heads/master c: fa9e3e8 h: refs/heads/master i: 6531: 4c06d20 v: v3
1 parent df4ccf6 commit 40bb272

File tree

2 files changed

+136
-1
lines changed

2 files changed

+136
-1
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 7476a39e47d4c5d8e1a349adf590ee329501a0a8
2+
refs/heads/master: fa9e3e8d9aa13296e8bc0526e32085ddc7ca3c66

trunk/src/cargo.rs

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
// cargo.rs - Rust package manager
2+
3+
use rustc;
4+
use std;
5+
6+
import rustc::syntax::{ast, codemap, visit};
7+
import rustc::syntax::parse::parser;
8+
9+
import std::io;
10+
import std::option;
11+
import std::option::{none, some};
12+
import std::run;
13+
import std::str;
14+
import std::tempfile;
15+
import std::vec;
16+
17+
type pkg = {
18+
name: str,
19+
vers: str,
20+
uuid: str,
21+
desc: option::t<str>,
22+
sigs: option::t<str>
23+
};
24+
25+
fn load_link(mis: [@ast::meta_item]) -> (option::t<str>,
26+
option::t<str>,
27+
option::t<str>) {
28+
let name = none;
29+
let vers = none;
30+
let uuid = none;
31+
for a: @ast::meta_item in mis {
32+
alt a.node {
33+
ast::meta_name_value(v, {node: ast::lit_str(s), span: _}) {
34+
alt v {
35+
"name" { name = some(s); }
36+
"vers" { vers = some(s); }
37+
"uuid" { uuid = some(s); }
38+
_ { }
39+
}
40+
}
41+
}
42+
}
43+
(name, vers, uuid)
44+
}
45+
46+
fn load_pkg(filename: str) -> option::t<pkg> {
47+
let sess = @{cm: codemap::new_codemap(), mutable next_id: 0};
48+
let c = parser::parse_crate_from_crate_file(filename, [], sess);
49+
50+
let name = none;
51+
let vers = none;
52+
let uuid = none;
53+
let desc = none;
54+
let sigs = none;
55+
56+
for a in c.node.attrs {
57+
alt a.node.value.node {
58+
ast::meta_name_value(v, {node: ast::lit_str(s), span: _}) {
59+
alt v {
60+
"desc" { desc = some(v); }
61+
"sigs" { sigs = some(v); }
62+
_ { }
63+
}
64+
}
65+
ast::meta_list(v, mis) {
66+
if v == "link" {
67+
let (n, v, u) = load_link(mis);
68+
name = n;
69+
vers = v;
70+
uuid = u;
71+
}
72+
}
73+
}
74+
}
75+
76+
alt (name, vers, uuid) {
77+
(some(name0), some(vers0), some(uuid0)) {
78+
some({
79+
name: name0,
80+
vers: vers0,
81+
uuid: uuid0,
82+
desc: desc,
83+
sigs: sigs})
84+
}
85+
_ { ret none; }
86+
}
87+
}
88+
89+
fn print(s: str) {
90+
io::stdout().write_line(s);
91+
}
92+
93+
fn rest(s: str, start: uint) -> str {
94+
if (start >= str::char_len(s)) {
95+
""
96+
} else {
97+
str::char_slice(s, start, str::char_len(s))
98+
}
99+
}
100+
101+
fn install_file(path: str) -> option::t<str> {
102+
let wd = tempfile::mkdtemp("/tmp/cargo-work-", "");
103+
ret wd;
104+
}
105+
106+
fn cmd_install(argv: [str]) {
107+
// cargo install <pkg>
108+
if vec::len(argv) < 3u {
109+
cmd_usage();
110+
ret;
111+
}
112+
113+
let wd = if str::starts_with(argv[2], "file:") {
114+
let path = rest(argv[2], 5u);
115+
install_file(path)
116+
} else {
117+
none
118+
};
119+
}
120+
121+
fn cmd_usage() {
122+
print("Usage: cargo <verb> [args...]");
123+
}
124+
125+
fn main(argv: [str]) {
126+
if vec::len(argv) < 2u {
127+
cmd_usage();
128+
ret;
129+
}
130+
alt argv[1] {
131+
"usage" { cmd_usage(); }
132+
_ { cmd_usage(); }
133+
}
134+
}
135+

0 commit comments

Comments
 (0)