summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhillip Smith <fukawi2@gmail.com>2013-06-03 15:05:10 +1000
committerAllan McRae <allan@archlinux.org>2013-06-06 13:47:32 +1000
commit58782b1c55043c8f4fe56ce7c18a6384f00143fd (patch)
tree481d7ce7e8c33e879441c341b8436e19a25638ff
parent37e85c0031147901b646574cf48b753a018e00c6 (diff)
downloadpacman-58782b1c55043c8f4fe56ce7c18a6384f00143fd.tar.xz
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>
-rw-r--r--doc/repo-add.8.txt4
-rw-r--r--scripts/repo-add.sh.in12
2 files changed, 16 insertions, 0 deletions
diff --git a/doc/repo-add.8.txt b/doc/repo-add.8.txt
index 049195a7..80f58658 100644
--- a/doc/repo-add.8.txt
+++ b/doc/repo-add.8.txt
@@ -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]
diff --git a/scripts/repo-add.sh.in b/scripts/repo-add.sh.in
index 4470dd0a..a9a4499b 100644
--- a/scripts/repo-add.sh.in
+++ b/scripts/repo-add.sh.in
@@ -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)