First version. create, add, list, view
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bug Tue Oct 24 14:23:16 2006 +0200
@@ -0,0 +1,191 @@
+#!/bin/bash
+
+PNAME="$0"
+CMD="$1"
+
+if [ "x$EDITOR" == "x" ]; then
+ EDITOR=vim
+fi
+
+function usage
+{
+ echo "usage: $PNAME <add | list | search | create>"
+}
+
+function create
+{
+ echo 0 > "$BUG_PROJECT"
+}
+
+function getnext
+{
+ head -n 1 "$BUG_PROJECT"
+}
+
+function updatenext
+{
+ NEXT=$1
+ ed $BUG_PROJECT >&/dev/null << END
+1
+c
+$NEXT
+.
+w
+q
+END
+
+}
+
+function trim
+{
+ sed 's/^ *//g; s/ *$//g'
+}
+function trimlastdbNL
+{
+ sed 's/\\n$//g'
+}
+
+function noNL
+{
+ tr -d "\\n"
+}
+
+function string2db
+{
+ noNL | trim | sed 's/\t/\\t/g'
+}
+
+function text2db
+{
+ sed 's/\t/\\t/g ; s/$/\\/g' | tr "\\n" n
+}
+
+function db2text
+{
+ sed 's/\\t/\t/g ; s/\\n/\n/g'
+}
+
+function addfile
+{
+ ID=`grep "^Id:" $1 | head -n 1 | cut -d : -f 2 | string2db`
+ SUBJECT=`grep "^Subject:" $1 | head -n 1 | cut -d : -f 2 | string2db`
+ STATE=`grep "^State:" $1 | head -n 1 | cut -d : -f 2 | string2db`
+ PRIORITY=`grep "^Priority:" $1 | head -n 1 | cut -d : -f 2 | string2db`
+
+ if ( [ "x$SUBJECT" == "" ] || [ "x$PRIORITY" == "" ] ); then
+ echo "Error in ticket: subject or priority." 2>&1
+ return 1
+ fi
+
+ LINES=`cat $1 | wc -l`
+
+ # Substract Id, Subject and Priority
+ TOTAIL=$(( LINES - 4 ))
+ DESCRIPTION=`tail -n $TOTAIL $1 | text2db | trimlastdbNL`
+
+ echo "$ID $PRIORITY $STATE $SUBJECT $DESCRIPTION" >> $BUG_PROJECT
+ updatenext $((ID + 1))
+ return 0
+}
+
+function list
+{
+ echo "Id Prior. State Subject"
+ LINES=`cat $BUG_PROJECT | wc -l`
+
+ # Substract Meta and sort by priority the output
+ TOTAIL=$(( LINES - 1 ))
+ tail -n $TOTAIL $BUG_PROJECT | cut -f 1,2,3 | sort -n -r -k 2
+}
+
+function view
+{
+ ID=$1
+
+ LINES=`cat $BUG_PROJECT | wc -l`
+ # Substract Meta and sort by priority the output
+ TOTAIL=$(( LINES - 1 ))
+ LINE=`tail -n $TOTAIL $BUG_PROJECT | grep "^$ID"'\t'`
+
+ if [ "x$LINE" != "x" ]; then
+ PRIORITY=`echo "$LINE" | cut -f 2`
+ STATE=`echo "$LINE" | cut -f 3`
+ SUBJECT=`echo "$LINE" | cut -f 4`
+ DESCRIPTION=`echo "$LINE" | cut -f 5`
+
+ echo "Id: $ID" | db2text
+ echo "Priority: $PRIORITY" | db2text
+ echo "State: $STATE" | db2text
+ echo "Subject: $SUBJECT" | db2text
+ echo "-- Description below --"
+ echo "$DESCRIPTION" | db2text
+ else
+ echo "Id not found." 2>&1
+ fi
+}
+
+function add
+{
+ # Get a random file
+ FILE="/tmp/$RANDOM.txt"
+ while [ -f "$FILE" ]; do
+ FILE="/tmp/$RANDOM.txt"
+ done
+
+ ID=`getnext`
+
+ cat > "$FILE" << TEMPLATE
+Id: $ID
+Priority:
+State:
+Subject:
+-- Description below --
+TEMPLATE
+ MD5=`md5sum "$FILE"`
+
+ "$EDITOR" "$FILE"
+
+ MD5_bis=`md5sum "$FILE"`
+
+ if [ "$MD5" != "$MD5_bis" ]; then
+ addfile "$FILE" && rm "$FILE"
+ else
+ echo "File not changed. Not adding a ticket."
+ rm "$FILE"
+ fi
+
+}
+
+if [ "x$BUG_PROJECT" == "x" ]; then
+ echo "\$BUG_PROJECT is not set"
+ exit 1
+fi
+
+if [ "x$CMD" == "x" ]; then
+ usage
+ exit 1
+fi
+
+case "$CMD" in
+ add)
+ add
+ ;;
+ list)
+ list
+ ;;
+ view)
+ view $2
+ ;;
+ edit)
+ edit $2
+ ;;
+ create)
+ create
+ ;;
+ *)
+ usage
+ exit 1
+ ;;
+esac
+
+# vim:ts=8:sw=8:noet