]> pd.if.org Git - zpackage/blobdiff - bin/zpm-list
move programs to bin for build
[zpackage] / bin / zpm-list
diff --git a/bin/zpm-list b/bin/zpm-list
new file mode 100755 (executable)
index 0000000..7ea697b
--- /dev/null
@@ -0,0 +1,74 @@
+#!/bin/sh
+
+# zpm-list [-s status] [-vn] [ -f pkgfile ] [pkgid ...]
+
+verbose=0
+nameonly=0
+latestonly=1
+
+while getopts :s:f:vnIF: opt; do
+       case $opt in
+               f) pkgfile="$OPTARG" ;;
+               s) status="$OPTARG" ;;
+               I) status=installed ;;
+               v) verbose=1 ;;
+               n) nameonly=1 ;;
+               a) latestonly=0 ;;
+               F) filter="$OPTARG" ;;
+       esac
+done
+shift $(( OPTIND - 1))
+
+: ${pkgfile:=${ZPMDB:-/var/lib/zpm/local.db}}
+
+if [ -z "$pkgfile" ]; then
+       echo "must specify package file"
+       exit 1
+fi
+
+if [ $nameonly -eq 0 ]; then
+       cols="pkgid"
+else
+       cols="package"
+fi
+
+if [ $verbose -eq 1 ]; then
+       cols="$cols,coalesce(status,'-')"
+fi
+
+if [ -n "$status" ]; then
+       status=$(zpm quote "$status")
+       where="and status = '$status'"
+fi
+
+if [ -n "$filter" ]; then
+       where="$where and ($filter)"
+fi
+
+pkgid=$1
+
+if [ -n "$pkgid" ]; then
+       eval $(zpm parse -E "$pkgid")
+       if [ -n "$name" ]; then
+               package=$(zpm quote "$name")
+               where="$where and package = '$package'"
+       fi
+       if [ -n "$version" ]; then
+               version=$(zpm quote "$version")
+               where="$where and version = '$version'"
+       fi
+       if [ -n "$release" ]; then
+               release=$(zpm quote "$release")
+               where="$where and release = '$release'"
+       fi
+fi
+
+zpm shell $pkgfile <<EOS
+.separator "\t"
+select $cols from packages_pkgid where true $where
+;
+EOS
+
+if [ $? -ne 0 ]; then
+       echo "select $cols from packages_pkgid where true $where" 1>&2
+fi