#!/bin/sh # Admin notes: # # Each note is just a file. Stored under /var/spool/admin/notes/[open|ack]// # # note: list notes # note ack - moves note to "acknowledged" spool # note list [package] show notes for a given package, or all notes # note delete - delete a note from the system # note edit [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