summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--contrib/completion/zsh/_devtools.in1
-rw-r--r--doc/man/diffpkg.1.asciidoc6
-rw-r--r--src/diffpkg.in28
3 files changed, 32 insertions, 3 deletions
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}