[pacman-dev] [PATCH] repo-add; add option to remove existing package files from disk
Phillip Smith
lists at fukawi2.nl
Thu May 30 21:41:08 EDT 2013
From: Phillip Smith <fukawi2 at gmail.com>
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 at gmail.com>
---
Updated patch to use sed instead of awk as per suggestion from Dave Reisner.
doc/repo-add.8.txt | 6 ++++++
scripts/repo-add.sh.in | 12 ++++++++++++
2 files changed, 18 insertions(+)
diff --git a/doc/repo-add.8.txt b/doc/repo-add.8.txt
index 049195a..b06844b 100644
--- a/doc/repo-add.8.txt
+++ b/doc/repo-add.8.txt
@@ -75,6 +75,12 @@ 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*::
+ If an existing package with the same name exists in the database and on
+ disk, remove it from disk well as updating the database entry for the
+ package. This is designed to be Used when updating an existing package to
+ a new version.
+
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 4470dd0..962db3f 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 any existing packages with the same name (eg, an older version)\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)
--
1.8.3
More information about the pacman-dev
mailing list