X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=zpm-note;h=e9115440fd74d7bc1791cdca78c1ee560734cbe2;hb=047ce51e23f95df6272b920d8a4edea7c0b25971;hp=2ca9a69a97bf1717788b9941ab8f474644fe7ca6;hpb=524ff12aea11e3aa31608f042a823d2bdd1163c1;p=zpackage diff --git a/zpm-note b/zpm-note index 2ca9a69..e911544 100755 --- a/zpm-note +++ b/zpm-note @@ -10,22 +10,43 @@ # note delete - delete a note from the system # note edit [file] - edit or create a note -SPOOL=/var/spool/admin/notes +# 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 + +SPOOL=/var/lib/admin/notes OPEN=$SPOOL/open -#umask 007 +set -e + +umask 007 -cd $SPOOL || { echo "can't chdir to $SPOOL" ; exit 1; } +#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") if [ -z "$file" ] ; then - printf "no such note $1\n" + [ -z "$quiet" ] || printf "no such note $1\n" + exit 1 + fi + echo $file +} + +findopen() { + file=$(find $SPOOL/open -type f -name "$1") + if [ -z "$file" ] ; then + [ -z "$quiet" ] || printf "no such open note $1\n" exit 1 fi echo $file @@ -33,15 +54,48 @@ findnote() { case $cmd in list) - find $SPOOL/open -type f -printf '%P\n' + 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' ') + owner=$(stat -c '%U' $SPOOL/open/$note) + printf '%*s %8s %s %s\n' $len $note $owner "$date" "$subject" + done ;; ack) - file=$(findnote $1) - mkdir -p $SPOOL/ack/$1 - mv $SPOOL/open/$1/$2 $SPOOL/ack/$1/$2 + file=$(findopen $1) + subfile=$(echo $file | sed -e "s|$SPOOL/open/||") + filedir=$(dirname $subfile) + mkdir -p $SPOOL/ack/$filedir + mv $file $SPOOL/ack/$filedir ;; new) - if [ $# -eq 1 ]; then set general $1; fi + # 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 $SPOOL/open) + pkg=$1 + [ -f $SPOOL/.template ] && cp $SPOOL/.template $tmp + ${EDITOR:-vi} $tmp + file=$(zpm sequence notes) + mv $tmp $SPOOL/open/$pkg/$file || { rm -f $tmp; exit 1; } + echo "$pkg/$file" + exit 0 + fi + + # take note from file or stdin pkg=$1 ; shift mkdir -p $SPOOL/open/$pkg case $1 in @@ -49,16 +103,17 @@ case $cmd in tmp=$(mktemp -p $SPOOL/open) cat - > $tmp file=$(zpm sequence notes) - mv $tmp $SPOOL/open/$pkg/$file - echo created $file + mv $tmp $SPOOL/open/$pkg/$file || { rm -f $tmp ; exit 1; } + echo $file ;; *) tmp=$(mktemp -p $SPOOL/open) - flock -n -E3 $tmp vim $tmp - if [ $? -eq 3 ]; then echo already editing $1; exit 1; fi + cp $1 $tmp + #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 + mv $tmp $SPOOL/open/$pkg/$file || { rm -f $tmp; exit 1; } + echo $file ;; esac ;; @@ -67,8 +122,19 @@ case $cmd in 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