]> wolfpit.net Git - tool/Arch-pacman/.git/commitdiff
repo-add; add option to remove existing package files from disk
authorPhillip Smith <fukawi2@gmail.com>
Mon, 3 Jun 2013 05:05:10 +0000 (15:05 +1000)
committerAllan McRae <allan@archlinux.org>
Thu, 6 Jun 2013 03:47:32 +0000 (13:47 +1000)
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>
doc/repo-add.8.txt
scripts/repo-add.sh.in

index 049195a7f95d6ca021fc0fa2e85d5591ba73c48c..80f5865875530d29711881e7467426da7b79bd2c 100644 (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]
index 4470dd0ad2c0e5c29380c60c45836a89b65ce6bc..a9a4499bbc9fa90d48c808f2c9da0da0c29e10be 100644 (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)