X-Git-Url: https://pd.if.org/git/?a=blobdiff_plain;f=zpm-note;h=f78bdd81c96861cdae5359b06827ba0155b2f7a4;hb=446d104827d78aaacdeba972a76f8bc490310132;hp=c036beb50a06c45a27bb60640dcb7710a4be7795;hpb=4ecb9e80dfe56b7e183d293c61aa435d8b490c2f;p=zpackage diff --git a/zpm-note b/zpm-note index c036beb..f78bdd8 100755 --- a/zpm-note +++ b/zpm-note @@ -10,89 +10,129 @@ # note delete - delete a note from the system # note edit [file] - edit or create a note -SPOOL=/var/lib/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 + +: ${ZPMSPOOL:=/var/lib/admin/notes} + +OPEN=$ZPMSPOOL/open 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") + file=$(find $ZPMSPOOL -type f -name "$1") if [ -z "$file" ] ; then - printf "no such note $1\n" + [ -z "$quiet" ] || printf "no such note $1\n" 1>&2 exit 1 fi echo $file } findopen() { - file=$(find $SPOOL/open -type f -name "$1") + file=$(find $ZPMSPOOL/open -type f -name "$1") if [ -z "$file" ] ; then - printf "no such open note $1\n" + [ -z "$quiet" ] || printf "no such open note $1\n" 1>&2 exit 1 fi echo $file } case $cmd in + category) + notefile=$(findnote $1) + printf "%s\n" $(basename $(dirname $notefile)) + ;; list) case $1 in - -a) find $SPOOL/ack -type f -printf '%P\n' | sort -n + -a) find $ZPMSPOOL/ack -type f -printf '%P\n' | sort -n ;; - *) find $SPOOL/open -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 + ;; + *) find $ZPMSPOOL/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" + 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|$SPOOL/open/||") + subfile=$(echo $file | sed -e "s|$ZPMSPOOL/open/||") filedir=$(dirname $subfile) - mkdir -p $SPOOL/ack/$filedir - mv $file $SPOOL/ack/$filedir + mkdir -p $ZPMSPOOL/ack/$filedir + mv $file $ZPMSPOOL/ack/$filedir ;; 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 + # 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