From d03e52d2405a1b9149e9fc6c86f056525cd7c18d Mon Sep 17 00:00:00 2001 From: UK992 Date: Mon, 8 May 2017 16:18:23 +0200 Subject: [PATCH] Add clobber mechanism --- CLOBBER | 8 ++++++++ python/servo/build_commands.py | 11 +++++++---- python/servo/command_base.py | 27 +++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 CLOBBER diff --git a/CLOBBER b/CLOBBER new file mode 100644 index 000000000000..bd5a74d5625b --- /dev/null +++ b/CLOBBER @@ -0,0 +1,8 @@ +# To trigger a clobber replace ALL of the textual description below, +# giving a pull request number and a one line description of why a clobber is +# required. +# +# Modifying this file will now automatically clobber the buildbot machines \o/ +# + +Pull 16722 - Added CLOBBER file diff --git a/python/servo/build_commands.py b/python/servo/build_commands.py index 3a33f5f3b0d3..73c5bd9572d8 100644 --- a/python/servo/build_commands.py +++ b/python/servo/build_commands.py @@ -24,7 +24,7 @@ Command, ) -from servo.command_base import CommandBase, cd, call, BIN_SUFFIX +from servo.command_base import CommandBase, cd, call, check_call, BIN_SUFFIX from servo.util import host_triple @@ -228,6 +228,7 @@ def build(self, target=None, release=False, dev=False, jobs=None, opts += ["--target", target] self.ensure_bootstrapped(target=target) + self.ensure_clobbered() if debug_mozjs: features += ["debugmozjs"] @@ -360,6 +361,7 @@ def build(self, target=None, release=False, dev=False, jobs=None, def build_cef(self, jobs=None, verbose=False, release=False, with_debug_assertions=False): self.ensure_bootstrapped() + self.ensure_clobbered() ret = None opts = [] @@ -411,6 +413,7 @@ def build_cef(self, jobs=None, verbose=False, release=False, def build_geckolib(self, with_gecko=None, jobs=None, verbose=False, release=False): self.set_use_stable_rust() self.ensure_bootstrapped() + self.ensure_clobbered() env = self.build_env(is_build=True, geckolib=True) @@ -455,7 +458,7 @@ def build_geckolib(self, with_gecko=None, jobs=None, verbose=False, release=Fals help='Print verbose output') @CommandArgument('params', nargs='...', help="Command-line arguments to be passed through to Cargo") - def clean(self, manifest_path, params, verbose=False): + def clean(self, manifest_path=None, params=[], verbose=False): self.ensure_bootstrapped() opts = [] @@ -464,5 +467,5 @@ def clean(self, manifest_path, params, verbose=False): if verbose: opts += ["-v"] opts += params - return call(["cargo", "clean"] + opts, - env=self.build_env(), cwd=self.servo_crate(), verbose=verbose) + return check_call(["cargo", "clean"] + opts, + env=self.build_env(), cwd=self.servo_crate(), verbose=verbose) diff --git a/python/servo/command_base.py b/python/servo/command_base.py index be275347007c..7ab5191b41ae 100644 --- a/python/servo/command_base.py +++ b/python/servo/command_base.py @@ -574,3 +574,30 @@ def ensure_bootstrapped(self, target=None): Registrar.dispatch("bootstrap-cargo", context=self.context) self.context.bootstrapped = True + + def ensure_clobbered(self, target_dir=None): + if target_dir is None: + target_dir = self.get_target_dir() + auto = True if os.environ.get('AUTOCLOBBER', False) else False + src_clobber = os.path.join(self.context.topdir, 'CLOBBER') + target_clobber = os.path.join(target_dir, 'CLOBBER') + + if not os.path.exists(target_dir): + os.makedirs(target_dir) + + if not os.path.exists(target_clobber): + # Simply touch the file. + with open(target_clobber, 'a'): + pass + + if auto: + if os.path.getmtime(src_clobber) > os.path.getmtime(target_clobber): + print('Automatically clobbering target directory: {}'.format(target_dir)) + + try: + Registrar.dispatch("clean", context=self.context, verbose=True) + print('Successfully completed auto clobber.') + except subprocess.CalledProcessError as error: + sys.exit(error) + else: + print("Clobber not needed.")