mirror of
https://github.com/servo/servo.git
synced 2025-06-08 00:23:30 +00:00
Use one Python virtual environment for all mach commands
Prior to this commit: * Our Python dependency story was a bit of a mess. We had complete Python packages (wheels and directories) living in-tree, despite not having any changes from upstream. This is particularly bad because `setup.py` never gets run on these packages which could (sometimes silently) unintended breakage. * Python virtual environments (virtualenv) were only utilized for testing web-platform tests After this commit: * A single virtualenv (`python/_virtualenv`) is activated upon *every* call to mach * A requirements file (`python/requirements.txt`) is added to describe the dependencies needed by Python modules in `python/`. The child commit immediately following this will remove all the dependencies no longer needed in-tree (for the sake of keeping this commit readable). Relevant to https://github.com/servo/servo/issues/861 Fixes https://github.com/servo/servo/issues/6999
This commit is contained in:
parent
b91320cb05
commit
33f78314d9
5 changed files with 51 additions and 51 deletions
|
@ -15,7 +15,6 @@ import os
|
|||
import os.path as path
|
||||
import subprocess
|
||||
from collections import OrderedDict
|
||||
from distutils.spawn import find_executable
|
||||
from time import time
|
||||
|
||||
from mach.registrar import Registrar
|
||||
|
@ -237,7 +236,6 @@ class MachCommands(CommandBase):
|
|||
help="Run with a release build of servo")
|
||||
def test_wpt(self, **kwargs):
|
||||
self.ensure_bootstrapped()
|
||||
self.ensure_wpt_virtualenv()
|
||||
hosts_file_path = path.join('tests', 'wpt', 'hosts')
|
||||
|
||||
os.environ["hosts_file_path"] = hosts_file_path
|
||||
|
@ -255,7 +253,6 @@ class MachCommands(CommandBase):
|
|||
parser=updatecommandline.create_parser())
|
||||
def update_wpt(self, **kwargs):
|
||||
self.ensure_bootstrapped()
|
||||
self.ensure_wpt_virtualenv()
|
||||
run_file = path.abspath(path.join("tests", "wpt", "update.py"))
|
||||
run_globals = {"__file__": run_file}
|
||||
execfile(run_file, run_globals)
|
||||
|
@ -301,7 +298,6 @@ class MachCommands(CommandBase):
|
|||
help="Run with a release build of servo")
|
||||
def test_css(self, **kwargs):
|
||||
self.ensure_bootstrapped()
|
||||
self.ensure_wpt_virtualenv()
|
||||
|
||||
run_file = path.abspath(path.join("tests", "wpt", "run_css.py"))
|
||||
run_globals = {"__file__": run_file}
|
||||
|
@ -320,45 +316,6 @@ class MachCommands(CommandBase):
|
|||
execfile(run_file, run_globals)
|
||||
return run_globals["update_tests"](**kwargs)
|
||||
|
||||
def ensure_wpt_virtualenv(self):
|
||||
virtualenv_path = path.join("tests", "wpt", "_virtualenv")
|
||||
python = self.get_exec("python2", "python")
|
||||
|
||||
if not os.path.exists(virtualenv_path):
|
||||
virtualenv = self.get_exec("virtualenv2", "virtualenv")
|
||||
subprocess.check_call([virtualenv, "-p", python, virtualenv_path])
|
||||
|
||||
activate_path = path.join(virtualenv_path, "bin", "activate_this.py")
|
||||
|
||||
execfile(activate_path, dict(__file__=activate_path))
|
||||
|
||||
try:
|
||||
import wptrunner # noqa
|
||||
from wptrunner.browsers import servo # noqa
|
||||
except ImportError:
|
||||
subprocess.check_call(["pip", "install", "-r",
|
||||
path.join("tests", "wpt", "harness", "requirements.txt")])
|
||||
subprocess.check_call(["pip", "install", "-r",
|
||||
path.join("tests", "wpt", "harness", "requirements_servo.txt")])
|
||||
try:
|
||||
import blessings
|
||||
except ImportError:
|
||||
subprocess.check_call(["pip", "install", "blessings"])
|
||||
|
||||
# This is an unfortunate hack. Because mozlog gets imported by wptcommandline
|
||||
# before the virtualenv is initalised it doesn't see the blessings module so we don't
|
||||
# get coloured output. Setting the blessings global explicitly fixes that.
|
||||
from mozlog.structured.formatters import machformatter
|
||||
import blessings # noqa
|
||||
machformatter.blessings = blessings
|
||||
|
||||
def get_exec(self, name, default=None):
|
||||
path = find_executable(name)
|
||||
if not path:
|
||||
return default
|
||||
|
||||
return path
|
||||
|
||||
def jquery_test_runner(self, cmd, release, dev):
|
||||
self.ensure_bootstrapped()
|
||||
base_dir = path.abspath(path.join("tests", "jquery"))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue