First version. create, add, list, view
authorlbatlle@npdl268.bpo.hp.com
Tue, 24 Oct 2006 14:23:16 +0200
changeset 0 65975c04088e
child 1 62028bd0c3af
First version. create, add, list, view
bug
--- /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