diff options
author | Nathan Whitaker <17734409+nathanwhit@users.noreply.github.com> | 2024-06-06 14:21:25 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-06-06 21:21:25 +0000 |
commit | 47d19461a59cc7997f24987d8564e757683b8a5e (patch) | |
tree | 814753ce96999e37016b0ed74edfcf138e1fc5ec /cli/npm/managed/resolvers | |
parent | 0648f6d70dc79e986f6b3c5821a9ebb5f045cfc7 (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.rs | 37 |
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!( |