@@ -68,13 +68,10 @@ def bootstrap(self, force=False):
68
68
help = 'Use stable rustc version' )
69
69
def bootstrap_rustc (self , force = False , target = [], stable = False ):
70
70
self .set_use_stable_rust (stable )
71
- version = self .rust_version ()
72
- rust_path = self .rust_path ()
73
- rust_dir = path .join (self .context .sharedir , "rust" , rust_path )
74
- install_dir = path .join (self .context .sharedir , "rust" , version )
75
- if not self .config ["build" ]["llvm-assertions" ]:
76
- if not self .use_stable_rust ():
77
- install_dir += "-alt"
71
+ rust_dir = path .join (self .context .sharedir , "rust" , self .rust_path ())
72
+ install_dir = path .join (self .context .sharedir , "rust" , self .rust_install_dir ())
73
+ version = self .rust_stable_version () if stable else "nightly"
74
+ static_s3 = "https://static-rust-lang-org.s3.amazonaws.com/dist"
78
75
79
76
if not force and path .exists (path .join (rust_dir , "rustc" , "bin" , "rustc" + BIN_SUFFIX )):
80
77
print ("Rust compiler already downloaded." , end = " " )
@@ -90,16 +87,23 @@ def bootstrap_rustc(self, force=False, target=[], stable=False):
90
87
91
88
92
89
if stable :
93
- tarball = "rustc-%s-%s.tar.gz" % (version , host_triple ())
94
- rustc_url = "https://static-rust-lang-org.s3.amazonaws.com/dist/" + tarball
90
+ base_url = static_s3
95
91
else :
96
- tarball = "%s/rustc-nightly-%s.tar.gz" % (version , host_triple ())
92
+ import toml
93
+ import re
94
+ channel = "%s/%s/channel-rust-nightly.toml" % (static_s3 , self .rust_nightly_date ())
95
+ version_string = toml .load (urllib2 .urlopen (channel ))["pkg" ]["rustc" ]["version" ]
96
+ short_commit = re .search ("\(([0-9a-f]+) " , version_string ).group (1 )
97
+ commit_api = "https://api.github.com/repos/rust-lang/rust/commits/" + short_commit
98
+ nightly_commit_hash = json .load (urllib2 .urlopen (commit_api ))["sha" ]
99
+
97
100
base_url = "https://s3.amazonaws.com/rust-lang-ci/rustc-builds"
98
101
if not self .config ["build" ]["llvm-assertions" ]:
99
102
base_url += "-alt"
100
- rustc_url = base_url + "/" + tarball
101
- tgz_file = rust_dir + '-rustc.tar.gz'
103
+ base_url += "/" + nightly_commit_hash
102
104
105
+ rustc_url = base_url + "/rustc-%s-%s.tar.gz" % (version , host_triple ())
106
+ tgz_file = rust_dir + '-rustc.tar.gz'
103
107
download_file ("Rust compiler" , rustc_url , tgz_file )
104
108
105
109
print ("Extracting Rust compiler..." )
@@ -111,10 +115,8 @@ def bootstrap_rustc(self, force=False, target=[], stable=False):
111
115
112
116
113
117
114
- nightly_suffix = "" if stable else "-nightly"
115
- stable_version = "-{}" .format (version ) if stable else ""
116
118
lib_dir = path .join (install_dir ,
117
- "rustc{}{}-{}" . format ( nightly_suffix , stable_version , host_triple ()),
119
+ "rustc-%s-%s" % ( version , host_triple ()),
118
120
"rustc" , "lib" , "rustlib" )
119
121
120
122
@@ -130,26 +132,25 @@ def bootstrap_rustc(self, force=False, target=[], stable=False):
130
132
print ("Use |bootstrap-rust --force| to download again." )
131
133
continue
132
134
135
+ tarball = "rust-std-%s-%s.tar.gz" % (version , target_triple )
136
+ tgz_file = path .join (install_dir , tarball )
133
137
if self .use_stable_rust ():
134
- std_url = ("https://static-rust-lang-org.s3.amazonaws.com/dist/rust-std-%s-%s.tar.gz"
135
- % (version , target_triple ))
136
- tgz_file = install_dir + ('rust-std-%s-%s.tar.gz' % (version , target_triple ))
138
+ std_url = static_s3 + "/" + tarball
137
139
else :
138
- std_url = ("https://s3.amazonaws.com/rust-lang-ci/rustc-builds/%s/rust-std-nightly-%s.tar.gz"
139
- % (version , target_triple ))
140
- tgz_file = install_dir + ('rust-std-nightly-%s.tar.gz' % target_triple )
140
+ std_url = static_s3 + "/" + self .rust_nightly_date () + "/" + tarball
141
141
142
142
download_file ("Host rust library for target %s" % target_triple , std_url , tgz_file )
143
143
print ("Extracting Rust stdlib for target %s..." % target_triple )
144
144
extract (tgz_file , install_dir )
145
145
shutil .copytree (path .join (install_dir ,
146
- "rust-std%s%s-%s" % (nightly_suffix , stable_version , target_triple ),
147
- "rust-std-%s" % target_triple , "lib" , "rustlib" , target_triple ),
146
+ "rust-std-%s-%s" % (version , target_triple ),
147
+ "rust-std-%s" % target_triple ,
148
+ "lib" , "rustlib" , target_triple ),
148
149
path .join (install_dir ,
149
- "rustc%s%s -%s" % (nightly_suffix , stable_version , host_triple ()),
150
- "rustc" , "lib" , "rustlib" , target_triple ))
151
- shutil . rmtree ( path . join ( install_dir ,
152
- "rust-std%s%s -%s" % (nightly_suffix , stable_version , target_triple )))
150
+ "rustc-%s -%s" % (version , host_triple ()),
151
+ "rustc" ,
152
+ "lib" , "rustlib" , target_triple ))
153
+ shutil . rmtree ( path . join ( install_dir , "rust-std-%s -%s" % (version , target_triple )))
153
154
154
155
print ("Rust {} libs ready." .format (target_triple ))
155
156
@@ -171,8 +172,8 @@ def bootstrap_rustc_docs(self, force=False):
171
172
if path .isdir (docs_dir ):
172
173
shutil .rmtree (docs_dir )
173
174
docs_name = self .rust_path ().replace ("rustc-" , "rust-docs-" )
174
- docs_url = ("https://static-rust-lang-org.s3.amazonaws.com/dist/rust-docs-nightly-%s.tar.gz"
175
- % host_triple ())
175
+ docs_url = ("https://static-rust-lang-org.s3.amazonaws.com/dist/%s/ rust-docs-nightly-%s.tar.gz"
176
+ % ( self . rust_nightly_date (), host_triple () ))
176
177
tgz_file = path .join (rust_root , 'doc.tar.gz' )
177
178
178
179
download_file ("Rust docs" , docs_url , tgz_file )
@@ -195,8 +196,7 @@ def bootstrap_rustc_docs(self, force=False):
195
196
action = 'store_true' ,
196
197
help = 'Force download even if cargo already exists' )
197
198
def bootstrap_cargo (self , force = False ):
198
- cargo_dir = path .join (self .context .sharedir , "cargo" ,
199
- self .cargo_build_id ())
199
+ cargo_dir = path .join (self .context .sharedir , "cargo" , self .rust_nightly_date ())
200
200
if not force and path .exists (path .join (cargo_dir , "cargo" , "bin" , "cargo" + BIN_SUFFIX )):
201
201
print ("Cargo already downloaded." , end = " " )
202
202
print ("Use |bootstrap-cargo --force| to download again." )
@@ -207,8 +207,8 @@ def bootstrap_cargo(self, force=False):
207
207
os .makedirs (cargo_dir )
208
208
209
209
tgz_file = "cargo-nightly-%s.tar.gz" % host_triple ()
210
- nightly_url = "https://s3.amazonaws.com/rust-lang-ci/rustc-builds /%s/%s" % \
211
- (self .cargo_build_id ()[ len ( "rust-" ):] , tgz_file )
210
+ nightly_url = "https://static-rust-lang-org. s3.amazonaws.com/dist /%s/%s" % \
211
+ (self .rust_nightly_date () , tgz_file )
212
212
213
213
download_file ("Cargo nightly" , nightly_url , tgz_file )
214
214
@@ -291,10 +291,8 @@ def bootstrap_pub_suffix(self, force=False):
291
291
default = '1' ,
292
292
help = 'Keep up to this many most recent nightlies' )
293
293
def clean_nightlies (self , force = False , keep = None ):
294
- self .set_use_stable_rust (False )
295
- rust_current_nightly = self .rust_version ()
296
- self .set_use_stable_rust (True )
297
- rust_current_stable = self .rust_version ()
294
+ rust_current_nightly = self .rust_nightly_date ()
295
+ rust_current_stable = self .rust_stable_version ()
298
296
print ("Current Rust nightly version: {}" .format (rust_current_nightly ))
299
297
print ("Current Rust stable version: {}" .format (rust_current_stable ))
300
298
to_keep = set ()
@@ -303,7 +301,7 @@ def clean_nightlies(self, force=False, keep=None):
303
301
to_keep .add (rust_current_nightly )
304
302
to_keep .add (rust_current_stable )
305
303
else :
306
- for version_file in ['rust-commit-hash ' , 'rust-stable-version' ]:
304
+ for version_file in ['rust-toolchain ' , 'rust-stable-version' ]:
307
305
cmd = subprocess .Popen (
308
306
['git' , 'log' , '--oneline' , '--no-color' , '-n' , keep , '--patch' , version_file ],
309
307
stdout = subprocess .PIPE ,
0 commit comments