servo: Merge #8364 - mach_bootstrap: Don't get confused by interrupts (from ben0x539:mach-nochmal); r=metajack

When mach_bootstrap got interrupted while it's setting up virtualenv or
calling out to pip, it wouldn't repeat that step on subsequent runs, and
mach fails because its environment isn't set up properly or dependencies
are missing.

So now we re-run virtualenv if activate_this.py doesn't exist, and only
create the marker file for required packages after pip has returned
successfully.

Source-Repo: https://github.com/servo/servo
Source-Revision: afc41ec4ac404a160edb8c8fb12434fe54d59821
This commit is contained in:
Benjamin Herr 2015-11-06 01:19:19 +05:01
parent 6778a55e8e
commit 8fc8121668

View File

@ -91,7 +91,8 @@ def _activate_virtualenv(topdir):
if python is None:
sys.exit("Python is not installed. Please install it prior to running mach.")
if not os.path.exists(virtualenv_path):
activate_path = os.path.join(virtualenv_path, "bin", "activate_this.py")
if not (os.path.exists(virtualenv_path) and os.path.exists(activate_path)):
virtualenv = _get_exec(*VIRTUALENV_NAMES)
if virtualenv is None:
sys.exit("Python virtualenv is not installed. Please install it prior to running mach.")
@ -101,7 +102,6 @@ def _activate_virtualenv(topdir):
except (subprocess.CalledProcessError, OSError):
sys.exit("Python virtualenv failed to execute properly.")
activate_path = os.path.join(virtualenv_path, "bin", "activate_this.py")
execfile(activate_path, dict(__file__=activate_path))
# TODO: Right now, we iteratively install all the requirements by invoking
@ -123,7 +123,7 @@ def _activate_virtualenv(topdir):
if os.path.getmtime(req_path) + 10 < os.path.getmtime(marker_path):
continue
except OSError:
open(marker_path, 'w').close()
pass
pip = _get_exec(*PIP_NAMES)
if pip is None:
@ -134,7 +134,7 @@ def _activate_virtualenv(topdir):
except (subprocess.CalledProcessError, OSError):
sys.exit("Pip failed to execute properly.")
os.utime(marker_path, None)
open(marker_path, 'w').close()
def bootstrap(topdir):