X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;ds=sidebyside;f=bin%2Fzpm-pkgfile;fp=bin%2Fzpm-pkgfile;h=1950d8b5e6e08d448dd355c8b9571db6bc60b677;hb=0419c62f964b259df1c1816f5870ef62eb97ed7c;hp=0000000000000000000000000000000000000000;hpb=0c2216d1e0dc8565a6bf61c9572e47bb1ae1c1fb;p=zpackage diff --git a/bin/zpm-pkgfile b/bin/zpm-pkgfile new file mode 100755 index 0000000..1950d8b --- /dev/null +++ b/bin/zpm-pkgfile @@ -0,0 +1,126 @@ +#!/bin/sh + +# edit package file metadata + +#zpm pkg -s packager=foo zpm + +# zpm pkg -f zpm file/path configuration=1 +# 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/local.db} + +while getopts f: opt; do + case $opt in + f) pkgfile="$OPTARG" ;; + esac +done +shift $((OPTIND - 1)) + +if [ ! -f $pkgfile ]; then + echo cannot find $pkgfile + exit 1 +fi + +( +rv=0 + +{ +printf "begin;\n" +while [ $# -gt 0 ]; do + item=$1 + shift + if [ -z "$pkgid" ]; then + item=":${item#:}" + elif [ -z "$path" ]; then + item="/${item#/}" + fi + + show=0 + case "$item" in + :*) + pkgid=$(zpm findpkg -f $pkgfile "${item#:}") + if [ -z "$pkgid" ]; then + warn "can't find pkgid ${item#:} in $pkgfile" + break; + fi + continue + ;; + /*) + path="$item" + continue + ;; + *=*) + field=${item%%=*} + value=${item#*=} + ;; + *=) + field=${item%%=*} + value= + ;; + *) + field=$item + show=1 + ;; + esac + + if [ -z "$path" ]; then + warn "no package file path specified" + break; + fi + + vfield=$(zpm quote "$field") + + hasfield=$(zpm shell $pkgfile "select name from pragma_table_info('packagefiles_pkgid') where name = '$vfield';") + if [ -z "$hasfield" ]; then + warn "$field is not a valid packagefile field" + break + fi + + field=$(zpm quote -i "$field") + vpath=$(zpm quote "$path") + vpkg=$(zpm quote "$pkgid") + + haspath=$(zpm shell $pkgfile "select 1 from packagefiles_pkgid where pkgid = '$vpkg' and path = '$vpath';") + if [ "$haspath" != 1 ]; then + warn "$path not in $pkgid" + break + fi + + if [ $show -eq 1 ]; then + printf "select %s from packagefiles_pkgid where pkgid = '%s' and path = '%s';\n" "$field" "$pkgid" "$vpath" + continue + fi + + if [ -z "$value" ]; then + value=NULL + else + value=$(zpm quote -q "$value") + fi + + printf "update packagefiles_pkgid set %s = %s where pkgid = '$pkgid' and path = '%s';\n" $field $value "$vpath" +done + +if [ $rv -eq 0 ]; then + printf "commit;\n" +else + printf "rollback;\n" +fi + +#} | cat +} | zpm shell $pkgfile +exit $rv +)