summaryrefslogtreecommitdiff
path: root/cli/tools/upgrade.rs
diff options
context:
space:
mode:
authormlemesle <33993288+mlemesle@users.noreply.github.com>2022-02-23 22:11:46 +0100
committerGitHub <noreply@github.com>2022-02-23 16:11:46 -0500
commitf8b73ab97e90f5e4313b0e725fe14d1ee0df01b4 (patch)
treebd6e375d81ae2316e194a712ef7eb64e7e1e3678 /cli/tools/upgrade.rs
parent973fe6dd3a01f518b5f8f2a766fae23b24dfdcac (diff)
fix(upgrade): move the file permission check to the beginning of the upgrade process (#13726)
Diffstat (limited to 'cli/tools/upgrade.rs')
-rw-r--r--cli/tools/upgrade.rs9
1 files changed, 7 insertions, 2 deletions
diff --git a/cli/tools/upgrade.rs b/cli/tools/upgrade.rs
index e9bafd9be..e82d51a6e 100644
--- a/cli/tools/upgrade.rs
+++ b/cli/tools/upgrade.rs
@@ -23,6 +23,13 @@ static ARCHIVE_NAME: Lazy<String> =
const RELEASE_URL: &str = "https://github.com/denoland/deno/releases";
pub async fn upgrade(upgrade_flags: UpgradeFlags) -> Result<(), AnyError> {
+ let old_exe_path = std::env::current_exe()?;
+ let permissions = fs::metadata(&old_exe_path)?.permissions();
+
+ if permissions.readonly() {
+ bail!("You do not have write permission to {:?}", old_exe_path);
+ }
+
let mut client_builder = Client::builder();
// If we have been provided a CA Certificate, add it into the HTTP client
@@ -114,9 +121,7 @@ pub async fn upgrade(upgrade_flags: UpgradeFlags) -> Result<(), AnyError> {
println!("Deno is upgrading to version {}", &install_version);
- let old_exe_path = std::env::current_exe()?;
let new_exe_path = unpack(archive_data, cfg!(windows))?;
- let permissions = fs::metadata(&old_exe_path)?.permissions();
fs::set_permissions(&new_exe_path, permissions)?;
check_exe(&new_exe_path)?;