+#!/bin/sh
+
+# Admin notes:
+#
+# Each note is just a file. Stored under /var/spool/admin/notes/[open|ack]/<package>/<note>
+#
+# note: list notes
+# note ack <note> - moves note to "acknowledged" spool
+# note list [package] show notes for a given package, or all notes
+# note delete <note> - delete a note from the system
+# note edit <package> [file] - edit or create a note
+
+SPOOL=/var/spool/admin/notes
+OPEN=$SPOOL/open
+
+#umask 007
+
+cd $SPOOL || { echo "can't chdir to $SPOOL" ; exit 1; }
+
+[ -z "$1" ] && set list
+
+cmd=$1
+shift
+
+findnote() {
+ file=$(find $SPOOL -type f -name "$1")
+ if [ -z "$file" ] ; then
+ printf "no such note $1\n"
+ exit 1
+ fi
+ echo $file
+}
+
+case $cmd in
+ list)
+ find $SPOOL/open -type f -printf '%P\n'
+ ;;
+ ack)
+ file=$(findnote $1)
+ mkdir -p $SPOOL/ack/$1
+ mv $SPOOL/open/$1/$2 $SPOOL/ack/$1/$2
+ ;;
+ new)
+ if [ $# -eq 1 ]; then set general $1; fi
+ pkg=$1 ; shift
+ mkdir -p $SPOOL/open/$pkg
+ case $1 in
+ '-')
+ tmp=$(mktemp -p $SPOOL/open)
+ cat - > $tmp
+ file=$(zpm sequence notes)
+ mv $tmp $SPOOL/open/$pkg/$file
+ echo created $file
+ ;;
+ *)
+ tmp=$(mktemp -p $SPOOL/open)
+ flock -n -E3 $tmp vim $tmp
+ if [ $? -eq 3 ]; then echo already editing $1; exit 1; fi
+ file=$(zpm sequence notes)
+ mv $tmp $SPOOL/open/$pkg/$file
+ rm -f $tmp
+ ;;
+ esac
+ ;;
+ edit)
+ file=$(findnote $1)
+ flock -n -E3 $file vim $file
+ if [ $? -eq 3 ]; then echo already editing $1; exit 1; fi
+ ;;
+ show)
+ file=$(findnote $1)
+ ${PAGER:-less} $file
+ ;;
+esac