This is an automated email from the ASF dual-hosted git repository. andschwa pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mesos.git
The following commit(s) were added to refs/heads/master by this push: new 3bb3108 Fixed `mesos-style.py` for Windows. 3bb3108 is described below commit 3bb310828d862a2b670bbdd49cbd9bcec65bba2f Author: Andrew Schwartzmeyer <and...@schwartzmeyer.com> AuthorDate: Mon Aug 6 09:49:54 2018 -0700 Fixed `mesos-style.py` for Windows. Due to an unfortunate platform difference, the `virtualenv` subfolder is `Script` instead of `bin` on Windows. Some hacky inline scripting was done to mimic the shell script `build-virtualenv` to build the `virtualenv` on Windows. Review: https://reviews.apache.org/r/68238 --- support/python3/mesos-style.py | 61 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 54 insertions(+), 7 deletions(-) diff --git a/support/python3/mesos-style.py b/support/python3/mesos-style.py index 12fd330..845ec73 100755 --- a/support/python3/mesos-style.py +++ b/support/python3/mesos-style.py @@ -19,6 +19,7 @@ """Runs checks for mesos style.""" import os +import platform import re import string import subprocess @@ -149,11 +150,15 @@ class LinterBase(object): given command and return its output. """ virtualenv = os.path.join('support', '.virtualenv') - command = '. {virtualenv_path}/bin/activate; {cmd}'.format( - virtualenv_path=virtualenv, cmd=command) - process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) - return process + if platform.system() == 'Windows': + command = '{virtualenv_path}\Scripts\activate.bat & {cmd}'.format( + virtualenv_path=virtualenv, cmd=command) + else: + command = '. {virtualenv_path}/bin/activate; {cmd}'.format( + virtualenv_path=virtualenv, cmd=command) + + return subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) def run_lint(self, source_paths): """ @@ -385,8 +390,9 @@ class PyLinter(LinterBase): # `os.path.dirname` below once the python 3 support scripts # are moved from `support/python3/` to `support/`. support_dir = os.path.dirname(os.path.dirname(__file__)) + bin_dir = 'Script' if platform.system() == 'Windows' else 'bin' - cmd = [os.path.join(support_dir, '.virtualenv', 'bin', 'tox')] + cmd = [os.path.join(support_dir, '.virtualenv', bin_dir, 'tox')] cmd += ['-qq'] cmd += ['-c', configfile] if tox_env is not None: @@ -469,8 +475,10 @@ def should_build_virtualenv(modified_files): # TODO(ArmandGrillet): Remove one os.path.dirname once python 3 # support scripts are moved from support/python3/ to support/. support_dir = os.path.dirname(os.path.dirname(__file__)) + bin_dir = 'Script' if platform.system() == 'Windows' else 'bin' + interpreter = os.path.basename(sys.executable) - interpreter = os.path.join(support_dir, '.virtualenv', 'bin', interpreter) + interpreter = os.path.join(support_dir, '.virtualenv', bin_dir, interpreter) if not os.path.isfile(interpreter): return True @@ -510,8 +518,17 @@ def build_virtualenv(): python3_env = os.environ.copy() python3_env["PYTHON"] = sys.executable + + build_virtualenv = [os.path.join('support', 'build-virtualenv')] + + if platform.system() == 'Windows': + # TODO(andschwa): Port more of the `build-virtualenv` Bash script. + python_dir = os.path.dirname(sys.executable) + virtualenv = os.path.join(python_dir, 'Scripts', 'virtualenv.exe') + build_virtualenv = [virtualenv, '--no-site-packages', 'support/.virtualenv'] + process = subprocess.Popen( - [os.path.join('support', 'build-virtualenv')], + build_virtualenv, env=python3_env, stdout=subprocess.PIPE) @@ -525,6 +542,36 @@ def build_virtualenv(): sys.stderr.write(output) sys.exit(1) + # TODO(andschwa): Move this into a script like above. + if platform.system() == 'Windows': + def run_command_in_virtualenv(command): + """ + Stolen from `PyLinter`, runs command in virtualenv. + """ + virtualenv = os.path.join('support', '.virtualenv', 'Scripts', 'activate.bat') + command = '{virtualenv_path} & {cmd}'.format( + virtualenv_path=virtualenv, cmd=command) + + return subprocess.Popen(command, shell=True, stdout=subprocess.PIPE) + + process = run_command_in_virtualenv('python.exe -m pip install --upgrade pip') + for line in process.stdout: + output += line.decode(sys.stdout.encoding) + process.wait() + + if process.returncode != 0: + sys.stderr.write(output) + sys.exit(1) + + process = run_command_in_virtualenv('python.exe -m pip install -r support/pip-requirements.txt') + for line in process.stdout: + output += line.decode(sys.stdout.encoding) + process.wait() + + if process.returncode != 0: + sys.stderr.write(output) + sys.exit(1) + if __name__ == '__main__': if should_build_virtualenv(sys.argv[1:]): build_virtualenv()