From 75b340a243f4740376497a52e1c2eb639d9ac827 Mon Sep 17 00:00:00 2001 From: Anthony Miyaguchi Date: Wed, 17 Sep 2014 01:55:53 -0700 Subject: [PATCH 1/2] Fixes #3353: rust snapshot downloads to home directory --- etc/ci/travis.script.sh | 2 +- python/servo/bootstrap_commands.py | 4 ++-- python/servo/command_base.py | 9 ++++++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/etc/ci/travis.script.sh b/etc/ci/travis.script.sh index b2b286cd490..e8eaafe34c6 100755 --- a/etc/ci/travis.script.sh +++ b/etc/ci/travis.script.sh @@ -37,7 +37,7 @@ for t in "${tasks[@]}"; do if [ "${TRAVIS_BRANCH}" = "master" ] && [ "${TRAVIS_PULL_REQUEST}" = "false" ] then mkdir -p target/doc - cp -R rust/doc/* target/doc/ + cp -R ~/.servo/rust/$(cat rust-snapshot-hash)*/doc/* target/doc/ cp etc/doc.servo.org/* target/doc/ ./mach doc # After copying rust/doc, so that the crate index is correct. sudo pip install ghp-import diff --git a/python/servo/bootstrap_commands.py b/python/servo/bootstrap_commands.py index 536e6234497..825796ea311 100644 --- a/python/servo/bootstrap_commands.py +++ b/python/servo/bootstrap_commands.py @@ -67,7 +67,7 @@ class MachCommands(CommandBase): help='Force download even if a snapshot already exists') def bootstrap_rustc(self, force=False): rust_dir = path.join( - self.context.topdir, "rust", *self.rust_snapshot_path().split("/")) + self.context.sharedir, "rust", *self.rust_snapshot_path().split("/")) if not force and path.exists(path.join(rust_dir, "bin", "rustc")): print("Snapshot Rust compiler already downloaded.", end=" ") print("Use |bootstrap_rust --force| to download again.") @@ -96,7 +96,7 @@ class MachCommands(CommandBase): action='store_true', help='Force download even if cargo already exists') def bootstrap_cargo(self, force=False): - cargo_dir = path.join(self.context.topdir, "cargo") + cargo_dir = path.join(self.context.sharedir, "cargo") if not force and path.exists(path.join(cargo_dir, "bin", "cargo")): print("Cargo already downloaded.", end=" ") print("Use |bootstrap_cargo --force| to download again.") diff --git a/python/servo/command_base.py b/python/servo/command_base.py index 72810efff0d..45c1b230eb2 100644 --- a/python/servo/command_base.py +++ b/python/servo/command_base.py @@ -54,6 +54,9 @@ class CommandBase(object): if not hasattr(self.context, "bootstrapped"): self.context.bootstrapped = False + if not hasattr(self.context, "sharedir"): + self.context.sharedir = path.join(path.expanduser("~/"), ".servo") + config_path = path.join(context.topdir, ".servobuild") if path.exists(config_path): self.config = toml.loads(open(config_path).read()) @@ -68,10 +71,10 @@ class CommandBase(object): self.config["tools"].setdefault("cargo-root", "") if not self.config["tools"]["system-rust"]: self.config["tools"]["rust-root"] = path.join( - context.topdir, "rust", *self.rust_snapshot_path().split("/")) + context.sharedir, "rust", *self.rust_snapshot_path().split("/")) if not self.config["tools"]["system-cargo"]: self.config["tools"]["cargo-root"] = path.join( - context.topdir, "cargo") + context.sharedir, "cargo") self.config.setdefault("build", {}) self.config["build"].setdefault("android", False) @@ -148,7 +151,7 @@ class CommandBase(object): Registrar.dispatch("bootstrap-rust", context=self.context) if not self.config["tools"]["system-cargo"] and \ not path.exists(path.join( - self.context.topdir, "cargo", "bin", "cargo")): + self.config["tools"]["cargo-root"], "bin", "cargo")): Registrar.dispatch("bootstrap-cargo", context=self.context) self.context.bootstrapped = True From 2ee516fa7ca43a2bede2b97aa7dbd80709e4828f Mon Sep 17 00:00:00 2001 From: Matt Brubeck Date: Wed, 5 Nov 2014 13:59:31 -0800 Subject: [PATCH 2/2] Automatically update cargo when necessary --- cargo-nightly-build | 1 + python/servo/bootstrap_commands.py | 8 +++++--- python/servo/command_base.py | 9 ++++++++- 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 cargo-nightly-build diff --git a/cargo-nightly-build b/cargo-nightly-build new file mode 100644 index 00000000000..a8889e980b0 --- /dev/null +++ b/cargo-nightly-build @@ -0,0 +1 @@ +2014-10-21 diff --git a/python/servo/bootstrap_commands.py b/python/servo/bootstrap_commands.py index 825796ea311..4494d4d4c06 100644 --- a/python/servo/bootstrap_commands.py +++ b/python/servo/bootstrap_commands.py @@ -96,7 +96,8 @@ class MachCommands(CommandBase): action='store_true', help='Force download even if cargo already exists') def bootstrap_cargo(self, force=False): - cargo_dir = path.join(self.context.sharedir, "cargo") + cargo_dir = path.join(self.context.sharedir, "cargo", + self.cargo_build_id()) if not force and path.exists(path.join(cargo_dir, "bin", "cargo")): print("Cargo already downloaded.", end=" ") print("Use |bootstrap_cargo --force| to download again.") @@ -104,11 +105,12 @@ class MachCommands(CommandBase): if path.isdir(cargo_dir): shutil.rmtree(cargo_dir) - os.mkdir(cargo_dir) + os.makedirs(cargo_dir) tgz_file = "cargo-nightly-%s.tar.gz" % host_triple() # FIXME(#3582): use https. - nightly_url = "http://static.rust-lang.org/cargo-dist/2014-10-21/%s" % tgz_file + nightly_url = "http://static.rust-lang.org/cargo-dist/%s/%s" % \ + (self.cargo_build_id(), tgz_file) download("Cargo nightly", nightly_url, tgz_file) diff --git a/python/servo/command_base.py b/python/servo/command_base.py index 45c1b230eb2..d78c0e13a1c 100644 --- a/python/servo/command_base.py +++ b/python/servo/command_base.py @@ -74,7 +74,7 @@ class CommandBase(object): context.sharedir, "rust", *self.rust_snapshot_path().split("/")) if not self.config["tools"]["system-cargo"]: self.config["tools"]["cargo-root"] = path.join( - context.sharedir, "cargo") + context.sharedir, "cargo", self.cargo_build_id()) self.config.setdefault("build", {}) self.config["build"].setdefault("android", False) @@ -85,6 +85,7 @@ class CommandBase(object): self.config["android"].setdefault("toolchain", "") _rust_snapshot_path = None + _cargo_build_id = None def rust_snapshot_path(self): if self._rust_snapshot_path is None: @@ -93,6 +94,12 @@ class CommandBase(object): self._rust_snapshot_path = "%s-%s" % (snapshot_hash, host_triple()) return self._rust_snapshot_path + def cargo_build_id(self): + if self._cargo_build_id is None: + filename = path.join(self.context.topdir, "cargo-nightly-build") + self._cargo_build_id = open(filename).read().strip() + return self._cargo_build_id + def build_env(self): """Return an extended environment dictionary.""" env = os.environ.copy()