]> pd.if.org Git - zpackage/commitdiff
add rmpackage
authorNathan Wagner <nw@hydaspes.if.org>
Tue, 16 Oct 2018 10:32:57 +0000 (10:32 +0000)
committerNathan Wagner <nw@hydaspes.if.org>
Sat, 3 Nov 2018 12:39:52 +0000 (12:39 +0000)
added delete trigger for packages_pkgid to make removing packages
easier.  The install program will remove any existing package from the
recording database before doing a merge.  The test for an already
existing package is earlier, so this should be safe.

Makefile
db.sql
zpm-install
zpm-rmpackage [new file with mode: 0755]

index 75e3b8eb68d2f5a50ceef3cc27776b08335aedaa..f9ec250ab39d7c20917e0ef4eb346c4f62c84211 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -32,7 +32,7 @@ ZPKGBIN=zpm-addfile zpm-extract zpm-init zpm-vercmp zpm-stat zpm-hash \
        zpm-elftype
 
 SCRIPTS=zpm zpm-install zpm-merge zpm-list zpm-preserve zpm-test zpm-log \
-       zpm-contents zpm-uninstall zpm-pathmod
+       zpm-contents zpm-uninstall zpm-pathmod zpm-rmpackage
 COMPILED=$(ZPKGBIN)
 PROGRAMS=$(SCRIPTS) $(COMPILED)
 
diff --git a/db.sql b/db.sql
index d5b1d103113f304d55b16e73908dba1118349700..2418d12904b98fa323ed5c15aadd7d58afaf943d 100644 (file)
--- a/db.sql
+++ b/db.sql
@@ -61,6 +61,13 @@ create view packages_pkgid as
 select printf('%s-%s-%s', package, version, release) as pkgid, *
 from packages;
 
+create trigger packages_delete_trigger instead of
+delete on packages_pkgid
+begin
+       delete from packages where package = OLD.package
+       and version = OLD.version and release = OLD.release;
+end;
+
 create trigger packages_update_trigger instead of
 update on packages_pkgid
 begin
index 22192710afd1ccb589f959475f5ba27e30d84130..d0f2f32cf48bf64d8451753503641051e0f75ca2 100755 (executable)
@@ -156,6 +156,8 @@ for pkgstr in "$@"; do
        current=$(zpm list -s installed "$package")
        
        if [ $runscripts -gt 0 ]; then
+               # TODO run pre-upgrade script if needed
+               # zpm runscript -p pre-upgrade $current $pkgid
                zpm runscript -f $pkgfile -p pre-install $pkgid $current
                if [ $? -ne 0 ]; then
                        # TODO log
@@ -163,8 +165,16 @@ for pkgstr in "$@"; do
                fi
        fi
 
+       # remove the package if it exists.  can't be in an installed
+       # state, would have bailed above.  So, if it exists, can only
+       # be 'upgraded'.  This should be fast, because we won't run
+       # a garbage collect, so any possible duplicate files between
+       # an upgraded or removed files, if they're there, won't need
+       # to be merged.
+
        # only merge if localdb and pkgfile are different
        if [ "$pkgfile" != "$ZPMDB" ]; then
+               zpm rmpackage $pkgid
                zpm merge -f $pkgfile -s installing $pkgid
                if [ $? -ne 0 ]; then
                        # TODO log
diff --git a/zpm-rmpackage b/zpm-rmpackage
new file mode 100755 (executable)
index 0000000..1cb3956
--- /dev/null
@@ -0,0 +1,47 @@
+#!/bin/sh
+
+pkgfile=${ZPM_PACKAGE_FILE:-${ZPMDB:-/var/lib/zpm/local.db}}
+
+verbose=0
+
+# newpackage -f pkgfile $pkgid
+while getopts :f:v opt; do
+       case $opt in
+               f) pkgfile="$OPTARG" ;;
+               v) verbose=1 ;;
+       esac
+done
+shift $(( OPTIND - 1))
+
+die() {
+       echo $* 1>&2
+       exit 1
+}
+
+warn() {
+       echo $* 1>&2
+}
+
+if [ ! -f "$pkgfile" ]; then
+       die $pkgfile does not exist
+fi
+
+{
+       printf ".bail on\n"
+       printf "begin;\n"
+       for pkgstr in "$@"; do
+               pkgid=$(zpm findpkg -f $pkgfile "$pkgstr")
+               if [ $verbose -gt 0 ]; then
+                       if [ -z "$pkgid" ]; then
+                               warn "$pkgstr not found"
+                               continue;
+                       fi
+                       if [ $verbose -gt 1 ]; then
+                               warn "found %s -> %s\n" "$pkgstr", "$pkgid"
+                       fi
+               fi
+               pkgid=$(zpm quote "$pkgid")
+               printf "delete from packages_pkgid where pkgid = '$pkgid';\n"
+       done
+       printf "commit;\n"
+} | zpm shell $pkgfile