# lib/infra
#
# Functions to install infrastructure projects needed by other projects
# early in the cycle. We need this so we can do things like gate on
# requirements as a global list

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

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

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


# Defaults
# --------
PBR_DIR=$DEST/pbr
REQUIREMENTS_DIR=$DEST/requirements

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

# unfubar_setuptools() - Unbreak the giant mess that is the current state of setuptools
function unfubar_setuptools() {
    # this is a giant game of who's on first, but it does consistently work
    # there is hope that upstream python packaging fixes this in the future
    echo_summary "Unbreaking setuptools"
    pip_install -U setuptools
    pip_install -U pip
    uninstall_package python-setuptools
    pip_install -U setuptools
    pip_install -U pip
}


# install_infra() - Collect source and prepare
function install_infra() {
    # bring down global requirements
    git_clone $REQUIREMENTS_REPO $REQUIREMENTS_DIR $REQUIREMENTS_BRANCH

    # Install pbr
    git_clone $PBR_REPO $PBR_DIR $PBR_BRANCH
    setup_develop $PBR_DIR
}

# Restore xtrace
$XTRACE

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