# 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
# --------
OSLOCFG_DIR=$DEST/oslo.config
OSLOMSG_DIR=$DEST/oslo.messaging
OSLORWRAP_DIR=$DEST/oslo.rootwrap

# 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 $OSLOCFG_REPO $OSLOCFG_DIR $OSLOCFG_BRANCH
    setup_develop $OSLOCFG_DIR

    git_clone $OSLOMSG_REPO $OSLOMSG_DIR $OSLOMSG_BRANCH
    setup_develop $OSLOMSG_DIR

    git_clone $OSLORWRAP_REPO $OSLORWRAP_DIR $OSLORWRAP_BRANCH
    setup_develop $OSLORWRAP_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:
