#!/bin/sh -e
# Copyright: (C) 2014 Michael Gilbert <mgilbert@debian.org>
# License: GPL-2+
# A debdiff for remote source packages using snapshot.debian.org.

url=http://snapshot.debian.org

fetch() {
    echo "$1_$2: downloading..." >&2
    source=$url/mr/package/$1/$2/srcfiles
    hashes=$(wget $source -q -O- | grep -Po '"'"hash"'"\s*:\s*"\K([^"]*)')
    if test -z "$hashes"; then
        echo "$1_$2 is not currently available from $url" >&2
        exit 1
    fi
    for hash in $(echo $hashes | sed s/\ /\\n/g); do
        info=$(wget $url/mr/file/$hash/info -q -O-)
        name=$(echo $info | grep -Po '"'"name"'"\s*:\s*"\K([^"]*)')
        if test $name = $1_$2.dsc; then
            path=$(echo $info | grep -Po '"'"path"'"\s*:\s*"\K([^"]*)')
            date=$(echo $info | grep -Po '"'"first_seen"'"\s*:\s*"\K([^"]*)')
            dget --quiet --download-only $dget $url/archive/debian/$date$path/$1\_$2.dsc >&2
        fi
    done
    echo "" >&2
}

if test $# = 0; then
    echo "usage: $(basename $0) <source package> [old version] [new version] [options]"
    echo "options:"
    echo "        --download-only (don't diff, just download)"
    exit 1
fi

package=$1
if test $# -gt 2; then
    oldversion=$2
    newversion=$3
else
    info=$(wget $url/mr/package/$package/ -q -O- | grep -Po '"'"version"'"\s*:\s*"\K([^"]*)'| head -2)
    oldversion=$(echo "$info" | tail -1)
    newversion=$(echo "$info" | head -1)
fi

test -x /usr/bin/diffstat && diffstat=--diffstat || diffstat=

fetch $package $oldversion
fetch $package $newversion

if test $(echo $4 | sed s/--//) != download-only; then
    debdiff $diffstat $package\_$oldversion.dsc $package\_$newversion.dsc
fi
