aboutsummaryrefslogtreecommitdiffstats
path: root/python/mach_bootstrap.py
diff options
context:
space:
mode:
authorbors-servo <lbergstrom+bors@mozilla.com>2016-12-03 21:11:48 -0800
committerGitHub <noreply@github.com>2016-12-03 21:11:48 -0800
commitea59e7bb68e83ac2631dcdad24f270bff68092eb (patch)
tree23130d609982e315d0daaaca9d9f6d5144ff7f8d /python/mach_bootstrap.py
parentda15790e41b9404845bec9ae4dcdc127d23fa8ca (diff)
parent044b5ff26b4998f18a104140c2dc1d39541509be (diff)
downloadservo-ea59e7bb68e83ac2631dcdad24f270bff68092eb.tar.gz
servo-ea59e7bb68e83ac2631dcdad24f270bff68092eb.zip
Auto merge of #14452 - PeterZhizhin:upgrade-pip-with-new-virtualenv, r=frewsxcv
Commit that fixes the issue #11074 by upgrading pip whenever virtuale… <!-- Please describe your changes on the following line: --> I have kind of resolved the issue #11074 by adding bool variable which is set to `True` if we had created the virtualenv and `False` otherwise. Then it updates pip by executing `pip install --upgrade pip` in the same way as packages are updated. I am a little bit worried that I have almost duplicated the installation routine from the `for` loop but I am not sure whether I should add a function or not. I think it is the best way of doing this because it does not need any Internet access for regular work (only for the first time you execute mach) as @larsbergstrom worried [here](https://github.com/servo/servo/pull/11149). It also doesn't add any extra latency on a no-op build. I have checked the solution inside a docker container based on debian wheezy. Before the patch `./mach` failed to run because it wasn't able to install some packages. Now it runs successfully. --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [X] `./mach build -d` does not report any errors - [X] `./mach test-tidy` does not report any errors - [X] These changes fix #11074 (github issue number if applicable). <!-- Either: --> - [ ] There are tests for these changes OR - [X] These changes do not require tests because it changes only mach_bootstrap.py <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/14452) <!-- Reviewable:end -->
Diffstat (limited to 'python/mach_bootstrap.py')
-rw-r--r--python/mach_bootstrap.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/python/mach_bootstrap.py b/python/mach_bootstrap.py
index c2d35278dae..d41bb1f5099 100644
--- a/python/mach_bootstrap.py
+++ b/python/mach_bootstrap.py
@@ -112,6 +112,7 @@ def _activate_virtualenv(topdir):
script_dir = _get_virtualenv_script_dir()
activate_path = os.path.join(virtualenv_path, script_dir, "activate_this.py")
+ need_pip_upgrade = False
if not (os.path.exists(virtualenv_path) and os.path.exists(activate_path)):
virtualenv = _get_exec_path(VIRTUALENV_NAMES)
if not virtualenv:
@@ -123,6 +124,8 @@ def _activate_virtualenv(topdir):
out, err = process.communicate()
print('Python virtualenv failed to execute properly:')
sys.exit('Output: %s\nError: %s' % (out, err))
+ # We want to upgrade pip when virtualenv created for the first time
+ need_pip_upgrade = True
execfile(activate_path, dict(__file__=activate_path))
@@ -143,6 +146,20 @@ def _activate_virtualenv(topdir):
os.path.join("tests", "wpt", "harness", "requirements_servo.txt"),
]
+ if need_pip_upgrade:
+ # Upgrade pip when virtualenv is created to fix the issue
+ # https://github.com/servo/servo/issues/11074
+ pip = _get_exec_path(PIP_NAMES, is_valid_path=check_exec_path)
+ if not pip:
+ sys.exit("Python pip is either not installed or not found in virtualenv.")
+
+ process = Popen([pip, "install", "-q", "-U", "pip"], stdout=PIPE, stderr=PIPE)
+ process.wait()
+ if process.returncode:
+ out, err = process.communicate()
+ print('Pip failed to upgrade itself properly:')
+ sys.exit('Output: %s\nError: %s' % (out, err))
+
for req_rel_path in requirements_paths:
req_path = os.path.join(topdir, req_rel_path)
marker_file = req_rel_path.replace(os.path.sep, '-')