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