summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTrickyPi <33021497+TrickyPi@users.noreply.github.com>2022-03-19 07:18:50 +0800
committerGitHub <noreply@github.com>2022-03-18 19:18:50 -0400
commitb01bc7faff5d9c034160fd41c507642c36b82b97 (patch)
treec87069c31f7a038c4a016d6d6f04ac015691f029
parentc98c9762943453c6abed100240944e530dfc0efd (diff)
fix(cli): improve `deno compile` error messages (#13944)
Co-authored-by: David Sherret <dsherret@gmail.com>
-rw-r--r--cli/tests/integration/compile_tests.rs30
-rw-r--r--cli/tools/standalone.rs27
2 files changed, 48 insertions, 9 deletions
diff --git a/cli/tests/integration/compile_tests.rs b/cli/tests/integration/compile_tests.rs
index fbe6ffcf5..a6cceb8a7 100644
--- a/cli/tests/integration/compile_tests.rs
+++ b/cli/tests/integration/compile_tests.rs
@@ -306,8 +306,14 @@ fn compile_with_file_exists_error() {
.wait_with_output()
.unwrap();
assert!(!output.status.success());
- let expected_stderr =
- format!("Could not compile: {:?} is a file.\n", &file_path);
+ let expected_stderr = format!(
+ concat!(
+ "Could not compile to file '{}' because its parent directory ",
+ "is an existing file. You can use the `--output <file-path>` flag to ",
+ "provide an alternative name.\n",
+ ),
+ file_path.display(),
+ );
let stderr = String::from_utf8(output.stderr).unwrap();
assert!(stderr.contains(&expected_stderr));
}
@@ -334,8 +340,14 @@ fn compile_with_directory_exists_error() {
.wait_with_output()
.unwrap();
assert!(!output.status.success());
- let expected_stderr =
- format!("Could not compile: {:?} is a directory.\n", &exe);
+ let expected_stderr = format!(
+ concat!(
+ "Could not compile to file '{}' because a directory exists with ",
+ "the same name. You can use the `--output <file-path>` flag to ",
+ "provide an alternative name."
+ ),
+ exe.display()
+ );
let stderr = String::from_utf8(output.stderr).unwrap();
assert!(stderr.contains(&expected_stderr));
}
@@ -363,8 +375,14 @@ fn compile_with_conflict_file_exists_error() {
.wait_with_output()
.unwrap();
assert!(!output.status.success());
- let expected_stderr =
- format!("Could not compile: cannot overwrite {:?}.\n", &exe);
+ let expected_stderr = format!(
+ concat!(
+ "Could not compile to file '{}' because the file already exists ",
+ "and cannot be overwritten. Please delete the existing file or ",
+ "use the `--output <file-path` flag to provide an alternative name."
+ ),
+ exe.display()
+ );
let stderr = String::from_utf8(output.stderr).unwrap();
dbg!(&stderr);
assert!(stderr.contains(&expected_stderr));
diff --git a/cli/tools/standalone.rs b/cli/tools/standalone.rs
index 8d574aec7..dc9ca4508 100644
--- a/cli/tools/standalone.rs
+++ b/cli/tools/standalone.rs
@@ -183,7 +183,14 @@ pub async fn write_standalone_binary(
if output.exists() {
// If the output is a directory, throw error
if output.is_dir() {
- bail!("Could not compile: {:?} is a directory.", &output);
+ bail!(
+ concat!(
+ "Could not compile to file '{}' because a directory exists with ",
+ "the same name. You can use the `--output <file-path>` flag to ",
+ "provide an alternative name."
+ ),
+ output.display()
+ );
}
// Make sure we don't overwrite any file not created by Deno compiler.
@@ -199,7 +206,14 @@ pub async fn write_standalone_binary(
has_trailer = magic_trailer == MAGIC_TRAILER;
}
if !has_trailer {
- bail!("Could not compile: cannot overwrite {:?}.", &output);
+ bail!(
+ concat!(
+ "Could not compile to file '{}' because the file already exists ",
+ "and cannot be overwritten. Please delete the existing file or ",
+ "use the `--output <file-path` flag to provide an alternative name."
+ ),
+ output.display()
+ );
}
// Remove file if it was indeed a deno compiled binary, to avoid corruption
@@ -208,7 +222,14 @@ pub async fn write_standalone_binary(
} else {
let output_base = &output.parent().unwrap();
if output_base.exists() && output_base.is_file() {
- bail!("Could not compile: {:?} is a file.", &output_base);
+ bail!(
+ concat!(
+ "Could not compile to file '{}' because its parent directory ",
+ "is an existing file. You can use the `--output <file-path>` flag to ",
+ "provide an alternative name.",
+ ),
+ output_base.display(),
+ );
}
tokio::fs::create_dir_all(output_base).await?;
}