#
# Debian stuff
#

# specific aliases / functions
alias lintian="lintian --color=auto -IEm --pedantic"
alias acp="apt-cache policy"
alias acs="apt-cache search"
alias acsh="apt-cache show"
alias adg"sudo apt-get dist-upgrade"
alias ag="sudo apt-get upgrade"
alias agi="sudo apt-get install"
alias au="sudo apt-get update"
alias aug="sudo apt-get update && sudo apt-get upgrade"

apt-rbdepends() {
    grep-dctrl -F Build-Depends "$1" -s Package /var/lib/apt/lists/*_Sources
}
debdoc() {
    cd /usr/share/doc/$1 && ls
}

dbug() {
    if [[ $# -eq 1 ]]; then
        case "$1" in
            [0-9]*)
                xdg-open "http://bugs.debian.org/$1"
            ;;
            *@*)
                xdg-open "http://bugs.debian.org/cgi-bin/pkgreport.cgi?submitter=$1"
            ;;
            *)
                xdg-open "http://bugs.debian.org/src:$*"
            ;;
        esac
    else
        print "$0 needs one argument"
        return 1
    fi
}

# specific completions
# rdebsign is a trivial shell script wrapper around debsign
compdef rdebsign=scp

# building environements
cow-dist() {
    if [ $# -lt 2 ]; then
        echo "Error args."
        return
    fi
    DIST=${1}
    shift
    OPTS=
    if [ "$1" = "--update" ]; then
        OPTS="--no-cowdancer-update"
    elif [ "$1" = "--build" -a -z "$2" ]; then
        if [ -f debian/changelog ]; then
            dsc=$(egrep -v "^([[:space:]]+|$)" debian/changelog| \
                sed 's/\([^ ]*\) (\([^)]*\)).*/..\/\1_\2.dsc/'|head -1)
            if [ -f "$dsc" ]; then
                OPTS="$dsc"
            fi
        fi
    fi
    time sudo -E DIST=${DIST} cowbuilder $@ ${OPTS}
    return $?
}

cow-dist-update () {
    for dist in $@ ; do
        cow-dist ${dist} --update
    done
}

PBUILDER_PATH=/var/cache/pbuilder
if [ -d "${PBUILDER_PATH}" ]; then
    PBUILDER_DISTS=
    for f in ${PBUILDER_PATH}/* ; do
        case "$f" in
            *-i386.cow|*-amd64.cow)
                dist=${f:t:r}
                PBUILDER_DISTS="${PBUILDER_DISTS} ${dist}"
                alias cow-${dist/-/}="cow-dist ${dist}"
            ;;
        esac
    done
    if [ -n "${PBUILDER_DISTS}" ]; then
        alias cow-update="cow-dist-update ${PBUILDER_DISTS}"
    fi
    unset PBUILDER_DISTS
fi
unset PBUILDER_PATH


pdebdiff() {
    if [ ! -r debian/changelog ]; then
        echo "ERR: can't read debian/changelog"
        return
    fi

     egrep -v "^([[:space:]]+|$)" debian/changelog | \
        sed 's/[^ ]* (\([^)]*\)).*/\1/' | \
        head -n2 | tr '\n' $IFS | \
        read v1 v2

   if [ -z "$v1" -o -z "$v2" ]; then
        echo "ERR: can't find version \$n and \$n-1 of the package";
        return
    fi

    if [ ! -r debian/control ]; then
        echo "ERR: can't read debian/control"
        return
    fi

    egrep '^(Package|Architecture): ' debian/control | \
        while read line ; do
            pkg=$(echo $line|sed 's/Package: //')
            read line
            arch=$(echo $line|sed 's/Architecture: //')
            if [ $arch = 'any' ]; then
                arch=$(dpkg-architecture -qDEB_HOST_ARCH)
            fi
            (
                echo "*** DIFF ${pkg}_${v2} -> ${pkg}_${v1} ***"
                echo
                debdiff ../${pkg}_${v2}_${arch}.deb ../${pkg}_${v1}_${arch}.deb
            ) | $PAGER
    done
}

pdeblint() {
    if [ ! -r debian/changelog ]; then
        echo "ERR: can't read debian/changelog"
        return
    fi

    v=$(egrep -v "^([[:space:]]+|$)" debian/changelog | \
        sed 's/[^ ]* (\([^)]*\)).*/\1/' | \
        head -n1)

    if [ ! -r debian/control ]; then
        echo "ERR: can't read debian/control"
        return
    fi

    pkg=$(grep '^Source: ' debian/control | sed 's/Source: //')
    arch=$(dpkg-architecture -qDEB_HOST_ARCH)

    changes="../${pkg}_${v}_${arch}.changes"
    if [ ! -r "$changes" ]; then
        echo "ERR: can't read changes file : ${changes}"
        return
    fi

    lintian --color=auto -IEm --pedantic $changes $@
}