@@ -94,17 +94,18 @@ impl fmt::Display for ModuleVariant {
94
94
}
95
95
96
96
impl ModuleVariant {
97
- fn url ( & self , sysroot : & SysrootDownload , triple : & str ) -> String {
97
+ fn url ( & self , channel : & str , sysroot : & SysrootDownload , triple : & str ) -> String {
98
98
let suffix = if * self == ModuleVariant :: RustSrc {
99
99
String :: new ( )
100
100
} else {
101
101
format ! ( "-{}" , triple)
102
102
} ;
103
103
format ! (
104
- "{base}/{sha}/{module}-nightly {suffix}.tar.xz" ,
104
+ "{base}/{sha}/{module}-{channel} {suffix}.tar.xz" ,
105
105
base = BASE_URL ,
106
106
module = self ,
107
107
sha = sysroot. rust_sha,
108
+ channel = channel,
108
109
suffix = suffix,
109
110
)
110
111
}
@@ -151,26 +152,34 @@ impl SysrootDownload {
151
152
}
152
153
}
153
154
154
- let url = variant. url ( self , & self . triple ) ;
155
- log:: debug!( "requesting: {}" , url) ;
156
- let resp = reqwest:: blocking:: get ( & url) ?;
157
- log:: debug!( "{}" , resp. status( ) ) ;
158
- if resp. status ( ) . is_success ( ) {
159
- let reader = XzDecoder :: new ( BufReader :: new ( resp) ) ;
160
- match self . extract ( variant, reader) {
161
- Ok ( ( ) ) => return Ok ( ( ) ) ,
162
- Err ( err) => {
163
- log:: warn!( "extracting {} failed: {:?}" , url, err) ;
155
+ // We usually have nightlies but we want to avoid breaking down if we
156
+ // accidentally end up with a beta or stable commit.
157
+ let urls = [
158
+ variant. url ( "nightly" , self , & self . triple ) ,
159
+ variant. url ( "beta" , self , & self . triple ) ,
160
+ variant. url ( "stable" , self , & self . triple ) ,
161
+ ] ;
162
+ for url in & urls {
163
+ log:: debug!( "requesting: {}" , url) ;
164
+ let resp = reqwest:: blocking:: get ( url) ?;
165
+ log:: debug!( "{}" , resp. status( ) ) ;
166
+ if resp. status ( ) . is_success ( ) {
167
+ let reader = XzDecoder :: new ( BufReader :: new ( resp) ) ;
168
+ match self . extract ( variant, reader) {
169
+ Ok ( ( ) ) => return Ok ( ( ) ) ,
170
+ Err ( err) => {
171
+ log:: warn!( "extracting {} failed: {:?}" , url, err) ;
172
+ }
164
173
}
165
174
}
166
175
}
167
176
168
177
return Err ( anyhow ! (
169
- "unable to download sha {} triple {} module {} from { }" ,
178
+ "unable to download sha {} triple {} module {} from any of {:? }" ,
170
179
self . rust_sha,
171
180
self . triple,
172
181
variant,
173
- url
182
+ urls
174
183
) ) ;
175
184
}
176
185
0 commit comments