diff options
Diffstat (limited to 'cli')
-rw-r--r-- | cli/tests/integration/init_tests.rs | 41 | ||||
-rw-r--r-- | cli/tools/init/mod.rs | 23 |
2 files changed, 57 insertions, 7 deletions
diff --git a/cli/tests/integration/init_tests.rs b/cli/tests/integration/init_tests.rs index be7c26efc..e57366fb4 100644 --- a/cli/tests/integration/init_tests.rs +++ b/cli/tests/integration/init_tests.rs @@ -128,3 +128,44 @@ fn init_subcommand_with_quiet_arg() { assert_contains!(output.stdout(), "1 passed"); output.skip_output_check(); } + +#[test] +fn init_subcommand_with_existing_file() { + let context = TestContextBuilder::new().use_temp_cwd().build(); + let cwd = context.temp_dir().path(); + + cwd + .join("main.ts") + .write("console.log('Log from main.ts that already exists');"); + + let output = context.new_command().args("init").split_output().run(); + + output.assert_exit_code(0); + output.assert_stderr_matches_text( + "ℹ️ Skipped creating main.ts as it already exists +✅ Project initialized + +Run these commands to get started + + # Run the program + deno run main.ts + + # Run the program and watch for file changes + deno task dev + + # Run the tests + deno test +", + ); + + assert!(cwd.join("deno.json").exists()); + + let output = context + .new_command() + .env("NO_COLOR", "1") + .args("run main.ts") + .run(); + + output.assert_exit_code(0); + output.assert_matches_text("Log from main.ts that already exists\n"); +} diff --git a/cli/tools/init/mod.rs b/cli/tools/init/mod.rs index f0da86006..9e46359c0 100644 --- a/cli/tools/init/mod.rs +++ b/cli/tools/init/mod.rs @@ -14,13 +14,22 @@ fn create_file( filename: &str, content: &str, ) -> Result<(), AnyError> { - let mut file = std::fs::OpenOptions::new() - .write(true) - .create_new(true) - .open(dir.join(filename)) - .with_context(|| format!("Failed to create {filename} file"))?; - file.write_all(content.as_bytes())?; - Ok(()) + let path = dir.join(filename); + if path.exists() { + info!( + "ℹ️ {}", + colors::gray(format!("Skipped creating {filename} as it already exists")) + ); + Ok(()) + } else { + let mut file = std::fs::OpenOptions::new() + .write(true) + .create_new(true) + .open(path) + .with_context(|| format!("Failed to create {filename} file"))?; + file.write_all(content.as_bytes())?; + Ok(()) + } } pub async fn init_project(init_flags: InitFlags) -> Result<(), AnyError> { |