#!/bin/sh

case $# in
	0)	cat > .cvspatch.input; inputfile=.cvspatch.input ;;
	1)	inputfile=$1 ;;
	*)	echo 1>&2 "Usage: cvspatch cvs_diff_file"; exit 1 ;;
esac

awk '
BEGIN	{
		startline = 1;
		dirname = ".";
		useindex = 0;
		usecvsdiff = 0;
	}
useindex != 1 && $1 == "cvs" && $2 == "diff:" && $3 == "Diffing" {
		if (startline != NR) {
			printf "%s %d %d\n", dirname, startline, NR - 1;
		}
		usecvsdiff = 1;
	}
usecvsdiff != 1 && $1 == "Index:" {
		i = match($2, ".*\/");
		if (i > 0) {
			newdirname = substr($2, i, RLENGTH);

			if (newdirname != dirname) {
				printf "%s %d %d\n", dirname, startline, NR - 1;
				dirname = newdirname;
				startline = NR + 1;
			}
		}
		useindex = 1;
	}
END	{
		NR++;
		if (startline != NR) {
			printf "%s %d %d\n", dirname, startline, NR - 1;
		}
	}
' < $inputfile | \
while read dirname start end
do
	echo patching files in $dirname
	awk "{ if ($start <= NR && NR <= $end) print}" < $inputfile > $dirname/.cvspatch
	( cd $dirname ; patch < .cvspatch ; /bin/rm .cvspatch )
done

rm -f .cvspatch.input

exit 0
