From 49a7f00d419620f6e7b64855e4a2c7c1ac7d3f49 Mon Sep 17 00:00:00 2001 From: Camillo Schenone Date: Sat, 6 Apr 2024 03:14:14 +0200 Subject: [PATCH 1/3] fix: should prevent downloading and downgrading when version on a mirror is lower than the current one. --- src/command_selfupdate.rs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/command_selfupdate.rs b/src/command_selfupdate.rs index 659987ff..c283d10e 100644 --- a/src/command_selfupdate.rs +++ b/src/command_selfupdate.rs @@ -53,6 +53,11 @@ pub fn run_command_selfupdate(paths: &GlobalPaths) -> Result<()> { "Juliaup unchanged on channel '{}' - {}", juliaup_channel, version ); + } else if version < get_own_version().unwrap() { + eprintln!( + "Local Juliaup version is newer on channel '{}' - {}", + juliaup_channel, version + ); } else { let juliaup_target = get_juliaup_target(); From 65430a5f9a6e045bc7b147653ba1f965e326c8e5 Mon Sep 17 00:00:00 2001 From: Camillo Schenone Date: Mon, 15 Apr 2024 09:57:09 +0200 Subject: [PATCH 2/3] fix: changes to asking the user for input on downgrade to allow switching back from a preview version to the release version. --- src/command_selfupdate.rs | 80 +++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 37 deletions(-) diff --git a/src/command_selfupdate.rs b/src/command_selfupdate.rs index c283d10e..2186e99f 100644 --- a/src/command_selfupdate.rs +++ b/src/command_selfupdate.rs @@ -9,6 +9,8 @@ pub fn run_command_selfupdate(paths: &GlobalPaths) -> Result<()> { use crate::utils::get_juliaserver_base_url; use crate::{get_juliaup_target, get_own_version}; use anyhow::{anyhow, bail}; + use dialoguer::{theme::SimpleTheme, Confirm}; + use is_terminal::IsTerminal; update_version_db(paths).with_context(|| "Failed to update versions db.")?; @@ -33,7 +35,7 @@ pub fn run_command_selfupdate(paths: &GlobalPaths) -> Result<()> { ), }; - eprintln!("Checking for self-updates"); + eprintln!("Checking for self-updates on channel: {}", juliaup_channel); let version_url = juliaupserver_base.join(version_url_path).with_context(|| { format!( @@ -44,53 +46,57 @@ pub fn run_command_selfupdate(paths: &GlobalPaths) -> Result<()> { let version = download_juliaup_version(&version_url.to_string())?; + // TODO: how to deal with automatic background updates? + if version <= get_own_version().unwrap() && std::io::stdin().is_terminal() { + eprintln!( + "You are trying to install version: {}-{}, but the currently installed version is newer (or the same)", + juliaup_channel, version + ); + + match Confirm::with_theme(&SimpleTheme) + .with_prompt("Do you want to continue?") + .default(false) + .interact()? + { + true => {} + false => return Ok(()), + } + } + config_file.self_data.last_selfupdate = Some(chrono::Utc::now()); save_config_db(&mut config_file).with_context(|| "Failed to save configuration file.")?; - if version == get_own_version().unwrap() { - eprintln!( - "Juliaup unchanged on channel '{}' - {}", - juliaup_channel, version - ); - } else if version < get_own_version().unwrap() { - eprintln!( - "Local Juliaup version is newer on channel '{}' - {}", - juliaup_channel, version - ); - } else { - let juliaup_target = get_juliaup_target(); + let juliaup_target = get_juliaup_target(); - let juliaupserver_base = - get_juliaserver_base_url().with_context(|| "Failed to get Juliaup server base URL.")?; + let juliaupserver_base = + get_juliaserver_base_url().with_context(|| "Failed to get Juliaup server base URL.")?; - let download_url_path = - format!("juliaup/bin/juliaup-{}-{}.tar.gz", version, juliaup_target); + let download_url_path = format!("juliaup/bin/juliaup-{}-{}.tar.gz", version, juliaup_target); - let new_juliaup_url = juliaupserver_base - .join(&download_url_path) - .with_context(|| { - format!( - "Failed to construct a valid url from '{}' and '{}'.", - juliaupserver_base, download_url_path - ) - })?; + let new_juliaup_url = juliaupserver_base + .join(&download_url_path) + .with_context(|| { + format!( + "Failed to construct a valid url from '{}' and '{}'.", + juliaupserver_base, download_url_path + ) + })?; - let my_own_path = std::env::current_exe() - .with_context(|| "Could not determine the path of the running exe.")?; + let my_own_path = std::env::current_exe() + .with_context(|| "Could not determine the path of the running exe.")?; - let my_own_folder = my_own_path - .parent() - .ok_or_else(|| anyhow!("Could not determine parent."))?; + let my_own_folder = my_own_path + .parent() + .ok_or_else(|| anyhow!("Could not determine parent."))?; - eprintln!( - "Found new version {} on channel {}.", - version, juliaup_channel - ); + eprintln!( + "Found new version {} on channel {}.", + version, juliaup_channel + ); - download_extract_sans_parent(&new_juliaup_url.to_string(), &my_own_folder, 0)?; - eprintln!("Updated Juliaup to version {}.", version); - } + download_extract_sans_parent(&new_juliaup_url.to_string(), &my_own_folder, 0)?; + eprintln!("Updated Juliaup to version {}.", version); Ok(()) } From 9bbaf9663c40e4f0914fe1b12f05d13cc11cdbef Mon Sep 17 00:00:00 2001 From: Camillo Schenone Date: Tue, 16 Apr 2024 12:19:40 +0200 Subject: [PATCH 3/3] fix: avoid downgrade in non-interactive mode fix: reinstalling same version is not counted as downgrading. --- src/command_selfupdate.rs | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/src/command_selfupdate.rs b/src/command_selfupdate.rs index 2186e99f..ac8a7aa5 100644 --- a/src/command_selfupdate.rs +++ b/src/command_selfupdate.rs @@ -46,19 +46,22 @@ pub fn run_command_selfupdate(paths: &GlobalPaths) -> Result<()> { let version = download_juliaup_version(&version_url.to_string())?; - // TODO: how to deal with automatic background updates? - if version <= get_own_version().unwrap() && std::io::stdin().is_terminal() { - eprintln!( - "You are trying to install version: {}-{}, but the currently installed version is newer (or the same)", - juliaup_channel, version - ); + if version < get_own_version().unwrap() { + // If not in iteractive mode, avoid downgrading automatically + if !std::io::stdin().is_terminal() { + return Ok(()); + } + eprintln!( + "You are trying to install version: {}-{}, but the currently installed version is newer", + juliaup_channel, version + ); match Confirm::with_theme(&SimpleTheme) .with_prompt("Do you want to continue?") .default(false) .interact()? { - true => {} + true => {} // continue false => return Ok(()), } }