#!/bin/bash

# DESCRIPTION:
#
# Get merged <tag id> <tag name> new-line separated list of annotated tags sorted by -taggerdate.
#
# env: GIT_ROOT, GIT_HEAD

cd "$GIT_ROOT"

legacy_git="$(/usr/bin/git --version | grep 'git version 1')"

function tag_filter {
    sed -En 's|(.+)\s+tag\s+refs/tags/(.+)|\1 \2|p'
}

if [ -n "$legacy_git" ]; then
    tag_refs="$(set -o pipefail; /usr/bin/git for-each-ref --sort=-taggerdate refs/tags | tag_filter)" || exit

    while read -r tag_id tag_name && [ -n "$tag_id" ]; do
        tag_merge_base="$(/usr/bin/git merge-base "$tag_id" "${GIT_HEAD-HEAD}")" || exit
        tag_commit="$(/usr/bin/git rev-parse "$tag_id"^{commit})" || exit

        if [ "$tag_merge_base" = "$tag_commit" ]; then
            echo "$tag_id $tag_name"
        fi
    done <<< "$tag_refs"
else
    set -o pipefail
    /usr/bin/git for-each-ref --merged="${GIT_HEAD-HEAD}" --sort=-taggerdate refs/tags | tag_filter || exit
    set +o pipefail
fi
