diff options
author | bors-servo <lbergstrom+bors@mozilla.com> | 2016-12-03 21:11:48 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-12-03 21:11:48 -0800 |
commit | ea59e7bb68e83ac2631dcdad24f270bff68092eb (patch) | |
tree | 23130d609982e315d0daaaca9d9f6d5144ff7f8d /python/mach_bootstrap.py | |
parent | da15790e41b9404845bec9ae4dcdc127d23fa8ca (diff) | |
parent | 044b5ff26b4998f18a104140c2dc1d39541509be (diff) | |
download | servo-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.py | 17 |
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, '-') |