summaryrefslogtreecommitdiff
path: root/cli/npm/managed/resolvers
diff options
context:
space:
mode:
authorNathan Whitaker <17734409+nathanwhit@users.noreply.github.com>2024-06-06 14:21:25 -0700
committerGitHub <noreply@github.com>2024-06-06 21:21:25 +0000
commit47d19461a59cc7997f24987d8564e757683b8a5e (patch)
tree814753ce96999e37016b0ed74edfcf138e1fc5ec /cli/npm/managed/resolvers
parent0648f6d70dc79e986f6b3c5821a9ebb5f045cfc7 (diff)
fix(cli): Overwrite existing bin entries in `node_modules` (#24123)
Previously we warned on unix and didn't touch them on windows, now we unconditionally overwrite them. This matches what npm does.
Diffstat (limited to 'cli/npm/managed/resolvers')
-rw-r--r--cli/npm/managed/resolvers/local/bin_entries.rs37
1 files changed, 15 insertions, 22 deletions
diff --git a/cli/npm/managed/resolvers/local/bin_entries.rs b/cli/npm/managed/resolvers/local/bin_entries.rs
index 7890177ee..4a3c5ce4f 100644
--- a/cli/npm/managed/resolvers/local/bin_entries.rs
+++ b/cli/npm/managed/resolvers/local/bin_entries.rs
@@ -226,15 +226,6 @@ fn set_up_bin_shim(
cmd_shim.set_extension("cmd");
let shim = format!("@deno run -A npm:{}/{bin_name} %*", package.id.nv);
- if cmd_shim.exists() {
- if let Ok(contents) = fs::read_to_string(cmd_shim) {
- if contents == shim {
- // up to date
- return Ok(());
- }
- }
- return Ok(());
- }
fs::write(&cmd_shim, shim).with_context(|| {
format!("Can't set up '{}' bin at {}", bin_name, cmd_shim.display())
})?;
@@ -287,19 +278,21 @@ fn symlink_bin_entry(
if let Err(err) = symlink(&original_relative, &link) {
if err.kind() == io::ErrorKind::AlreadyExists {
- let resolved = std::fs::read_link(&link).ok();
- if let Some(resolved) = resolved {
- if resolved != original_relative {
- log::warn!(
- "{} Trying to set up '{}' bin for \"{}\", but an entry pointing to \"{}\" already exists. Skipping...",
- deno_terminal::colors::yellow("Warning"),
- bin_name,
- resolved.display(),
- original_relative.display()
- );
- }
- return Ok(());
- }
+ // remove and retry
+ std::fs::remove_file(&link).with_context(|| {
+ format!(
+ "Failed to remove existing bin symlink at {}",
+ link.display()
+ )
+ })?;
+ symlink(&original_relative, &link).with_context(|| {
+ format!(
+ "Can't set up '{}' bin at {}",
+ bin_name,
+ original_relative.display()
+ )
+ })?;
+ return Ok(());
}
return Err(err).with_context(|| {
format!(