#!/usr/bin/env bash

set -e

if (( "$#" != 1 ))
then
    echo "Tag has to be provided"
    exit 1
fi


if [ ! -f ./CHANGELOG_FUTURE.md ]; then
    echo "Release changelog has not been generated. File CHANGELOG_FUTURE.md does not exist."
    exit 1
fi

rm ./CHANGELOG_FUTURE.md

CURRENT_BRANCH=`git rev-parse --abbrev-ref HEAD`

git add CHANGELOG.md && git commit -m "Release $1" -S && git push origin "$CURRENT_BRANCH"

./bin/subtree-split

for REMOTE in origin stomp amqp-ext amqp-lib amqp-bunny amqp-tools pheanstalk gearman sqs sns snsqs gps fs redis dbal null rdkafka enqueue simple-client enqueue-bundle job-queue test async-event-dispatcher async-command mongodb wamp monitoring dsn
do
    echo ""
    echo ""
    echo "Releasing $REMOTE";

	TMP_DIR="/tmp/enqueue-repo"
    REMOTE_URL=`git remote get-url $REMOTE`

    rm -rf $TMP_DIR;
    mkdir $TMP_DIR;

    (
        cd $TMP_DIR;
        git clone $REMOTE_URL .
        git checkout "$CURRENT_BRANCH";
        # gsort comes with coreutils packages. brew install coreutils
        LAST_RELEASE=$(git tag -l [0-9].* | gsort -V | tail -n1 )
        if [[ -z "$LAST_RELEASE" ]]; then
            echo "There has not been any releases. Releasing $1";

            git tag $1 -s -m "Release $1"
            git push origin --tags
        else
            echo "Last release $LAST_RELEASE";

            CHANGES_SINCE_LAST_RELEASE=$(git log "$LAST_RELEASE"...master)
            CHANGES_SINCE_LAST_RELEASE="$CHANGES_SINCE_LAST_RELEASE" | xargs echo -n
            if [[ ! -z "$CHANGES_SINCE_LAST_RELEASE" ]]; then
                echo "There are changes since last release. Releasing $1";

                git tag $1 -s -m "Release $1"
                git push origin --tags
            else
                echo "No change since last release.";
            fi
        fi
    )
done
