mirror of
https://github.com/rust-lang/cargo.git
synced 2025-09-28 11:20:36 +00:00
Auto merge of #9607 - hi-rustin:rustin-patch-cargo-toml, r=ehuss
Detect incorrectly named cargo.toml close https://github.com/rust-lang/cargo/issues/9541
This commit is contained in:
commit
9233aa06c8
@ -212,11 +212,19 @@ fn install_one(
|
||||
src.path().display()
|
||||
);
|
||||
} else {
|
||||
bail!(
|
||||
"`{}` does not contain a Cargo.toml file. \
|
||||
if src.path().join("cargo.toml").exists() {
|
||||
bail!(
|
||||
"`{}` does not contain a Cargo.toml file, but found cargo.toml please try to rename it to Cargo.toml. \
|
||||
--path must point to a directory containing a Cargo.toml file.",
|
||||
src.path().display()
|
||||
)
|
||||
src.path().display()
|
||||
)
|
||||
} else {
|
||||
bail!(
|
||||
"`{}` does not contain a Cargo.toml file. \
|
||||
--path must point to a directory containing a Cargo.toml file.",
|
||||
src.path().display()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
select_pkg(
|
||||
|
@ -88,10 +88,19 @@ pub fn read_packages(
|
||||
if all_packages.is_empty() {
|
||||
match errors.pop() {
|
||||
Some(err) => Err(err),
|
||||
None => Err(anyhow::format_err!(
|
||||
"Could not find Cargo.toml in `{}`",
|
||||
None => {
|
||||
if find_project_manifest_exact(path, "cargo.toml").is_ok() {
|
||||
Err(anyhow::format_err!(
|
||||
"Could not find Cargo.toml in `{}`, but found cargo.toml please try to rename it to Cargo.toml",
|
||||
path.display()
|
||||
)),
|
||||
))
|
||||
} else {
|
||||
Err(anyhow::format_err!(
|
||||
"Could not find Cargo.toml in `{}`",
|
||||
path.display()
|
||||
))
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Ok(all_packages.into_iter().map(|(_, v)| v).collect())
|
||||
|
@ -4,19 +4,33 @@ use std::path::{Path, PathBuf};
|
||||
|
||||
/// Finds the root `Cargo.toml`.
|
||||
pub fn find_root_manifest_for_wd(cwd: &Path) -> CargoResult<PathBuf> {
|
||||
let file = "Cargo.toml";
|
||||
let valid_cargo_toml_file_name = "Cargo.toml";
|
||||
let invalid_cargo_toml_file_name = "cargo.toml";
|
||||
let mut invalid_cargo_toml_path_exists = false;
|
||||
|
||||
for current in paths::ancestors(cwd, None) {
|
||||
let manifest = current.join(file);
|
||||
let manifest = current.join(valid_cargo_toml_file_name);
|
||||
if manifest.exists() {
|
||||
return Ok(manifest);
|
||||
}
|
||||
if current.join(invalid_cargo_toml_file_name).exists() {
|
||||
invalid_cargo_toml_path_exists = true;
|
||||
}
|
||||
}
|
||||
|
||||
anyhow::bail!(
|
||||
"could not find `{}` in `{}` or any parent directory",
|
||||
file,
|
||||
if invalid_cargo_toml_path_exists {
|
||||
anyhow::bail!(
|
||||
"could not find `{}` in `{}` or any parent directory, but found cargo.toml please try to rename it to Cargo.toml",
|
||||
valid_cargo_toml_file_name,
|
||||
cwd.display()
|
||||
)
|
||||
} else {
|
||||
anyhow::bail!(
|
||||
"could not find `{}` in `{}` or any parent directory",
|
||||
valid_cargo_toml_file_name,
|
||||
cwd.display()
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
/// Returns the path to the `file` in `pwd`, if it exists.
|
||||
|
@ -561,6 +561,24 @@ fn cargo_compile_without_manifest() {
|
||||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
#[cfg(target_os = "linux")]
|
||||
fn cargo_compile_with_lowercase_cargo_toml() {
|
||||
let p = project()
|
||||
.no_manifest()
|
||||
.file("cargo.toml", &basic_manifest("foo", "0.1.0"))
|
||||
.file("src/lib.rs", &main_file(r#""i am foo""#, &[]))
|
||||
.build();
|
||||
|
||||
p.cargo("build")
|
||||
.with_status(101)
|
||||
.with_stderr(
|
||||
"[ERROR] could not find `Cargo.toml` in `[..]` or any parent directory, \
|
||||
but found cargo.toml please try to rename it to Cargo.toml",
|
||||
)
|
||||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn cargo_compile_with_invalid_code() {
|
||||
let p = project()
|
||||
|
@ -399,6 +399,23 @@ fn install_target_dir() {
|
||||
assert!(path.exists());
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
#[cfg(target_os = "linux")]
|
||||
fn install_path_with_lowercase_cargo_toml() {
|
||||
let toml = paths::root().join("cargo.toml");
|
||||
fs::write(toml, "").unwrap();
|
||||
|
||||
cargo_process("install --path .")
|
||||
.with_status(101)
|
||||
.with_stderr(
|
||||
"\
|
||||
[ERROR] `[CWD]` does not contain a Cargo.toml file, \
|
||||
but found cargo.toml please try to rename it to Cargo.toml. --path must point to a directory containing a Cargo.toml file.
|
||||
",
|
||||
)
|
||||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn multiple_crates_error() {
|
||||
let p = git::repo(&paths::root().join("foo"))
|
||||
@ -760,6 +777,26 @@ fn git_repo() {
|
||||
assert_has_installed_exe(cargo_home(), "foo");
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
#[cfg(target_os = "linux")]
|
||||
fn git_repo_with_lowercase_cargo_toml() {
|
||||
let p = git::repo(&paths::root().join("foo"))
|
||||
.file("cargo.toml", &basic_manifest("foo", "0.1.0"))
|
||||
.file("src/main.rs", "fn main() {}")
|
||||
.build();
|
||||
|
||||
cargo_process("install --git")
|
||||
.arg(p.url().to_string())
|
||||
.with_status(101)
|
||||
.with_stderr(
|
||||
"\
|
||||
[UPDATING] git repository [..]
|
||||
[ERROR] Could not find Cargo.toml in `[..]`, but found cargo.toml please try to rename it to Cargo.toml
|
||||
",
|
||||
)
|
||||
.run();
|
||||
}
|
||||
|
||||
#[cargo_test]
|
||||
fn list() {
|
||||
pkg("foo", "0.0.1");
|
||||
|
Loading…
x
Reference in New Issue
Block a user