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 -->
This commit is contained in:
bors-servo 2016-12-03 21:11:48 -08:00 committed by GitHub
commit ea59e7bb68

View file

@ -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, '-')