#!/bin/sh
#
# Script to make entering and progressing issues easier.
#
# The issues are contained in an issues.db file, as a sequence of lines of
# tab-separated fields:
#
# - one-line description
# - resolution
# - reference mail thread (preferrably a URL)
# - raised on (date)
# - resolved on (date)
# - specification up-to-date?
# - issue number
#
USAGE="issues-db Last update: "`ls -l $ISSUES | cut -c 42-48`\
" (HTML version generated: "`date "$DATEFRM"`")"
}
add_issue ()
{
if [ -z "$ref" ]; then
prn "Reference (URL): "
read ref
fi
if [ -z "$desc" ]; then
prn "Description: "
read desc
fi
ref=`echo $ref | tr "& " " "`
desc=`echo $desc | tr "& " " "`
num=`wc -l $ISSUES|cut -c -8`
num=`expr $num + 1`
pr "$desc - $ref "`date "$DATEFRM"`" not yet no $num" >>$ISSUES
generate_html >$HTML
}
resolve_issue ()
{
if [ -z "$num" ]; then
prn "Number: "
read num
fi
case "$num" in
[0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9]) ;;
*) pr "Error: not a valid issue number: $num" >&2; return 2;;
esac
if [ -z "$res" ]; then
prn "Resolution: "
read res
fi
res=`echo $res | tr "& " " "`
date=`date "$DATEFRM"`
(
IFS=' '
#i=0
while read desc h1 ref date1 h2 spec i; do
#i=`expr $i + 1`
if [ $i = "$num" ]; then
echo "$desc $res $ref $date1 $date $spec $i"
else
echo "$desc $h1 $ref $date1 $h2 $spec $i"
fi
done < $ISSUES >$TMP
)
mv $TMP $ISSUES
generate_html >$HTML
}
update_issue ()
{
if [ -z "$num" ]; then
prn "Number: "
read num
fi
case "$num" in
[0-9] | [0-9][0-9] | [0-9][0-9][0-9] | [0-9][0-9][0-9][0-9]) ;;
*) pr "Error: not a valid issue number: $num" >&2; return 2;;
esac
(
IFS=' '
#i=0
while read desc res ref date1 date2 spec i; do
#i=`expr $i + 1`
if [ $i != "$num" ]; then
echo "$desc $res $ref $date1 $date2 $spec $i"
elif [ "$res" = "-" ]; then
pr "Error: cannot update; the issue must be resolved first" >&2
echo "$desc $res $ref $date1 $date2 $spec $i"
else
echo "$desc $res $ref $date1 $date2 yes $i"
fi
done < $ISSUES >$TMP
)
mv $TMP $ISSUES
generate_html >$HTML
}
interactive ()
{
while [ "$reply" != 'q' ]; do
reply=
pr
pr "Choose one of:"
while [ "$reply" = "" ]; do
pr " l list the issues"
pr " t list only unresolved issues"
pr " y list issues to be updated in the spec"
pr " a add an issue"
pr " r mark an issue as resolved"
pr " u mark the spec as up-to-date w.r.t. an issue"
pr " g generate HTML page with the issues"
pr " q quit"
prn "? "
read reply
case "$reply" in
l) list_issues | $PAGER;;
a) ref=; desc=; add_issue;;
r) num=; res=; resolve_issue;;
u) num=; update_issue;;
g) generate_html;;
t) list_unresolved | $PAGER ;;
y) list_to_be_updated | $PAGER;;
q) ;;
*) pr "Not understood, please try again"; reply=;;
esac
done
done
}
if [ $# = 0 ]; then
interactive
else
case "$1" in
-l) list_issues;;
-a) ref=$2; shift 2; desc="$*"; add_issue;;
-r) num=$2; shift 2; res="$*"; resolve_issue;;
-u) num=$2; update_issue;;
-g) generate_html;;
-t) list_unresolved;;
-y) list_to_be_updated;;
-?) quick_help;;
*) quick_help; exit 1;;
esac
fi
"
echo "
"
pr ""
echo " #"
echo " Description"
echo " Resolution"
echo " Reference"
echo " Archived on"
echo " Resolved on"
echo " Spec up-to-date?"
sort -r -t ' ' -k 5,6 -k 7,8nr $ISSUES |
(
IFS=' '
#i=0
while read desc res ref date1 date2 spec i; do
#i=`expr $i + 1`
if [ "$res" = "-" ]; then
class=unresolved
else
class=resolved
fi
echo " "
echo " $i"
echo " $desc"
echo " $res"
case "$ref" in
http:* | ftp:*) echo " here";;
*) echo " $ref";;
esac
echo " $date1"
echo " $date2"
echo " $spec"
done
)
pr "