# 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
+# TODO
+# discard unchanged new note file
+# quiet options to suppress new note name echo
+# semi-quiet to just output the number
+# renumber? to renumber all notes/reset sequence
+# lock the temp files
+# clean up unlocked temp files
-#umask 007
+: ${ZPMSPOOL:=/var/lib/admin/notes}
-cd $SPOOL || { echo "can't chdir to $SPOOL" ; exit 1; }
+OPEN=$ZPMSPOOL/open
+
+set -e
+
+umask 007
+
+#cd $SPOOL || { echo "can't chdir to $SPOOL" ; exit 1; }
[ -z "$1" ] && set list
+quiet=
+
cmd=$1
shift
findnote() {
- file=$(find $SPOOL -type f -name "$1")
+ file=$(find $ZPMSPOOL -type f -name "$1")
+ if [ -z "$file" ] ; then
+ [ -z "$quiet" ] || printf "no such note $1\n" 1>&2
+ exit 1
+ fi
+ echo $file
+}
+
+findopen() {
+ file=$(find $ZPMSPOOL/open -type f -name "$1")
if [ -z "$file" ] ; then
- printf "no such note $1\n"
+ [ -z "$quiet" ] || printf "no such open note $1\n" 1>&2
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
+ category)
+ notefile=$(findnote $1)
+ printf "%s\n" $(basename $(dirname $notefile))
;;
- new)
- if [ $# -eq 1 ]; then set general $1; fi
- pkg=$1 ; shift
- mkdir -p $SPOOL/open/$pkg
+ list)
case $1 in
- '-')
- tmp=$(mktemp -p $SPOOL/open)
- cat - > $tmp
- file=$(zpm sequence notes)
- mv $tmp $SPOOL/open/$pkg/$file
- echo created $file
+ -a) find $ZPMSPOOL/ack -type f -printf '%P\n' | sort -n
+ ;;
+ ?*) if [ -d $ZPMSPOOL/open/$1 ] ; then
+ find $ZPMSPOOL/open/$1 -type f -printf '%P\n' | sort -n
+ else
+ exit 1
+ fi
;;
- *)
- 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
+ *) find $ZPMSPOOL/open -type f -printf '%P\n' | sort -n
;;
esac
;;
+ detail)
+ len=$(find $ZPMSPOOL/open -type f -printf "%P\n" | awk ' { if ( length > x ) { x = length } }END{ print x }')
+ find $ZPMSPOOL/open -type f -printf "%P\n" | sort -n | while read note ; do
+ subject=$(head -1 $ZPMSPOOL/open/$note)
+ date=$(stat -c '%y' $ZPMSPOOL/open/$note | cut -f1 -d' ')
+ owner=$(stat -c '%U' $ZPMSPOOL/open/$note)
+ printf '%*s %8s %s %s\n' $len $note $owner "$date" "$subject"
+ done
+ ;;
+ ack)
+ file=$(findopen $1)
+ subfile=$(echo $file | sed -e "s|$ZPMSPOOL/open/||")
+ filedir=$(dirname $subfile)
+ mkdir -p $ZPMSPOOL/ack/$filedir
+ mv $file $ZPMSPOOL/ack/$filedir
+ ;;
+ new)
+ # new -- edit a new file for package general (or ZPMNOTEPACKAGE)
+ # new package -- edit a new note for package
+ # new package file -- use file for new package note
+ if [ $# -eq 0 ]; then set ${ZPMNOTEPACKAGE:-general}; fi
+
+ # edit a new file for the note
+ if [ $# -eq 1 ]; then
+ tmp=$(mktemp -p $ZPMSPOOL/open)
+ pkg=$1
+ [ -f $ZPMSPOOL/.template ] && cp $ZPMSPOOL/.template $tmp
+ #flock -n -E3 $tmp vim $tmp
+ #if [ $? -eq 3 ]; then echo already editing $1; exit 1; fi
+ ${EDITOR:-vi} $tmp
+ else
+ # take note from file or stdin
+ pkg=$1 ; shift
+ mkdir -p $ZPMSPOOL/open/$pkg
+ case $1 in
+ '-')
+ tmp=$(mktemp -p $ZPMSPOOL/open)
+ cat - > $tmp
+ ;;
+ *)
+ tmp=$(mktemp -p $ZPMSPOOL/open)
+ cp $1 $tmp
+ ;;
+ esac
+ fi
+ file=$(zpm sequence notes)
+ mkdir -p $ZPMSPOOL/open/$pkg
+ mv $tmp $ZPMSPOOL/open/$pkg/$file || { rm -f $tmp; exit 1; }
+ # TODO run newhooks in $ZPMSPOOL/.hook/newnote
+ echo "$pkg/$file"
+ exit 0
+ ;;
edit)
file=$(findnote $1)
flock -n -E3 $file vim $file
if [ $? -eq 3 ]; then echo already editing $1; exit 1; fi
;;
+ resolve)
+ file=$(findnote $1)
+ echo $file
+ ;;
+ remove)
+ file=$(findnote $1)
+ rm $file
+ ;;
show)
file=$(findnote $1)
${PAGER:-less} $file
;;
+ *)
+ echo '$0: unknown command ' $cmd 1>&2
+ exit 1
esac