Handle new active_release_dir, even if semver already downloaded (#5431)

This commit is contained in:
Tyera Eulberg 2019-08-06 12:58:50 -06:00 committed by GitHub
parent 572e942413
commit 72e9492ca6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 20 additions and 16 deletions

View File

@ -717,36 +717,40 @@ pub fn update(config_file: &str) -> Result<bool, String> {
let update_manifest = info(config_file, false)?; let update_manifest = info(config_file, false)?;
let release_dir = if let Some(explicit_release) = &config.explicit_release { let release_dir = if let Some(explicit_release) = &config.explicit_release {
let (download_url, release_dir) = match explicit_release { let (download, release_dir) = match explicit_release {
ExplicitRelease::Semver(release_semver) => { ExplicitRelease::Semver(release_semver) => {
let download_url = github_release_download_url(release_semver); let download_url = github_release_download_url(release_semver);
let release_dir = config.release_dir(&release_semver); let release_dir = config.release_dir(&release_semver);
if release_dir.join(".ok").exists() { let download = if release_dir.join(".ok").exists() {
// If this release_semver has already been successfully downloaded, no update // If this release_semver has already been successfully downloaded, no update
// needed // needed
return Ok(false); None
} } else {
(download_url, release_dir) Some(download_url)
};
(download, release_dir)
} }
ExplicitRelease::Channel(release_channel) => { ExplicitRelease::Channel(release_channel) => {
let download_url = release_channel_download_url(release_channel); let download_url = release_channel_download_url(release_channel);
let release_dir = config.release_dir(&release_channel); let release_dir = config.release_dir(&release_channel);
// Note: There's currently no mechanism to check for an updated binary for a release // Note: There's currently no mechanism to check for an updated binary for a release
// channel so a download always occurs. // channel so a download always occurs.
(download_url, release_dir) (Some(download_url), release_dir)
} }
}; };
let (_temp_dir, temp_archive, _temp_archive_sha256) = if let Some(download_url) = download {
download_to_temp_archive(&download_url, None) let (_temp_dir, temp_archive, _temp_archive_sha256) =
.map_err(|err| format!("Unable to download {}: {}", download_url, err))?; download_to_temp_archive(&download_url, None)
extract_release_archive(&temp_archive, &release_dir).map_err(|err| { .map_err(|err| format!("Unable to download {}: {}", download_url, err))?;
format!( extract_release_archive(&temp_archive, &release_dir).map_err(|err| {
"Unable to extract {:?} to {:?}: {}", format!(
temp_archive, release_dir, err "Unable to extract {:?} to {:?}: {}",
) temp_archive, release_dir, err
})?; )
let _ = fs::create_dir_all(release_dir.join(".ok")); })?;
let _ = fs::create_dir_all(release_dir.join(".ok"));
}
release_dir release_dir
} else { } else {