From 0842b8147f098106b679cf652edbcb5ea4330f04 Mon Sep 17 00:00:00 2001 From: Brant Knudson Date: Mon, 3 Aug 2015 13:31:25 -0500 Subject: [PATCH] Support extra dependencies when setup_develop Recent pip supports using [extras] to install extra dependencies from the project setup.cfg. Add support so that projects can take advantage of it. For example, if devstack is configured to use ldap, install the extra ldap dependencies using: setup_develop $KEYSTONE_DIR ldap Partial-Bug: 1479962 Change-Id: Ic13d95b99aaa4d3854b2723343e90f5de6b98aa2 --- inc/python | 56 +++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 49 insertions(+), 7 deletions(-) diff --git a/inc/python b/inc/python index c157604699..2bf426489d 100644 --- a/inc/python +++ b/inc/python @@ -239,15 +239,31 @@ function setup_dev_lib { # this should be used if you want to install globally, all libraries should # use this, especially *oslo* ones +# +# setup_install project_dir [extras] +# project_dir: directory of project repo (e.g., /opt/stack/keystone) +# extras: comma-separated list of optional dependencies to install +# (e.g., ldap,memcache). +# See http://docs.openstack.org/developer/pbr/#extra-requirements +# The command is like "pip install []" function setup_install { local project_dir=$1 - setup_package_with_constraints_edit $project_dir + local extras=$2 + _setup_package_with_constraints_edit $project_dir "" $extras } # this should be used for projects which run services, like all services +# +# setup_develop project_dir [extras] +# project_dir: directory of project repo (e.g., /opt/stack/keystone) +# extras: comma-separated list of optional dependencies to install +# (e.g., ldap,memcache). +# See http://docs.openstack.org/developer/pbr/#extra-requirements +# The command is like "pip install -e []" function setup_develop { local project_dir=$1 - setup_package_with_constraints_edit $project_dir -e + local extras=$2 + _setup_package_with_constraints_edit $project_dir -e $extras } # determine if a project as specified by directory is in @@ -269,10 +285,17 @@ function is_in_projects_txt { # install this package we get the from source version. # # Uses globals ``REQUIREMENTS_DIR`` -# setup_develop directory -function setup_package_with_constraints_edit { +# _setup_package_with_constraints_edit project_dir flags [extras] +# project_dir: directory of project repo (e.g., /opt/stack/keystone) +# flags: pip CLI options/flags +# extras: comma-separated list of optional dependencies to install +# (e.g., ldap,memcache). +# See http://docs.openstack.org/developer/pbr/#extra-requirements +# The command is like "pip install []" +function _setup_package_with_constraints_edit { local project_dir=$1 local flags=$2 + local extras=$3 if [ -n "$REQUIREMENTS_DIR" ]; then # Constrain this package to this project directory from here on out. @@ -283,19 +306,38 @@ function setup_package_with_constraints_edit { "$flags file://$project_dir#egg=$name" fi - setup_package $project_dir $flags + setup_package $project_dir "$flags" $extras } # ``pip install -e`` the package, which processes the dependencies # using pip before running `setup.py develop` +# # Uses globals ``STACK_USER`` -# setup_develop_no_requirements_update directory +# setup_package project_dir [flags] [extras] +# project_dir: directory of project repo (e.g., /opt/stack/keystone) +# flags: pip CLI options/flags +# extras: comma-separated list of optional dependencies to install +# (e.g., ldap,memcache). +# See http://docs.openstack.org/developer/pbr/#extra-requirements +# The command is like "pip install []" function setup_package { local project_dir=$1 local flags=$2 + local extras=$3 - pip_install $flags $project_dir + # if the flags variable exists, and it doesn't look like a flag, + # assume it's actually the extras list. + if [[ -n "$flags" && -z "$extras" && ! "$flags" =~ ^-.* ]]; then + extras=$flags + flags="" + fi + + if [[ ! -z "$extras" ]]; then + extras="[$extras]" + fi + + pip_install $flags "$project_dir$extras" # ensure that further actions can do things like setup.py sdist if [[ "$flags" == "-e" ]]; then safe_chown -R $STACK_USER $1/*.egg-info