bootstrap.py fetches rustfmt.
Co-Authored-By: Mark Rousskov <mark.simulacrum@gmail.com>
This commit is contained in:
parent
8369a1a31a
commit
72a844dee7
@ -322,6 +322,7 @@ class RustBuild(object):
|
||||
self.date = ''
|
||||
self._download_url = ''
|
||||
self.rustc_channel = ''
|
||||
self.rustfmt_channel = ''
|
||||
self.build = ''
|
||||
self.build_dir = os.path.join(os.getcwd(), "build")
|
||||
self.clean = False
|
||||
@ -344,6 +345,7 @@ class RustBuild(object):
|
||||
"""
|
||||
rustc_channel = self.rustc_channel
|
||||
cargo_channel = self.cargo_channel
|
||||
rustfmt_channel = self.rustfmt_channel
|
||||
|
||||
def support_xz():
|
||||
try:
|
||||
@ -393,13 +395,29 @@ class RustBuild(object):
|
||||
with output(self.cargo_stamp()) as cargo_stamp:
|
||||
cargo_stamp.write(self.date)
|
||||
|
||||
def _download_stage0_helper(self, filename, pattern, tarball_suffix):
|
||||
if self.rustfmt() and self.rustfmt().startswith(self.bin_root()) and (
|
||||
not os.path.exists(self.rustfmt())
|
||||
or self.program_out_of_date(self.rustfmt_stamp())
|
||||
):
|
||||
if rustfmt_channel:
|
||||
tarball_suffix = '.tar.xz' if support_xz() else '.tar.gz'
|
||||
[channel, date] = rustfmt_channel.split('-', 1)
|
||||
filename = "rustfmt-{}-{}{}".format(channel, self.build, tarball_suffix)
|
||||
self._download_stage0_helper(filename, "rustfmt-preview", tarball_suffix, date)
|
||||
self.fix_executable("{}/bin/rustfmt".format(self.bin_root()))
|
||||
self.fix_executable("{}/bin/cargo-fmt".format(self.bin_root()))
|
||||
with output(self.rustfmt_stamp()) as rustfmt_stamp:
|
||||
rustfmt_stamp.write(self.date)
|
||||
|
||||
def _download_stage0_helper(self, filename, pattern, tarball_suffix, date=None):
|
||||
if date is None:
|
||||
date = self.date
|
||||
cache_dst = os.path.join(self.build_dir, "cache")
|
||||
rustc_cache = os.path.join(cache_dst, self.date)
|
||||
rustc_cache = os.path.join(cache_dst, date)
|
||||
if not os.path.exists(rustc_cache):
|
||||
os.makedirs(rustc_cache)
|
||||
|
||||
url = "{}/dist/{}".format(self._download_url, self.date)
|
||||
url = "{}/dist/{}".format(self._download_url, date)
|
||||
tarball = os.path.join(rustc_cache, filename)
|
||||
if not os.path.exists(tarball):
|
||||
get("{}/{}".format(url, filename), tarball, verbose=self.verbose)
|
||||
@ -493,6 +511,16 @@ class RustBuild(object):
|
||||
"""
|
||||
return os.path.join(self.bin_root(), '.cargo-stamp')
|
||||
|
||||
def rustfmt_stamp(self):
|
||||
"""Return the path for .rustfmt-stamp
|
||||
|
||||
>>> rb = RustBuild()
|
||||
>>> rb.build_dir = "build"
|
||||
>>> rb.rustfmt_stamp() == os.path.join("build", "stage0", ".rustfmt-stamp")
|
||||
True
|
||||
"""
|
||||
return os.path.join(self.bin_root(), '.rustfmt-stamp')
|
||||
|
||||
def program_out_of_date(self, stamp_path):
|
||||
"""Check if the given program stamp is out of date"""
|
||||
if not os.path.exists(stamp_path) or self.clean:
|
||||
@ -565,6 +593,12 @@ class RustBuild(object):
|
||||
"""Return config path for rustc"""
|
||||
return self.program_config('rustc')
|
||||
|
||||
def rustfmt(self):
|
||||
"""Return config path for rustfmt"""
|
||||
if not self.rustfmt_channel:
|
||||
return None
|
||||
return self.program_config('rustfmt')
|
||||
|
||||
def program_config(self, program):
|
||||
"""Return config path for the given program
|
||||
|
||||
@ -868,6 +902,9 @@ def bootstrap(help_triggered):
|
||||
build.rustc_channel = data['rustc']
|
||||
build.cargo_channel = data['cargo']
|
||||
|
||||
if "rustfmt" in data:
|
||||
build.rustfmt_channel = data['rustfmt']
|
||||
|
||||
if 'dev' in data:
|
||||
build.set_dev_environment()
|
||||
else:
|
||||
@ -895,6 +932,8 @@ def bootstrap(help_triggered):
|
||||
env["RUSTC_BOOTSTRAP"] = '1'
|
||||
env["CARGO"] = build.cargo()
|
||||
env["RUSTC"] = build.rustc()
|
||||
if build.rustfmt():
|
||||
env["RUSTFMT"] = build.rustfmt()
|
||||
run(args, env=env, verbose=build.verbose)
|
||||
|
||||
|
||||
|
@ -20,14 +20,14 @@ class Stage0DataTestCase(unittest.TestCase):
|
||||
os.mkdir(os.path.join(self.rust_root, "src"))
|
||||
with open(os.path.join(self.rust_root, "src",
|
||||
"stage0.txt"), "w") as stage0:
|
||||
stage0.write("#ignore\n\ndate: 2017-06-15\nrustc: beta\ncargo: beta")
|
||||
stage0.write("#ignore\n\ndate: 2017-06-15\nrustc: beta\ncargo: beta\nrustfmt: beta")
|
||||
|
||||
def tearDown(self):
|
||||
rmtree(self.rust_root)
|
||||
|
||||
def test_stage0_data(self):
|
||||
"""Extract data from stage0.txt"""
|
||||
expected = {"date": "2017-06-15", "rustc": "beta", "cargo": "beta"}
|
||||
expected = {"date": "2017-06-15", "rustc": "beta", "cargo": "beta", "rustfmt": "beta"}
|
||||
data = bootstrap.stage0_data(self.rust_root)
|
||||
self.assertDictEqual(data, expected)
|
||||
|
||||
|
@ -16,6 +16,11 @@ date: 2019-12-18
|
||||
rustc: beta
|
||||
cargo: beta
|
||||
|
||||
# We use a nightly rustfmt to format the source because it solves some bootstrapping
|
||||
# issues with use of new syntax in this repo. If you're looking at the beta/stable branch, this key should be omitted,
|
||||
# as we don't want to depend on rustfmt from nightly there.
|
||||
rustfmt: nightly-2019-11-05
|
||||
|
||||
# When making a stable release the process currently looks like:
|
||||
#
|
||||
# 1. Produce stable build, upload it to dev-static
|
||||
|
Loading…
Reference in New Issue
Block a user