Skip to content

Commit

Permalink
auto merge of rust-lang#329 : alexcrichton/cargo/fix-git-submodule, r…
Browse files Browse the repository at this point in the history
…=wycats

The fast path bypassed updating the submodule which wasn't correct if we were
the first checkout.
  • Loading branch information
bors committed Aug 6, 2014
2 parents 6faa6c9 + 4d42cbd commit eebb219
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 2 deletions.
4 changes: 2 additions & 2 deletions src/cargo/sources/git/utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -195,11 +195,10 @@ impl GitDatabase {
rev.clone()));

match self.remote.rev_for(dest, "HEAD") {
Ok(ref head) if rev == *head => return Ok(checkout),
Ok(ref head) if rev == *head => {}
_ => try!(checkout.fetch()),
}

try!(checkout.reset());
try!(checkout.update_submodules());

Ok(checkout)
Expand Down Expand Up @@ -284,6 +283,7 @@ impl GitCheckout {
// In this case we just use `origin` here instead of the database path.
git!(self.location, "fetch", "--force", "--quiet", "origin");
git!(self.location, "fetch", "--force", "--quiet", "--tags", "origin");
try!(self.reset());
Ok(())
}

Expand Down
53 changes: 53 additions & 0 deletions tests/test_cargo_compile_git_deps.rs
Original file line number Diff line number Diff line change
Expand Up @@ -674,3 +674,56 @@ test!(update_with_shared_deps {
git = git_project.root().display(),
compiling = COMPILING, dir = p.root().display())));
})

test!(dep_with_submodule {
let project = project("foo");
let git_project = git_repo("dep1", |project| {
project
.file("Cargo.toml", r#"
[package]
name = "dep1"
version = "0.5.0"
authors = ["[email protected]"]
"#)
}).assert();
let git_project2 = git_repo("dep2", |project| {
project
.file("lib.rs", "pub fn dep() {}")
}).assert();

git_project.process("git").args(["submodule", "add"])
.arg(git_project2.root()).arg("src").exec_with_output().assert();
git_project.process("git").args(["add", "."]).exec_with_output().assert();
git_project.process("git").args(["commit", "-m", "test"]).exec_with_output()
.assert();

let project = project
.file("Cargo.toml", format!(r#"
[project]
name = "foo"
version = "0.5.0"
authors = ["[email protected]"]
[dependencies.dep1]
git = 'file:{}'
"#, git_project.root().display()))
.file("src/lib.rs", "
extern crate dep1;
pub fn foo() { dep1::dep() }
");

let root = project.root();
let git_root = git_project.root();

assert_that(project.cargo_process("cargo-build"),
execs()
.with_stdout(format!("{} git repository `file:{}`\n\
{} dep1 v0.5.0 (file:{}#[..])\n\
{} foo v0.5.0 (file:{})\n",
UPDATING, git_root.display(),
COMPILING, git_root.display(),
COMPILING, root.display()))
.with_stderr(""));
})

0 comments on commit eebb219

Please sign in to comment.