repo-add; add option to remove existing package files from disk

When maintaining a custom repo, often it is undesirable to retain older
versions of packages. This patch adds the --remove option to remove the
current package file and it's signature from disk before adding the new
one to the database. Documentation is also updated. This is an optional
flag and default behaviour (leaving ondisk files alone) is not changed.

Signed-off-by: Phillip Smith <fukawi2@gmail.com>
Signed-off-by: Allan McRae <allan@archlinux.org>
This commit is contained in:
Phillip Smith 2013-06-03 15:05:10 +10:00 committed by Allan McRae
parent 37e85c0031
commit 58782b1c55
2 changed files with 16 additions and 0 deletions

View File

@ -75,6 +75,10 @@ repo-add Options
Only add packages that are not already in the database. Warnings will be
printed upon detection of existing packages, but they will not be re-added.
*-R, \--remove*::
Remove old package files from the disk when updating their entry in the
database.
See Also
--------
linkman:makepkg[8], linkman:pacman[8], linkman:pkgdelta[8]

View File

@ -31,6 +31,7 @@ declare -r confdir='@sysconfdir@'
QUIET=0
DELTA=0
ONLYADDNEW=0
RMEXISTING=0
WITHFILES=0
SIGN=0
VERIFY=0
@ -58,6 +59,7 @@ Multiple packages to add can be specified on the command line.\n")"
printf -- "$(gettext "Options:\n")"
printf -- "$(gettext " -d, --delta generate and add delta for package update\n")"
printf -- "$(gettext " -n, --new only add packages that are not already in the database\n")"
printf -- "$(gettext " -R, --remove remove package file from disk when updating database entry\n")"
printf -- "$(gettext " -f, --files update database's file list\n")"
elif [[ $cmd == "repo-remove" ]] ; then
printf -- "$(gettext "Usage: repo-remove [options] <path-to-db> <packagename|delta> ...\n")"
@ -304,6 +306,15 @@ db_write_entry() {
local oldfilename=$(grep -A1 FILENAME "$pkgentry/desc" | tail -n1)
local oldfile="$(dirname "$1")/$oldfilename"
fi
elif (( RMEXISTING )); then
# only remove existing package if we're not doing deltas
pkgentry=$(find_pkgentry "$pkgname")
if [[ -n $pkgentry ]]; then
local oldfilename="$(sed -n '/^%FILENAME%$/ {n;p;q;}' "$pkgentry/desc")"
local oldfile="$(dirname "$1")/$oldfilename"
msg2 "$(gettext "Removing existing package '%s'")" "$oldfilename"
rm -f ${oldfile} ${oldfile}.sig
fi
fi
fi
@ -611,6 +622,7 @@ while (( $# )); do
-q|--quiet) QUIET=1;;
-d|--delta) DELTA=1;;
-n|--new) ONLYADDNEW=1;;
-R|--remove) RMEXISTING=1;;
-f|--files) WITHFILES=1;;
--nocolor) USE_COLOR='n';;
-s|--sign)