]> pd.if.org Git - zpackage/blob - zpm-pkg
change findpkg to use -f option
[zpackage] / zpm-pkg
1 #!/bin/sh
2
3 # edit package metadata
4
5 #zpm pkg -s packager=foo zpm
6
7 # zpm pkg -f <pkgfile> zpm packager=xyz
8 # zpm pkg zpm packager zyz
9 # zpm pkg zpm packager
10
11 warn() {
12         printf '%s:' "$0" 1>&2
13         printf ' %s' $* 1>&2
14         printf '\n' 1>&2
15         rv=1
16 }
17
18 die() {
19         printf '%s:' "$0" 1>&2
20         printf ' %s' $* 1>&2
21         printf '\n' 1>&2
22         exit 1
23 }
24
25 pkgfile=${ZPMDB:-/var/lib/zpm/db.zpm}
26
27 while getopts f: opt; do
28         case $opt in
29                 f) pkgfile="$OPTARG" ;;
30         esac
31 done
32 shift $((OPTIND - 1))
33
34 set -e
35
36 if [ ! -f $pkgfile ]; then
37         echo cannot find $pkgfile
38         exit 1
39 fi
40
41 item=$1
42 shift
43 #printf "pkg: %s\n" $pkg
44 pkgid=$(zpm findpkg -f $pkgfile "$item")
45
46 if [ -z "$pkgid" ]; then
47         die "can't find pkgid for $item in $pkgfile"
48 fi
49
50 (
51 rv=0
52
53 {
54 printf "begin;\n"
55 while [ $# -gt 0 ]; do
56         item=$1
57         shift
58         show=0
59         case "$item" in
60                 :*)
61                         pkgid=$(zpm findpkg -f $pkgfile "${item#:}")
62                         continue
63                         ;;
64                 *=*)
65                         field=${item%%=*}
66                         value=${item#*=}
67                         ;;
68                 *=)
69                         field=${item%%=*}
70                         value=
71                         ;;
72                 *)
73                 field=$item
74                 show=1
75                 ;;
76         esac
77
78         if [ -z "$pkgid" ]; then
79                 warn "can't find pkgid for $item in $pkgfile"
80                 break;
81         fi
82
83         vfield=$(zpm quote "$field")
84
85         hasfield=$(zpm shell $pkgfile "select name from pragma_table_info('packages') where name = '$vfield';")
86         if [ -z "$hasfield" ]; then
87                 warn "$field is not a valid package field"
88                 break
89         fi
90
91         field=$(zpm quote -i "$field")
92
93         if [ $show -eq 1 ]; then
94                 printf "select %s from packages_pkgid where pkgid = '%s';\n" "$field" "$pkgid"
95                 continue
96         fi
97
98         if [ -z "$value" ]; then
99                 value=NULL
100         else
101                 value=$(zpm quote -q "$value")
102         fi
103
104         printf "update packages_pkgid set %s = %s where pkgid = '$pkgid';\n" $field $value
105 done
106
107 if [ $rv -eq 0 ]; then
108         printf "commit;\n"
109 else
110         printf "rollback;\n"
111 fi
112
113 } | zpm shell $pkgfile
114 exit $rv
115 )