Fix submodules on the initial checkout

The fast path bypassed updating the submodule which wasn't correct if we were
the first checkout.
This commit is contained in:
Alex Crichton 2014-08-05 22:26:38 -07:00
parent 23bb49c807
commit 4d42cbd716
2 changed files with 55 additions and 2 deletions

View file

@ -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)
@ -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(())
}

View file

@ -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 = ["carlhuda@example.com"]
"#)
}).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 = ["wycats@example.com"]
[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(""));
})