#!/bin/sh

Usage() {
cat <<EOF
Usage: ${0##*/} [ file ]
   read stdout and stderr of a 'cvs status', printing shortened results
   it will only show modified, created, or deleted files.
   "Up to date" files are not mentioned
   
   file defaults to stdin

   example:
   cvs status 2>&1 | ${0##*/}
EOF
return 0
}

short_status() {
   local line="" change="" file=""
   while read line; do
      case "${line}" in
         cvs\ status:*Examining*)
            curdir=${line#cvs status: Examining } 
            ;;
         File:\ *Status:\ Locally*)
            change=${line##*Locally }
            file=${line%%Status:*}
            [ "$change" = "Removed" ] &&
               file=${file#File: no file } || file=${file#File: }
            printf "%-10s: %s\n" "${change}" "${curdir}/${file}"
            ;;
      esac
   done
   return 0
}

[ $# -lt 2 ] || { Usage 1>&2; exit 1; }
[ "$1" = "--help" -o "$1" = "-h" ] && { Usage; exit 0; }

input=${1:-/dev/stdin}
[ "$input" = "-" ] && input="/dev/stdin"
short_status < "${input}"
