diff --git a/contrib/completion/zsh/_devtools.in b/contrib/completion/zsh/_devtools.in index b93e510..48d3dfd 100644 --- a/contrib/completion/zsh/_devtools.in +++ b/contrib/completion/zsh/_devtools.in @@ -52,6 +52,7 @@ _diffpkg_args=( '(-y --side-by-side)'{-y,--side-by-side}'[Output in two columns]' '--color=[Color output]:when:($_colors[*])' '(-W --width=)'{-W,--width=}'[Output at most NUM print columns]:num:(auto columns)' + '(-P --pool=)'{-P,--pool=}'[pool directory]:dir:_files -/' '(-v --verbose)'{-v,--verbose}'[Provide more detailed/unfiltered output]' '(-h --help)'{-h,--help}'[Display usage]' '*:packages:_devtools_completions_all_packages' diff --git a/doc/man/diffpkg.1.asciidoc b/doc/man/diffpkg.1.asciidoc index 69e0c27..bfb2094 100644 --- a/doc/man/diffpkg.1.asciidoc +++ b/doc/man/diffpkg.1.asciidoc @@ -21,7 +21,7 @@ When given one package, use it to diff against the locally built one. When given two packages, diff both packages against each other. In either case, a package name will be converted to a filename from the -cache, and diffpkg will proceed as though this filename was initially +cache or pool, and diffpkg will proceed as though this filename was initially specified. Options @@ -30,6 +30,10 @@ Options *-M, --makepkg-config*:: Set an alternate makepkg configuration file + +*-P, --pool*='DIR':: + Search diff target in pool dir (default `'/srv/ftp/pool'`) + *-v, --verbose*:: Provide more detailed/unfiltered output diff --git a/src/diffpkg.in b/src/diffpkg.in index baeb546..5bae805 100644 --- a/src/diffpkg.in +++ b/src/diffpkg.in @@ -24,6 +24,7 @@ usage() { OPTIONS -M, --makepkg-config Set an alternate makepkg configuration file + -P, --pool=DIR Search diff target in pool dir (default '/srv/ftp/pool') -v, --verbose Provide more detailed/unfiltered output -h, --help Show this help text @@ -44,6 +45,8 @@ _EOF_ } MAKEPKG_CONF=/etc/makepkg.conf +POOLDIR=/srv/ftp/pool + VERBOSE=0 TARLIST=0 DIFFOSCOPE=0 @@ -63,6 +66,7 @@ while (( $# )); do exit 0 ;; -M|--makepkg-config) + (( $# <= 1 )) && die "missing argument for %s" "$1" MAKEPKG_CONF="$2" shift 2 ;; @@ -112,6 +116,15 @@ while (( $# )); do DIFFWIDTH="$1" shift ;; + -P|--pool) + (( $# <= 1 )) && die "missing argument for %s" "$1" + POOLDIR="$2" + shift 2 + ;; + --pool=*) + POOLDIR="${1#*=}" + shift + ;; --) shift break @@ -248,8 +261,19 @@ fetch_pkg() { pkg=$1 ;; esac - [[ -n $pkgurl ]] || pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$pkg") || - die "Couldn't download previous package for %s." "$pkg" + if [[ -z ${pkgurl} ]]; then + # Try to find latest package in pool dir + if [[ -d ${POOLDIR} ]]; then + shopt -s extglob nullglob + pkgurl=$(printf "%s\n" "${POOLDIR}"/*/"${_pkgname}"-!(*-*)-!(*-*)-!(*-*).pkg.tar!(*.sig)|sort -Vr|head -1) + shopt -u extglob nullglob + fi + # Search via pacman database if no pool file exists + if [[ ! -f ${pkgurl} ]]; then + pkgurl=$(pacman -Spdd --print-format '%l' --noconfirm "$pkg") || + die "Couldn't download previous package for %s." "$pkg" + fi + fi pkg=${pkgurl##*/} pkgdest=$(mktemp -t -d "${pkg}-XXXXXX")/${pkg}