#!/bin/bash

DIE() {
    echo "error: $@" >&2
    exit 1
}

Pkgdata() {  # returns lines in form: pkgname version
    local -r reponame="$1"
    expac -S "%r/%n %v" $(pacman -Slq $reponame) | grep ^$reponame/ | sed "s|^$reponame/||"
}
GetVer() {
    local PKGBUILD="$1"

    # To prevent conflicts, make all PKGBUILD variables local
    local pkgname=() pkgver="" pkgrel="" epoch="" pkgdesc="" url="" license=()
    local install="" changelog="" source=() validpgpkeys=() noextract=()
    local cksums=() md5sums=() sha1sums=() sha224sums=() sha384sums=() sha512sums=() b2sums=()
    local groups=() arch=() backup=() depends=() makedepends=() checkdepends=() optdepends=()
    local conflicts=() provides=() replaces=() options=()
    local source_x86_64=() cksums_x86_64=() md5sums_x86_64=() sha1sums_x86_64=()
    local sha224sums_x86_64=() sha384sums_x86_64=() sha512sums_x86_64=() b2sums_x86_64=()
    local depends_x86_64=() makedepends_x86_64=() checkdepends_x86_64=() optdepends_x86_64=()
    local conflicts_x86_64=() provides_x86_64=() replaces_x86_64=()

    source "$PKGBUILD" || DIE "$PKGBUILD not found"
    [ "$epoch" ] && epoch+=":"
    echo "$epoch${pkgver}-$pkgrel"
}
Pkgbuilddata() {
    local -r reponame="$1"

    pushd "$reponame" >/dev/null || DIE "pushd '$reponame' failed"
    [ -e assets.conf ] || DIE "assets.conf not found (wrong directory?)"
    source assets.conf

    local xx pkgdirname PKGBUILD version

    for xx in "${PKGNAMES[@]}" ; do
        pkgdirname=${xx%/aur}
        PKGBUILD="/data/code/EOS$PKGBUILD_ROOTDIR/$pkgdirname/PKGBUILD"
        # should use functions in assets.make...
        # version=$(GetVer "$PKGBUILD")
        version=$(GetVer "$PKGBUILD")
        echo "$pkgdirname $version"
    done
    popd >/dev/null
}

Main() {
    local reponame="$1"
    local pkgdata=""
    local pkgbuilddata=""
    local ret=0
    local diffs=""
    local pkgs=""
    local pkgdatafile=HUU.pkg
    local pkgbuilddatafile=HUU.pkgbuild

    Pkgdata "$reponame" > "$pkgdatafile"
    Pkgbuilddata "$reponame" > "$pkgbuilddatafile"

    diffs=$(diff "$pkgdatafile" "$pkgbuilddatafile")
    ret=$?
    if [ $ret -ne 0 ] ; then
        if false ; then
            pkgs=$(echo "$diffs" | grep "^> " | sed 's|> ||')
            echo "package updates:"
            echo -e "$pkgs\n"
            echo "diffs:"
            echo "$diffs"
        else
            /bin/meld "$pkgdatafile" "$pkgbuilddatafile"
        fi
    fi
    rm -f "$pkgdatafile" "$pkgbuilddatafile"
}

Main endeavouros
