#!/bin/sh
#	This file is part of the Concurrent Versions System CVS.
#	Written by Dick Grune, Vrije Universiteit, Amsterdam.
#	$Header: REP,v 3.3 89/10/06 12:58:01 dick Exp $

#
#		R E P e a t   a   C V S   c o m m a n d
#
Name=REP; export Name

# CVSBIN, CVSLIB and RCSBIN directories
CVSBIN=/home/top/dick/cvs
CVSLIB=/home/top/dick/cvs
RCSBIN=${RCSBIN-/usr/local/bin}
export CVSBIN CVSLIB RCSBIN

# avoid spurious identifications
PATH=${CVSPATH-/bin:/usr/bin}; export PATH

# get the one possible option
case "$1" in
-n)
	ACT=echo
	shift
	;;
esac

COMMAND=$1
case "$COMMAND" in
""|-*)
	echo Call is: $Name command \[ -n \] \[ parameters \] >&2
	exit 1
	;;
esac
shift

case "$COMMAND" in

AE|RM)# unapplicable commands
	echo $Name: command $COMMAND is not repeatable
	exit 1
	;;

DF|GC|LS|UV)# cat UserDir-list | REP $COMMAND
	while	read UserDir
	do
		if	[ "$UserDir" = "" ]
		then	continue
		fi
		(	echo Changing to directory $UserDir
			$ACT cd $UserDir
			$ACT $CVSBIN/$COMMAND
		)
	done
	;;

CM)	# cat UserDir-list | REP $COMMAND 'message'
	Message="$1"
	case "$Message" in
	"")
		echo $Name: command $COMMAND requires a message parameter >&2
		exit 1
		;;
	esac
	while	read UserDir
	do
		if	[ "$UserDir" = "" ]
		then	continue
		fi
		(	echo Changing to directory $UserDir
			$ACT cd $UserDir
			$ACT $CVSBIN/$COMMAND "$Message"
		)
	done
	;;

RC)	# cat Repository-list | REP $COMMAND [ -i ]
	if	# special output requested
		[ X"$1" = X-i ]
	then	# edit the output
		while	read Repository
		do
			if	[ "$Repository" = "" ]
			then	continue
			fi
			$ACT $CVSBIN/$COMMAND -i $Repository |
			sed 's|^|'"$Repository"' |'
		done
	else	# format the output
		while	read Repository
		do
			if	[ "$Repository" = "" ]
			then	continue
			fi
			echo Configuration history of $Repository
			$ACT $CVSBIN/$COMMAND $Repository
			echo ''
		done
	fi
	;;

HR)	# cat Repository-list | REP $COMMAND
	while	read Repository
	do
		if	[ "$Repository" = "" ]
		then	continue
		fi
		$ACT $CVSBIN/$COMMAND $Repository
	done |
	sort -nru |
	sed '1q'
	;;

LCK)	# cat Repository-list | REP $COMMAND [ on | off ]
	Request="$1"
	case "$Request" in
	on|off)	# OK
		;;
	*)
		echo $Name: command $COMMAND requires \
			a request parameter \[ on \| off \] >&2
		exit 1
		;;
	esac
	while	read Repository
	do
		if	[ "$Repository" = "" ]
		then	continue
		fi
		$ACT $CVSBIN/$COMMAND $Request $Repository
	done
	;;

NR)	# cat Repository-list | REP $COMMAND release-number
	RelNumber="$1"
	case "$RelNumber" in
	[0-9]*)	# OK
		;;
	*)
		echo $Name: command $COMMAND requires \
			a release-number parameter >&2
		exit 1
		;;
	esac
	while	read Repository
	do
		if	[ "$Repository" = "" ]
		then	continue
		fi
		$ACT $CVSBIN/$COMMAND $RelNumber $Repository
	done
	;;

CV|RV)	# cat Repository-UserDir-list | REP $COMMAND
	# cat Repository-UserDir-ConfIdf-list | REP $COMMAND
	while	read Repository UserDir ConfIdf
	do
		if	[ "$Repository" = "" ]
		then	continue
		fi
		if	[ "$UserDir" = "" ]
		then	echo $Name: no user directory for command \
				$COMMAND $Repository >&2
			exit 1
		fi
		if	[ $COMMAND = "RV" -a "$ConfIdf" = "" ]
		then	echo $Name: no configuration identifier for command \
				$COMMAND $Repository >&2
			exit 1
		fi
		if	# $UsedDir does not exist
			[ ! -d $UserDir ]
		then	# try to create it
			if	$ACT mkdir $UserDir
			then	:
			else	echo $Name: cannot make $UserDir >&2
				exit 1
			fi
		fi

		(	echo Changing to directory $UserDir
			$ACT cd $UserDir
			$ACT $CVSBIN/$COMMAND $Repository $ConfIdf
		)
	done
	;;

*)
	echo $Name: $COMMAND is an unknown command >&2
	exit 1
	;;
esac

exit 0

