#!/bin/sh

# input in versions.txt is <v1> <v2> with v1 < v2.
# v1 and v2 are of the form <version>-<date>-<hash>, where <version> includes:
# - 2.0.0
# - 2.0.0-10-gabcdef

freebsd_sanitize_version () {
    post=$(echo $1 | rev | cut -d '-' -f 1-2 | rev | sed -e 's/-/./g')
    v=$(echo $1 | rev | cut -d '-' -f 3- | rev | sed -e 's/-/./g')
    version_good=$(echo $v | grep -c '^[0-9]\+\.[0-9]\+\.[0-9]\+$')
    version_with_commit=$(echo $v | grep -c '^[0-9]\+\.[0-9]\+\.[0-9]\+\.[0-9]\+\.g[0-9a-fA-f]\+$')
    if [ $version_good -eq 0 -a $version_with_commit -eq 0 ]; then
        echo "invalid version $v";
        exit 1;
    fi
    if [ $version_with_commit -eq 0 ]; then
        v="${v}.0.g0000000.${post}"
    else
        v="${v}.${post}"
    fi
    echo $v
}

echo "using FreeBSD pkg to compare versions now:"
while read version_a version_b; do
	version_a=$(freebsd_sanitize_version $version_a)
	version_b=$(freebsd_sanitize_version $version_b)
	result=$(pkg version -t "$version_a" "$version_b")
	printf "%s %s %s\n" "$version_a" "$result" "$version_b"
done < versions.txt

debian_sanitize_version () {
    post=$(echo $1 | rev | cut -d '-' -f 1-2 | rev)
    v=$(echo $1 | rev | cut -d '-' -f 3- | rev)
    version_good=$(echo $v | grep -c '^[0-9]\+\.[0-9]\+\.[0-9]\+$')
    version_with_commit=$(echo $v | grep -c '^[0-9]\+\.[0-9]\+\.[0-9]\+\-[0-9]\+\-g[0-9a-fA-f]\+$')
    if [ $version_good -eq 0 -a $version_with_commit -eq 0 ]; then
        echo "invalid version $v";
        exit 1;
    fi
    if [ $version_with_commit -eq 0 ]; then
        v="${v}-0-g0000000-${post}"
    else
        v="${v}-${post}"
    fi
    echo $v
}

echo ""
echo "using Debian dpkg to compare versions now:"
while read version_a version_b; do
	version_a=$(debian_sanitize_version $version_a)
	version_b=$(debian_sanitize_version $version_b)
	if dpkg --compare-versions "$version_a" lt "$version_b"; then
		echo "$version_a < $version_b"
	else
		echo "$version_a >= $version_b"
	fi
done < versions.txt