diff options
author | Bartek IwaĆczuk <biwanczuk@gmail.com> | 2024-08-18 23:29:59 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-19 00:29:59 +0200 |
commit | f003d6498ca36d80d98c870b73fbaa8ad1b31531 (patch) | |
tree | a19b55a3ac99c647ddca277346594a3de6fc815a /cli/tools/upgrade.rs | |
parent | 2e9d3b688ce8bd08cfcf4b0125adb98d1c4feb4a (diff) |
fix(upgrade): correctly compute latest version based on current release channel (#25087)
This commit fixes computation of the latest available version
by taking into account which release channel the current
binary is on.
Before this commit, if user was on "RC" channel, calling
`deno upgrade` would not switch back to the "stable"
channel.
Diffstat (limited to 'cli/tools/upgrade.rs')
-rw-r--r-- | cli/tools/upgrade.rs | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/cli/tools/upgrade.rs b/cli/tools/upgrade.rs index 4a3b97de1..844d7b677 100644 --- a/cli/tools/upgrade.rs +++ b/cli/tools/upgrade.rs @@ -543,6 +543,7 @@ pub async fn upgrade( Ok(()) } +#[derive(Debug)] enum RequestedVersion { Latest(ReleaseChannel), SpecificVersion(ReleaseChannel, String), @@ -662,24 +663,45 @@ async fn find_latest_version_to_upgrade( .await?; let (maybe_newer_latest_version, current_version) = match release_channel { - ReleaseChannel::Stable | ReleaseChannel::Rc => { + ReleaseChannel::Stable => { let current_version = version::DENO_VERSION_INFO.deno; - let current_is_most_recent = if version::DENO_VERSION_INFO.release_channel - != ReleaseChannel::Canary - { + + // If the current binary is not a stable channel, we can skip + // computation if we're on a newer release - we're not. + if version::DENO_VERSION_INFO.release_channel != ReleaseChannel::Stable { + (Some(latest_version_found), current_version) + } else { let current = Version::parse_standard(current_version).unwrap(); let latest = Version::parse_standard(&latest_version_found.version_or_hash) .unwrap(); - current >= latest - } else { - false - }; + let current_is_most_recent = current >= latest; - if !force && current_is_most_recent { - (None, current_version) - } else { + if !force && current_is_most_recent { + (None, current_version) + } else { + (Some(latest_version_found), current_version) + } + } + } + ReleaseChannel::Rc => { + let current_version = version::DENO_VERSION_INFO.deno; + + // If the current binary is not an rc channel, we can skip + // computation if we're on a newer release - we're not. + if version::DENO_VERSION_INFO.release_channel != ReleaseChannel::Rc { (Some(latest_version_found), current_version) + } else { + let current = Version::parse_standard(current_version).unwrap(); + let latest = + Version::parse_standard(&latest_version_found.version_or_hash) + .unwrap(); + let current_is_most_recent = current >= latest; + if !force && current_is_most_recent { + (None, current_version) + } else { + (Some(latest_version_found), current_version) + } } } ReleaseChannel::Canary => { |