Skip to content

Commit

Permalink
cargo: allow 'ref' package key for git packages.
Browse files Browse the repository at this point in the history
This lets you specify e.g. a tag or a branch name to be checked out for that
package.

Signed-off-by: Elly Jones <elly@leptoquark.net>
  • Loading branch information
Elly Jones committed Dec 21, 2011
1 parent 2004394 commit bbc534b
Showing 1 changed file with 15 additions and 2 deletions.
17 changes: 15 additions & 2 deletions src/cargo/cargo.rs
Expand Up @@ -31,6 +31,7 @@ type package = {
uuid: str,
url: str,
method: str,
ref: option::t<str>,
tags: [str]
};

Expand Down Expand Up @@ -242,6 +243,11 @@ fn load_one_source_package(&src: source, p: map::hashmap<str, json::json>) {
}
};

let ref = alt p.find("ref") {
some(json::string(_n)) { some(_n) }
_ { none }
};

let tags = [];
alt p.find("tags") {
some(json::list(js)) {
Expand All @@ -260,6 +266,7 @@ fn load_one_source_package(&src: source, p: map::hashmap<str, json::json>) {
uuid: uuid,
url: url,
method: method,
ref: ref,
tags: tags
});
log " Loaded package: " + src.name + "/" + name;
Expand Down Expand Up @@ -398,8 +405,14 @@ fn install_source(c: cargo, path: str) {
}
}

fn install_git(c: cargo, wd: str, url: str) {
fn install_git(c: cargo, wd: str, url: str, ref: option::t<str>) {
run::run_program("git", ["clone", url, wd]);
if option::is_some::<str>(ref) {
let r = option::get::<str>(ref);
fs::change_dir(wd);
run::run_program("git", ["checkout", r]);
}

install_source(c, wd);
}

Expand All @@ -424,7 +437,7 @@ fn install_file(c: cargo, wd: str, path: str) {
fn install_package(c: cargo, wd: str, pkg: package) {
info("Installing with " + pkg.method + " from " + pkg.url + "...");
if pkg.method == "git" {
install_git(c, wd, pkg.url);
install_git(c, wd, pkg.url, pkg.ref);
} else if pkg.method == "http" {
install_curl(c, wd, pkg.url);
} else if pkg.method == "file" {
Expand Down

0 comments on commit bbc534b

Please sign in to comment.