summaryrefslogtreecommitdiff
path: root/cli/tools/upgrade.rs
diff options
context:
space:
mode:
authorBartek IwaƄczuk <biwanczuk@gmail.com>2021-12-21 15:49:27 +0100
committerGitHub <noreply@github.com>2021-12-21 15:49:27 +0100
commit907cef563ec83fb5e8b95aeddbb54b5ebbf38746 (patch)
tree7695484aa68ee73071229122fa4219321e29a0c1 /cli/tools/upgrade.rs
parent9825c876b466cf69a8ddd1646ba7fedecd54ba51 (diff)
refactor: cleanup cli/main.rs (#13160)
Diffstat (limited to 'cli/tools/upgrade.rs')
-rw-r--r--cli/tools/upgrade.rs41
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(|_| ()))?;