#!/usr/bin/env bash

# ``upgrade-heat``

function configure_heat_upgrade {
    local xtrace
    xtrace=$(set +o | grep xtrace)
    set -o xtrace

    # The dist name for heat changed in rocky from "heat" to
    # "openstack-heat". Having the metadata for both packages
    # installed causes our plugins to be listed twice, so we need to
    # remove the old one before devstack installs the new one.
    # Using pip to uninstall the old code doesn't seem to work,
    # so this script works a bit more aggressively. These steps
    # should not be necessary for deployments using standard
    # system packages from distributions.

    local python_interpreter="python"
    if python3_enabled; then
        python_interpreter="python3"
    fi

    local sys_path=$($python_interpreter -c 'import sys; print(" ".join(sys.path))')
    local sys_path_dir
    local egg_link
    local easy_file
    for sys_path_dir in $sys_path; do
        # Installing something in editable mode creates an "egg link"
        # file that points to the location of the source files and
        # metadata. When we do the upgrades for projects that preserve
        # their name, the existing file is modified to point to the
        # new location. In this case, heat's name is changing so we
        # end up with a new file using the new name and the old one is
        # untouched. We need to remove it ourselves.
        egg_link="$sys_path_dir/heat.egg-link"
        if [ -e "$egg_link" ]; then
            sudo rm -f "$egg_link"
        fi
        # Installing a directory in editable mode adds the directory
        # to the .pth file that setuptools manages. When we do the
        # upgrades for projects that preserve their name, the old
        # entry is automatically replaced with the new one. In this
        # case, heat's name is changing, so setuptools doesn't figure
        # out that it should remove the old entry, and we have to do
        # it ourselves.
        easy_file=$sys_path_dir/easy-install.pth
        if [ -f $easy_file ]; then
            sudo sed --in-place '/old\/heat/d' $easy_file
        fi
    done

    ## reset to previous state
    $xtrace
}
