From 28749792fbc0eff009773dcd240849a5d4a3e052 Mon Sep 17 00:00:00 2001 From: Akihiro MOTOKI Date: Wed, 13 Nov 2013 03:30:42 +0900 Subject: [PATCH] Import install_venv from oslo The new version of install_venv_common evaluates requirements.txt and test-requirements.txt at the same time and we avoid Django 1.6 is installed when evaluating django-nose dependencies. Change-Id: I2ab7108b3615ac6c0525089b81b80e5c0a4793fc Closes-Bug: #1250581 (cherry picked from commit 7a0581bb701dbb4d7d9fb1bbe1d7644e98ac2b2e) --- openstack-common.conf | 3 +- tools/install_venv.py | 56 +++++++++++++++++------------------- tools/install_venv_common.py | 42 +-------------------------- tools/with_venv.sh | 9 ++++-- 4 files changed, 35 insertions(+), 75 deletions(-) diff --git a/openstack-common.conf b/openstack-common.conf index d75764ae1f..9ea2c15b7d 100644 --- a/openstack-common.conf +++ b/openstack-common.conf @@ -2,11 +2,12 @@ module=config module=eventlet_backdoor module=fileutils -module=install_venv_common +module=install_venv module=notifier module=policy module=rpc module=service module=threadgroup +module=with_venv base=openstack_dashboard diff --git a/tools/install_venv.py b/tools/install_venv.py index 0011a8be14..8ef3749c97 100644 --- a/tools/install_venv.py +++ b/tools/install_venv.py @@ -6,45 +6,45 @@ # # Copyright 2010 OpenStack Foundation # Copyright 2013 IBM Corp. -# Copyright (c) 2013 Hewlett-Packard Development Company, L.P. # -# Licensed under the Apache License, Version 2.0 (the "License"); you may -# not use this file except in compliance with the License. You may obtain -# a copy of the License at +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT -# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the -# License for the specific language governing permissions and limitations -# under the License. +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. -import ConfigParser import os import sys -import install_venv_common as install_venv # flake8: noqa +import install_venv_common as install_venv # noqa -def print_help(project, venv, root): +def print_help(venv, root): help = """ - %(project)s development environment setup is complete. + Openstack development environment setup is complete. - %(project)s development uses virtualenv to track and manage Python + Openstack development uses virtualenv to track and manage Python dependencies while in development and testing. - To activate the %(project)s virtualenv for the extent of your current - shell session you can run: + To activate the Openstack virtualenv for the extent of your current shell + session you can run: - $ source %(venv)s/bin/activate + $ source %s/bin/activate - Or, if you prefer, you can run commands in the virtualenv on a case by - case basis by running: + Or, if you prefer, you can run commands in the virtualenv on a case by case + basis by running: - $ %(root)s/tools/with_venv.sh + $ %s/tools/with_venv.sh + + Also, make test will automatically use the virtualenv. """ - print help % dict(project=project, venv=venv, root=root) + print(help % (venv, root)) def main(argv): @@ -59,19 +59,15 @@ def main(argv): pip_requires = os.path.join(root, 'requirements.txt') test_requires = os.path.join(root, 'test-requirements.txt') py_version = "python%s.%s" % (sys.version_info[0], sys.version_info[1]) - setup_cfg = ConfigParser.ConfigParser() - setup_cfg.read('setup.cfg') - project = setup_cfg.get('metadata', 'name') - - install = install_venv.InstallVenv( - root, venv, pip_requires, test_requires, py_version, project) + project = 'Openstack' + install = install_venv.InstallVenv(root, venv, pip_requires, test_requires, + py_version, project) options = install.parse_args(argv) install.check_python_version() install.check_dependencies() install.create_virtualenv(no_site_packages=options.no_site_packages) install.install_dependencies() - install.post_process() - print_help(project, venv, root) + print_help(venv, root) if __name__ == '__main__': main(sys.argv) diff --git a/tools/install_venv_common.py b/tools/install_venv_common.py index 0999e2c29e..1bab88a3fd 100644 --- a/tools/install_venv_common.py +++ b/tools/install_venv_common.py @@ -119,11 +119,7 @@ class InstallVenv(object): self.pip_install('setuptools') self.pip_install('pbr') - self.pip_install('-r', self.requirements) - self.pip_install('-r', self.test_requirements) - - def post_process(self): - self.get_distro().post_process() + self.pip_install('-r', self.requirements, '-r', self.test_requirements) def parse_args(self, argv): """Parses command-line arguments.""" @@ -157,14 +153,6 @@ class Distro(InstallVenv): ' requires virtualenv, please install it using your' ' favorite package management tool' % self.project) - def post_process(self): - """Any distribution-specific post-processing gets done here. - - In particular, this is useful for applying patches to code inside - the venv. - """ - pass - class Fedora(Distro): """This covers all Fedora-based distributions. @@ -176,10 +164,6 @@ class Fedora(Distro): return self.run_command_with_code(['rpm', '-q', pkg], check_exit_code=False)[1] == 0 - def apply_patch(self, originalfile, patchfile): - self.run_command(['patch', '-N', originalfile, patchfile], - check_exit_code=False) - def install_virtualenv(self): if self.check_cmd('virtualenv'): return @@ -188,27 +172,3 @@ class Fedora(Distro): self.die("Please install 'python-virtualenv'.") super(Fedora, self).install_virtualenv() - - def post_process(self): - """Workaround for a bug in eventlet. - - This currently affects RHEL6.1, but the fix can safely be - applied to all RHEL and Fedora distributions. - - This can be removed when the fix is applied upstream. - - Nova: https://bugs.launchpad.net/nova/+bug/884915 - Upstream: https://bitbucket.org/eventlet/eventlet/issue/89 - RHEL: https://bugzilla.redhat.com/958868 - """ - - if os.path.exists('contrib/redhat-eventlet.patch'): - # Install "patch" program if it's not there - if not self.check_pkg('patch'): - self.die("Please install 'patch'.") - - # Apply the eventlet patch - self.apply_patch(os.path.join(self.venv, 'lib', self.py_version, - 'site-packages', - 'eventlet/green/subprocess.py'), - 'contrib/redhat-eventlet.patch') diff --git a/tools/with_venv.sh b/tools/with_venv.sh index 550c4774e5..7303990bd8 100755 --- a/tools/with_venv.sh +++ b/tools/with_venv.sh @@ -1,4 +1,7 @@ #!/bin/bash -TOOLS=`dirname $0` -VENV=$TOOLS/../.venv -source $VENV/bin/activate && "$@" +TOOLS_PATH=${TOOLS_PATH:-$(dirname $0)} +VENV_PATH=${VENV_PATH:-${TOOLS_PATH}} +VENV_DIR=${VENV_NAME:-/../.venv} +TOOLS=${TOOLS_PATH} +VENV=${VENV:-${VENV_PATH}/${VENV_DIR}} +source ${VENV}/bin/activate && "$@"