# lib/oslo
#
# Functions to install oslo libraries from git
#
# We need this to handle the fact that projects would like to use
# pre-released versions of oslo libraries.

# Dependencies:
#
# - ``functions`` file

# ``stack.sh`` calls the entry points in this order:
#
# - install_oslo

# Save trace setting
XTRACE=$(set +o | grep xtrace)
set +o xtrace


# Defaults
# --------
CLIFF_DIR=$DEST/cliff
OSLOCFG_DIR=$DEST/oslo.config
OSLODB_DIR=$DEST/oslo.db
OSLOMSG_DIR=$DEST/oslo.messaging
OSLORWRAP_DIR=$DEST/oslo.rootwrap
OSLOVMWARE_DIR=$DEST/oslo.vmware
PYCADF_DIR=$DEST/pycadf
STEVEDORE_DIR=$DEST/stevedore
TASKFLOW_DIR=$DEST/taskflow

# Entry Points
# ------------

# install_oslo() - Collect source and prepare
function install_oslo {
    # TODO(sdague): remove this once we get to Icehouse, this just makes
    # for a smoother transition of existing users.
    cleanup_oslo

    git_clone $CLIFF_REPO $CLIFF_DIR $CLIFF_BRANCH
    setup_install $CLIFF_DIR

    git_clone $OSLOCFG_REPO $OSLOCFG_DIR $OSLOCFG_BRANCH
    setup_install $OSLOCFG_DIR

    git_clone $OSLOMSG_REPO $OSLOMSG_DIR $OSLOMSG_BRANCH
    setup_install $OSLOMSG_DIR

    git_clone $OSLORWRAP_REPO $OSLORWRAP_DIR $OSLORWRAP_BRANCH
    setup_install $OSLORWRAP_DIR

    git_clone $OSLOVMWARE_REPO $OSLOVMWARE_DIR $OSLOVMWARE_BRANCH
    setup_install $OSLOVMWARE_DIR

    git_clone $PYCADF_REPO $PYCADF_DIR $PYCADF_BRANCH
    setup_install $PYCADF_DIR

    git_clone $STEVEDORE_REPO $STEVEDORE_DIR $STEVEDORE_BRANCH
    setup_install $STEVEDORE_DIR

    git_clone $TASKFLOW_REPO $TASKFLOW_DIR $TASKFLOW_BRANCH
    setup_install $TASKFLOW_DIR
}

# cleanup_oslo() - purge possibly old versions of oslo
function cleanup_oslo {
    # this means we've got an old oslo installed, lets get rid of it
    if ! python -c 'import oslo.config' 2>/dev/null; then
        echo "Found old oslo.config... removing to ensure consistency"
        local PIP_CMD=$(get_pip_command)
        pip_install oslo.config
        sudo $PIP_CMD uninstall -y oslo.config
    fi
}

# Restore xtrace
$XTRACE

# Tell emacs to use shell-script-mode
## Local variables:
## mode: shell-script
## End:
