Don't look inside target/ for sub-packages

When cargo is building itself, it just ends up getting confused because the test
directory is in this location.
This commit is contained in:
Alex Crichton 2014-07-18 08:29:40 -07:00
parent 46c23d8495
commit 5e1c31d52d
2 changed files with 30 additions and 8 deletions

View File

@ -18,7 +18,7 @@ pub fn read_package(path: &Path, source_id: &SourceId)
let data = try!(file.read_to_end());
let layout = project_layout(&path.dir_path());
let (manifest, nested) =
let (manifest, nested) =
try!(read_manifest(data.as_slice(), layout, source_id));
Ok((Package::new(manifest, path, source_id), nested))
@ -32,11 +32,14 @@ pub fn read_packages(path: &Path,
log!(5, "looking for root package: {}, source_id={}", path.display(), source_id);
try!(process_possible_package(path, &mut all_packages, source_id, &mut visited));
try!(walk(path, true, |dir| {
try!(walk(path, true, |root, dir| {
log!(5, "looking for child package: {}", dir.display());
if root && dir.join("target").is_dir() { return Ok(false); }
if root { return Ok(true) }
if dir.filename_str() == Some(".git") { return Ok(false); }
if dir.join(".git").exists() { return Ok(false); }
try!(process_possible_package(dir, &mut all_packages, source_id, &mut visited));
try!(process_possible_package(dir, &mut all_packages, source_id,
&mut visited));
Ok(true)
}));
@ -48,15 +51,17 @@ pub fn read_packages(path: &Path,
}
}
fn walk(path: &Path, is_root: bool, callback: |&Path| -> CargoResult<bool>) -> CargoResult<()> {
fn walk(path: &Path, is_root: bool,
callback: |bool, &Path| -> CargoResult<bool>) -> CargoResult<()> {
if path.is_dir() {
if !is_root {
let continues = try!(callback(path));
if !continues { log!(5, "Found submodule at {}", path.display()); return Ok(()); }
let continues = try!(callback(is_root, path));
if !continues {
log!(5, "not processing {}", path.display());
return Ok(());
}
for dir in try!(fs::readdir(path)).iter() {
try!(walk(dir, false, |x| callback(x)))
try!(walk(dir, false, |a, x| callback(a, x)))
}
}

View File

@ -1257,3 +1257,20 @@ test!(deletion_causes_failure {
"#);
assert_that(p.cargo_process("cargo-build"), execs().with_status(101));
})
test!(bad_cargo_toml_in_target_dir {
let p = project("world")
.file("Cargo.toml", r#"
[project]
name = "foo"
version = "0.0.1"
authors = []
"#)
.file("src/main.rs", r#"
fn main() {}
"#)
.file("target/Cargo.toml", "bad-toml");
assert_that(p.cargo_process("cargo-build"), execs().with_status(0));
assert_that(process(p.bin("foo")), execs().with_status(0));
})