#!/bin/sh
-package=${1:-$ZPMPACKAGE}
-pkgver=${ZPMPKGVER:-1.0}
-pkgrel=${ZPMPKGREL:-1}
+# edit package metadata
-while getopts :n:v:r:d:a:u:l:p:b: opt; do
+#zpm pkg -s packager=foo zpm
+
+# zpm pkg -f <pkgfile> zpm packager=xyz
+# zpm pkg zpm packager
+
+warn() {
+ printf '%s:' "$0" 1>&2
+ printf ' %s' $* 1>&2
+ printf '\n' 1>&2
+ rv=1
+}
+
+die() {
+ printf '%s:' "$0" 1>&2
+ printf ' %s' $* 1>&2
+ printf '\n' 1>&2
+ exit 1
+}
+
+pkgfile=${ZPMDB:-/var/lib/zpm/db.zpm}
+
+while getopts f: opt; do
case $opt in
- n) pkgfile="$OPTARG" ;;
- v) pkgver="$OPTARG" ;;
- r) pkgrel="$OPTARG" ;;
- d) description="$OPTARG" ;;
- a) arch="$OPTARG" ;;
- u) url="$OPTARG" ;;
- l) licenses="$OPTARG" ;;
- p) packager="$OPTARG" ;;
- b) builddate="$OPTARG" ;;
+ f) pkgfile="$OPTARG" ;;
esac
done
-
-pkgfile="$package-$pkgver-$pkgrel.zpm"
+shift $((OPTIND - 1))
set -e
if [ ! -f $pkgfile ]; then
- zpm init $pkgfile
+ echo cannot find $pkgfile
+ exit 1
fi
-for path in $*; do
- hash=$(zpm addfile $pkgfile $path)
+item=$1
+shift
+#printf "pkg: %s\n" $pkg
+pkgid=$(zpm findpkg -f $pkgfile "$item")
+
+if [ -z "$pkgid" ]; then
+ die "can't find pkgid for $item in $pkgfile"
+fi
+
+(
+rv=0
+
+{
+printf "begin;\n"
+while [ $# -gt 0 ]; do
+ item=$1
+ shift
+ show=0
+ case "$item" in
+ :*)
+ pkgid=$(zpm findpkg -f $pkgfile "${item#:}")
+ continue
+ ;;
+ *=*)
+ field=${item%%=*}
+ value=${item#*=}
+ ;;
+ *=)
+ field=${item%%=*}
+ value=
+ ;;
+ *)
+ field=$item
+ show=1
+ ;;
+ esac
+
+ if [ -z "$pkgid" ]; then
+ warn "can't find pkgid for $item in $pkgfile"
+ break;
+ fi
+
+ vfield=$(zpm quote "$field")
+
+ hasfield=$(zpm shell $pkgfile "select name from pragma_table_info('packages') where name = '$vfield';")
+ if [ -z "$hasfield" ]; then
+ warn "$field is not a valid package field"
+ break
+ fi
+
+ field=$(zpm quote -i "$field")
-zpm shell $pkgfile <<EOS
-insert into packagefiles
-values ('$package', nullif('$subpackage', ''), '$hash', '$path', NULL)
-;
-EOS
+ if [ $show -eq 1 ]; then
+ printf "select %s from packages_pkgid where pkgid = '%s';\n" "$field" "$pkgid"
+ continue
+ fi
+
+ if [ -z "$value" ]; then
+ value=NULL
+ else
+ value=$(zpm quote -q "$value")
+ fi
+
+ printf "update packages_pkgid set %s = %s where pkgid = '$pkgid';\n" $field "$value"
done
+
+if [ $rv -eq 0 ]; then
+ printf "commit;\n"
+else
+ printf "rollback;\n"
+fi
+
+} | zpm shell $pkgfile
+exit $rv
+)