[pacman-dev] [PATCH] repo-add; add option to remove existing package files from disk
From: Phillip Smith <fukawi2@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@gmail.com> --- Updated man page and in-line help text to incorporate suggestions from Allan. doc/repo-add.8.txt | 4 ++++ scripts/repo-add.sh.in | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/doc/repo-add.8.txt b/doc/repo-add.8.txt index 049195a..084da5f 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 4470dd0..a9a4499 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) -- 1.8.3
On 03/06/13 15:05, Phillip Smith wrote:
From: Phillip Smith <fukawi2@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@gmail.com> ---
Updated man page and in-line help text to incorporate suggestions from Allan.
Ack. I've fixed your whitespace issue (spaces instead of tabs) and pushed to my working branch. Allan
doc/repo-add.8.txt | 4 ++++ scripts/repo-add.sh.in | 12 ++++++++++++ 2 files changed, 16 insertions(+)
diff --git a/doc/repo-add.8.txt b/doc/repo-add.8.txt index 049195a..084da5f 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 4470dd0..a9a4499 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)
On 3 June 2013 15:09, Allan McRae <allan@archlinux.org> wrote:
Ack. I've fixed your whitespace issue (spaces instead of tabs) and pushed to my working branch.
Thanks :) Sorry about the whitespace; my .vimrc would have done that.
participants (2)
-
Allan McRae
-
Phillip Smith