diff options
| author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2021-12-21 15:49:27 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-12-21 15:49:27 +0100 |
| commit | 907cef563ec83fb5e8b95aeddbb54b5ebbf38746 (patch) | |
| tree | 7695484aa68ee73071229122fa4219321e29a0c1 /cli/tools/upgrade.rs | |
| parent | 9825c876b466cf69a8ddd1646ba7fedecd54ba51 (diff) | |
refactor: cleanup cli/main.rs (#13160)
Diffstat (limited to 'cli/tools/upgrade.rs')
| -rw-r--r-- | cli/tools/upgrade.rs | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/cli/tools/upgrade.rs b/cli/tools/upgrade.rs index b0fddc39c..49c8d7423 100644 --- a/cli/tools/upgrade.rs +++ b/cli/tools/upgrade.rs @@ -2,6 +2,7 @@ //! This module provides feature to upgrade deno executable +use crate::flags::UpgradeFlags; use deno_core::anyhow::bail; use deno_core::error::AnyError; use deno_core::futures::StreamExt; @@ -21,18 +22,11 @@ static ARCHIVE_NAME: Lazy<String> = const RELEASE_URL: &str = "https://github.com/denoland/deno/releases"; -pub async fn upgrade_command( - dry_run: bool, - force: bool, - canary: bool, - version: Option<String>, - output: Option<PathBuf>, - ca_file: Option<String>, -) -> Result<(), AnyError> { +pub async fn upgrade(upgrade_flags: UpgradeFlags) -> Result<(), AnyError> { let mut client_builder = Client::builder(); // If we have been provided a CA Certificate, add it into the HTTP client - if let Some(ca_file) = ca_file { + if let Some(ca_file) = upgrade_flags.ca_file { let buf = std::fs::read(ca_file)?; let cert = reqwest::Certificate::from_pem(&buf)?; client_builder = client_builder.add_root_certificate(cert); @@ -40,17 +34,18 @@ pub async fn upgrade_command( let client = client_builder.build()?; - let install_version = match version { + let install_version = match upgrade_flags.version { Some(passed_version) => { - if canary + if upgrade_flags.canary && !regex::Regex::new("^[0-9a-f]{40}$")?.is_match(&passed_version) { bail!("Invalid commit hash passed"); - } else if !canary && semver_parse(&passed_version).is_err() { + } else if !upgrade_flags.canary && semver_parse(&passed_version).is_err() + { bail!("Invalid semver passed"); } - let current_is_passed = if canary { + let current_is_passed = if upgrade_flags.canary { crate::version::GIT_COMMIT_HASH == passed_version } else if !crate::version::is_canary() { crate::version::deno() == passed_version @@ -58,7 +53,10 @@ pub async fn upgrade_command( false }; - if !force && output.is_none() && current_is_passed { + if !upgrade_flags.force + && upgrade_flags.output.is_none() + && current_is_passed + { println!("Version {} is already installed", crate::version::deno()); return Ok(()); } else { @@ -66,13 +64,13 @@ pub async fn upgrade_command( } } None => { - let latest_version = if canary { + let latest_version = if upgrade_flags.canary { get_latest_canary_version(&client).await? } else { get_latest_release_version(&client).await? }; - let current_is_most_recent = if canary { + let current_is_most_recent = if upgrade_flags.canary { let mut latest_hash = latest_version.clone(); latest_hash.truncate(7); crate::version::GIT_COMMIT_HASH == latest_hash @@ -84,7 +82,10 @@ pub async fn upgrade_command( false }; - if !force && output.is_none() && current_is_most_recent { + if !upgrade_flags.force + && upgrade_flags.output.is_none() + && current_is_most_recent + { println!( "Local deno version {} is the most recent release", crate::version::deno() @@ -97,7 +98,7 @@ pub async fn upgrade_command( } }; - let download_url = if canary { + let download_url = if upgrade_flags.canary { format!( "https://dl.deno.land/canary/{}/{}", install_version, *ARCHIVE_NAME @@ -119,8 +120,8 @@ pub async fn upgrade_command( fs::set_permissions(&new_exe_path, permissions)?; check_exe(&new_exe_path)?; - if !dry_run { - match output { + if !upgrade_flags.dry_run { + match upgrade_flags.output { Some(path) => { fs::rename(&new_exe_path, &path) .or_else(|_| fs::copy(&new_exe_path, &path).map(|_| ()))?; |
