@@ -233,7 +233,10 @@ pub async fn install(args: InstallOpts, install_mode: InstallMode) -> Result<()>
233233 toolchain_version. clone ( )
234234 }
235235 } else {
236- XtensaRust :: get_latest_version ( ) . await ?
236+ // Get the latest version of the Xtensa Rust toolchain. If that fails, return an error::GithubTokenInvalid
237+ XtensaRust :: get_latest_version ( )
238+ . await
239+ . map_err ( |_| Error :: GithubTokenInvalid ) ?
237240 } ;
238241 let toolchain_dir = get_rustup_home ( ) . join ( "toolchains" ) . join ( args. name ) ;
239242 let llvm: Llvm = Llvm :: new (
@@ -364,6 +367,7 @@ pub fn github_query(url: &str) -> Result<serde_json::Value, Error> {
364367 header:: ACCEPT ,
365368 "application/vnd.github+json" . parse ( ) . unwrap ( ) ,
366369 ) ;
370+
367371 headers. insert ( "X-GitHub-Api-Version" , "2022-11-28" . parse ( ) . unwrap ( ) ) ;
368372 if let Some ( token) = env:: var_os ( "GITHUB_TOKEN" ) {
369373 debug ! ( "Auth header added" ) ;
@@ -375,23 +379,27 @@ pub fn github_query(url: &str) -> Result<serde_json::Value, Error> {
375379 ) ;
376380 }
377381 let client = build_proxy_blocking_client ( ) ?;
378- let json = retry (
382+ let json: Result < serde_json :: Value , Error > = retry (
379383 Fixed :: from_millis ( 100 ) . take ( 5 ) ,
380384 || -> Result < serde_json:: Value , Error > {
381385 let res = client. get ( url) . headers ( headers. clone ( ) ) . send ( ) ?. text ( ) ?;
382386 if res. contains (
383387 "https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting" ,
384388 ) {
385- warn ! ( "GitHub rate limit exceeded" ) ;
386- return Err ( Error :: GithubQuery ) ;
389+ return Err ( Error :: GithubRateLimit ) ;
387390 }
391+
392+ if res. contains ( "Bad credentials" ) {
393+ return Err ( Error :: GithubTokenInvalid ) ;
394+ }
395+
388396 let json: serde_json:: Value =
389397 serde_json:: from_str ( & res) . map_err ( |_| Error :: SerializeJson ) ?;
390398 Ok ( json)
391399 } ,
392400 )
393- . unwrap ( ) ;
394- Ok ( json)
401+ . map_err ( |err| err . error ) ;
402+ json
395403}
396404
397405/// Checks if the directory exists and deletes it if it does.
0 commit comments