#!/bin/bash

# script control variables

libname="" # leave this blank for auto-detection
sibname=() # name of sibling in packages list
versionwarn="yes" # set to anything but 'yes' to turn off warning

debdir="$(pwd)"
rootdir="$(dirname $debdir)"
libdir="$rootdir/library"

mainlog="CHANGELOG"
debianlog="debian/changelog"
pypilog="$libdir/CHANGELOG.txt"

# function define

success() {
    echo "$(tput setaf 2)$1$(tput sgr0)"
}

inform() {
    echo "$(tput setaf 6)$1$(tput sgr0)"
}

warning() {
    echo "$(tput setaf 1)$1$(tput sgr0)"
}

newline() {
    echo ""
}

# generate debian changelog

cat $mainlog > $debianlog
inform "seeded debian changelog"

# generate pypi changelog

sed -e "/--/d" -e "s/  \*/\*/" \
    -e "s/.*\([0-9].[0-9].[0-9]\).*/\1/" \
    -e '/[0-9].[0-9].[0-9]/ a\
-----' $mainlog | cat -s > $pypilog

version=$(head -n 1 $pypilog)
inform "pypi changelog generated"

# touch up version in setup.py file

if [ -n $(grep version "$libdir/setup.py" &> /dev/null) ]; then
    inform "touched up version in setup.py"
    sed -i "s/[0-9].[0-9].[0-9]/$version/" "$libdir/setup.py"
else
    warning "couldn't touch up version in setup, no match found"
fi

# touch up version in lib or package siblings

if [ -z "$libname" ]; then
    cd "$libdir"
    libname=$(grep "name" setup.py | tr -d "[:space:]" | cut -c 7- | rev | cut -c 3- | rev)
    libname=$(echo "$libname" | tr "[A-Z]" "[a-z]") && cd "$debdir"
    sibname+=( "$libname" )
elif [ "$libname" != "package" ]; then
    sibname+=( "$libname" )
fi

for sibling in ${sibname[@]}; do
    if grep -e "__version__" "$libdir/$sibling.py" &> /dev/null; then
        sed -i "s/__version__ = '[0-9].[0-9].[0-9]/__version__ = '$version/" "$libdir/$sibling.py"
        inform "touched up version in $sibling.py"
    elif grep -e "__version__" "$libdir/$sibling/__init__.py" &> /dev/null; then
        sed -i "s/__version__ = '[0-9].[0-9].[0-9]/__version__ = '$version/" "$libdir/$sibling/__init__.py"
        inform "touched up version in $sibling/__init__.py"
    elif [ "$versionwarn" == "yes" ]; then
        warning "couldn't touch up __version__ in $sibling, no match found"
    fi
done

exit 0
