#!/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 set -e #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 } findopen() { file=$(find $SPOOL/open -type f -name "$1") if [ -z "$file" ] ; then printf "no such open note $1\n" exit 1 fi echo $file } case $cmd in list) case $1 in -a) find $SPOOL/ack -type f -printf '%P\n' | sort -n ;; *) find $SPOOL/open -type f -printf '%P\n' | sort -n ;; esac ;; detail) len=$(find $SPOOL/open -type f -printf "%P\n" | awk ' { if ( length > x ) { x = length } }END{ print x }') find $SPOOL/open -type f -printf "%P\n" | sort -n | while read note ; do subject=$(head -1 $SPOOL/open/$note) date=$(stat -c '%y' $SPOOL/open/$note | cut -f1 -d' ') printf '%*s %s %s\n' $len $note "$date" "$subject" done ;; ack) file=$(findopen $1) subfile=$(echo $file | sed -e "s|$SPOOL/open/||") filedir=$(dirname $subfile) mkdir -p $SPOOL/ack/$filedir mv $file $SPOOL/ack/$filedir exit 0 ;; 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 || { rm -f $tmp ; exit 1; } 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; exit 1; } echo created $file ;; 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