]> pd.if.org Git - zpackage/blob - zpm-note
c036beb50a06c45a27bb60640dcb7710a4be7795
[zpackage] / zpm-note
1 #!/bin/sh
2
3 # Admin notes:
4
5 # Each note is just a file.  Stored under /var/spool/admin/notes/[open|ack]/<package>/<note>
6
7 # note: list notes
8 # note ack <note> - moves note to "acknowledged" spool
9 # note list [package] show notes for a given package, or all notes
10 # note delete <note> - delete a note from the system
11 # note edit <package> [file] - edit or create a note
12
13 SPOOL=/var/lib/admin/notes
14 OPEN=$SPOOL/open
15
16 set -e
17
18 umask 007
19
20 cd $SPOOL || { echo "can't chdir to $SPOOL" ; exit 1; }
21
22 [ -z "$1" ] && set list
23
24 cmd=$1
25 shift
26
27 findnote() {
28         file=$(find $SPOOL -type f -name "$1")
29         if [ -z "$file" ] ; then
30                 printf "no such note $1\n"
31                 exit 1
32         fi
33         echo $file
34 }
35
36 findopen() {
37         file=$(find $SPOOL/open -type f -name "$1")
38         if [ -z "$file" ] ; then
39                 printf "no such open note $1\n"
40                 exit 1
41         fi
42         echo $file
43 }
44
45 case $cmd in
46         list)
47                 case $1 in
48                         -a) find $SPOOL/ack -type f -printf '%P\n' | sort -n
49                                 ;;
50                         *) find $SPOOL/open -type f -printf '%P\n' | sort -n
51                                 ;;
52                 esac
53                 ;;
54         detail)
55                 len=$(find $SPOOL/open -type f -printf "%P\n" | awk ' { if ( length > x ) { x = length } }END{ print x }')
56                 find $SPOOL/open -type f -printf "%P\n" | sort -n | while read note ; do
57                         subject=$(head -1 $SPOOL/open/$note)    
58                         date=$(stat -c '%y' $SPOOL/open/$note | cut -f1 -d' ')
59                         printf '%*s %s %s\n' $len $note "$date" "$subject"
60                 done
61                 ;;
62         ack)
63                 file=$(findopen $1)
64                 subfile=$(echo $file | sed -e "s|$SPOOL/open/||")
65                 filedir=$(dirname $subfile)
66                 mkdir -p $SPOOL/ack/$filedir
67                 mv $file $SPOOL/ack/$filedir
68                 ;;
69         new)
70                 if [ $# -eq 1 ]; then set general $1; fi
71                 pkg=$1 ; shift
72                 mkdir -p $SPOOL/open/$pkg
73                 case $1 in
74                         '-')
75                                 tmp=$(mktemp -p $SPOOL/open)
76                                 cat - > $tmp
77                                 file=$(zpm sequence notes)
78                                 mv $tmp $SPOOL/open/$pkg/$file || { rm -f $tmp ; exit 1; }
79                                 echo created $file
80                                 ;;
81                         *)
82                                 tmp=$(mktemp -p $SPOOL/open)
83                                 flock -n -E3 $tmp vim $tmp
84                                 if [ $? -eq 3 ]; then echo already editing $1; exit 1; fi
85                                 file=$(zpm sequence notes)
86                                 mv $tmp $SPOOL/open/$pkg/$file || { rm -f $tmp; exit 1; }
87                                 echo created $file
88                                 ;;
89                 esac
90                 ;;
91         edit)
92                 file=$(findnote $1)
93                 flock -n -E3 $file vim $file
94                 if [ $? -eq 3 ]; then echo already editing $1; exit 1; fi
95                 ;;
96         remove)
97                 file=$(findnote $1)
98                 rm $file
99                 ;;
100         show)
101                 file=$(findnote $1)
102                 ${PAGER:-less} $file
103                 ;;
104         *)
105                 echo '$0: unknown command ' $cmd 1>&2
106                 exit 1
107 esac