# edit package metadata
-package=${1:-$ZPMPACKAGE}
-pkgver=${ZPMPKGVER:-1.0}
-pkgrel=${ZPMPKGREL:-1}
-
#zpm pkg -s packager=foo zpm
# zpm pkg -f <pkgfile> zpm packager=xyz
-# zpm pkg zpm packager zyz
# 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}
exit 1
fi
-pkg=$1
+item=$1
shift
#printf "pkg: %s\n" $pkg
-pkgid=$(zpm findpkg $pkgfile $pkg)
+pkgid=$(zpm findpkg -f $pkgfile "$item")
-#printf "pkgid: %s\n" $pkgid
+if [ -z "$pkgid" ]; then
+ die "can't find pkgid for $item in $pkgfile"
+fi
-case $1 in
- status) item=status ;;
- *) printf 'no such field %s\n' $1; exit 1 ;;
-esac
+(
+rv=0
-item=$1
+{
+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 [ -n "$2" ]; then
- setting=$2
-zpm shell $pkgfile <<EOS
-update packages set $item = '$setting'
-where
-printf('%s-%s-%s', package,version,release) = '$pkgid'
-;
-EOS
-else
- setting=$(zpm shell $pkgfile <<EOS
-select $item from packages
-where
-printf('%s-%s-%s', package,version,release) = '$pkgid'
-;
-EOS
-)
- if [ -n "$setting" ]; then
- printf '%s\n' "$setting"
+ 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")
+
+ 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
+)