#!/bin/bash

if [ ${DIB_DEBUG_TRACE:-0} -gt 0 ]; then
    set -x
fi
set -eu
set -o pipefail

if [[ $DISTRO_NAME =~ (opensuse}fedora|centos|centos7|rhel|rhel7) ]]; then
    # GENERAL WARNING : mixing packaged python libraries with
    # pip-installed versions always creates issues.  Upstream
    # openstack-infra uses this a lot (especially devstack) but be
    # warned: here be dragons :)

    # Firstly we want to install the system packages.  Otherwise later
    # on somebody does a "yum install python-virtualenv" and goes and
    # overwrites the pip installed version with the packaged version,
    # leading to all sorts of weird version issues.
    if [[ $DISTRO_NAME = opensuse ]]; then
        zypper -n install python-virtualenv python-pip python-setuptools
    else
        ${YUM:-yum} install -y python-virtualenv python-pip python-setuptools
    fi

    # install pip; this overwrites packaged pip
    /usr/local/bin/dib-python /tmp/get-pip.py

    # pip and setuptools are closely related; we want to ensure the
    # latest for sanity.  Because distro packages don't include enough
    # info in the egg for pip to be certain it has fully uninstalled
    # the old package, for safety we clear it out by hand (this seems
    # to have been a problem with very old to new updates,
    # e.g. centos6 to current-era, but less so for smaller jumps).
    # There is a bit of chicken-and-egg problem with pip in that it
    # requires setuptools for some operations, such as wheel creation.
    # But just installing setuptools shouldn't require setuptools
    # itself, so we are safe for this small section.
    rm -rf /usr/lib/python2.7/site-packages/setuptools*
    pip install -U setuptools

    # now install latest virtualenv.  it vendors stuff it needs so
    # doesn't have issues with other system packages.
    pip install -U virtualenv

    if [[ $DISTRO_NAME = opensuse ]]; then
        for pkg in virtualenv pip setuptools; do
            cat - >> /etc/zypp/locks <<EOF
type: package
match_type: glob
case_sensitive: on
solvable_name: python-$pkg
EOF
        done
    else
        # Add this to exclude so that we don't install a later package
        # over it if it updates.  Note that fedora-minimal, bootstrapped
        # via yum, can have an old yum.conf around, so look for dnf first.
        if [[ -f /etc/dnf/dnf.conf ]]; then
            conf=/etc/dnf/dnf.conf
        elif [[ -f /etc/yum.conf ]]; then
            conf=/etc/yum.conf
        else
            die "No conf to modify?"
        fi
        echo "exclude=python-virtualenv,python-pip,python-setuptools" >> ${conf}
    fi
else
    /usr/local/bin/dib-python /tmp/get-pip.py
    pip install virtualenv
fi
