Skip to content

Commit

Permalink
Merge pull request #1155 from JuliaLang/fix-unavailable-pr-channels
Browse files Browse the repository at this point in the history
Fix unavailable PR channels on Windows
  • Loading branch information
davidanthoff authored Jan 25, 2025
2 parents a839537 + d92002e commit a4935fc
Showing 1 changed file with 51 additions and 31 deletions.
82 changes: 51 additions & 31 deletions src/operations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1553,16 +1553,24 @@ pub fn update_version_db(paths: &GlobalPaths) -> Result<()> {
server_etag: _,
version,
} => {
new_config_file.data.installed_channels.insert(
channel,
JuliaupConfigChannel::DirectDownloadChannel {
path: path.clone(),
url: url.clone(),
local_etag: local_etag.clone(),
server_etag: etag,
version: version.clone(),
},
);
if let Some(etag) = etag {
new_config_file.data.installed_channels.insert(
channel,
JuliaupConfigChannel::DirectDownloadChannel {
path: path.clone(),
url: url.clone(),
local_etag: local_etag.clone(),
server_etag: etag,
version: version.clone(),
},
);
} else {
eprintln!(
"{} to update {}. This can happen if a build is no longer available.",
style("Failed").red().bold(),
channel
);
}
}
_ => {}
}
Expand Down Expand Up @@ -1615,7 +1623,9 @@ where
}

#[cfg(windows)]
fn download_direct_download_etags(config_data: &JuliaupConfig) -> Result<Vec<(String, String)>> {
fn download_direct_download_etags(
config_data: &JuliaupConfig,
) -> Result<Vec<(String, Option<String>)>> {
use windows::core::HSTRING;
use windows::Foundation::Uri;
use windows::Web::Http::HttpClient;
Expand Down Expand Up @@ -1653,16 +1663,20 @@ fn download_direct_download_etags(config_data: &JuliaupConfig) -> Result<Vec<(St
.get()
.map_err(|e| anyhow!("Failed to get response: {:?}", e))?;

let headers = response
.Headers()
.map_err(|e| anyhow!("Failed to get headers: {:?}", e))?;
if response.IsSuccessStatusCode()? {
let headers = response
.Headers()
.map_err(|e| anyhow!("Failed to get headers: {:?}", e))?;

let etag = headers
.Lookup(&HSTRING::from("ETag"))
.map_err(|e| anyhow!("ETag header not found: {:?}", e))?
.to_string();
let etag = headers
.Lookup(&HSTRING::from("ETag"))
.map_err(|e| anyhow!("ETag header not found: {:?}", e))?
.to_string();

Ok::<String, anyhow::Error>(etag)
return Ok::<Option<String>, anyhow::Error>(Some(etag));
} else {
return Ok::<Option<String>, anyhow::Error>(None);
}
},
3, // Timeout in seconds
&message,
Expand All @@ -1676,7 +1690,9 @@ fn download_direct_download_etags(config_data: &JuliaupConfig) -> Result<Vec<(St
}

#[cfg(not(windows))]
fn download_direct_download_etags(config_data: &JuliaupConfig) -> Result<Vec<(String, String)>> {
fn download_direct_download_etags(
config_data: &JuliaupConfig,
) -> Result<Vec<(String, Option<String>)>> {
use std::sync::Arc;

let client = Arc::new(reqwest::blocking::Client::new());
Expand All @@ -1700,17 +1716,21 @@ fn download_direct_download_etags(config_data: &JuliaupConfig) -> Result<Vec<(St
format!("Failed to send HEAD request to {}", &url_clone)
})?;

let etag = response
.headers()
.get("etag")
.ok_or_else(|| {
anyhow!("ETag header not found in response from {}", &url_clone)
})?
.to_str()
.map_err(|e| anyhow!("Failed to parse ETag header: {}", e))?
.to_string();

Ok::<String, anyhow::Error>(etag)
if response.status().is_success() {
let etag = response
.headers()
.get("etag")
.ok_or_else(|| {
anyhow!("ETag header not found in response from {}", &url_clone)
})?
.to_str()
.map_err(|e| anyhow!("Failed to parse ETag header: {}", e))?
.to_string();

return Ok::<Option<String>, anyhow::Error>(Some(etag));
} else {
return Ok::<Option<String>, anyhow::Error>(None);
}
},
3, // Timeout in seconds
&message,
Expand Down

0 comments on commit a4935fc

Please sign in to comment.