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)
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
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
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
--- /dev/null
+#!/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