]> pd.if.org Git - zpackage/blobdiff - zpm-pkg
let newpackage set additional fields
[zpackage] / zpm-pkg
diff --git a/zpm-pkg b/zpm-pkg
index 663866ed2e0a074da7ce537097ed59c73c435426..56bd581e96f19fe292d4a4754609f648d7897da1 100755 (executable)
--- a/zpm-pkg
+++ b/zpm-pkg
@@ -2,18 +2,26 @@
 
 # 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}
+pkgfile=${ZPMDB:-/var/lib/zpm/local.db}
 
 while getopts f: opt; do
        case $opt in
@@ -29,38 +37,78 @@ if [ ! -f $pkgfile ]; then
        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
+)