186d7f5d3SJohn Marino#! /bin/sh 286d7f5d3SJohn Marino 386d7f5d3SJohn Marino# Test RCS's functions. 486d7f5d3SJohn Marino# The RCS commands are searched for in the PATH as usual; 586d7f5d3SJohn Marino# to test the working directory's commands, prepend . to your PATH. 686d7f5d3SJohn Marino 786d7f5d3SJohn Marino# Test RCS by creating files RCS/a.* and RCS/a.c. 886d7f5d3SJohn Marino# If all goes well, output nothing, and remove the temporary files. 986d7f5d3SJohn Marino# Otherwise, send a message to standard output. 1086d7f5d3SJohn Marino# Exit status is 0 if OK, 1 if an RCS bug is found, and 2 if scaffolding fails. 1186d7f5d3SJohn Marino# With the -v option, output more debugging info. 1286d7f5d3SJohn Marino 1386d7f5d3SJohn Marino# If diff outputs `No differences encountered' when comparing identical files, 1486d7f5d3SJohn Marino# then rcstest may also output these noise lines; ignore them. 1586d7f5d3SJohn Marino 1686d7f5d3SJohn Marino# The current directory and ./RCS must be readable, writable, and searchable. 1786d7f5d3SJohn Marino 1886d7f5d3SJohn Marino# $FreeBSD: src/gnu/usr.bin/rcs/rcstest,v 1.5 1999/08/27 23:36:37 peter Exp $ 1986d7f5d3SJohn Marino# $DragonFly: src/gnu/usr.bin/rcs/rcstest,v 1.2 2003/06/17 04:25:47 dillon Exp $ 2086d7f5d3SJohn Marino 2186d7f5d3SJohn Marino 2286d7f5d3SJohn Marino# Copyright 1990, 1991, 1992, 1993, 1994, 1995 Paul Eggert 2386d7f5d3SJohn Marino# Distributed under license by the Free Software Foundation, Inc. 2486d7f5d3SJohn Marino# 2586d7f5d3SJohn Marino# This file is part of RCS. 2686d7f5d3SJohn Marino# 2786d7f5d3SJohn Marino# RCS is free software; you can redistribute it and/or modify 2886d7f5d3SJohn Marino# it under the terms of the GNU General Public License as published by 2986d7f5d3SJohn Marino# the Free Software Foundation; either version 2, or (at your option) 3086d7f5d3SJohn Marino# any later version. 3186d7f5d3SJohn Marino# 3286d7f5d3SJohn Marino# RCS is distributed in the hope that it will be useful, 3386d7f5d3SJohn Marino# but WITHOUT ANY WARRANTY; without even the implied warranty of 3486d7f5d3SJohn Marino# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 3586d7f5d3SJohn Marino# GNU General Public License for more details. 3686d7f5d3SJohn Marino# 3786d7f5d3SJohn Marino# You should have received a copy of the GNU General Public License 3886d7f5d3SJohn Marino# along with RCS; see the file COPYING. 3986d7f5d3SJohn Marino# If not, write to the Free Software Foundation, 4086d7f5d3SJohn Marino# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 4186d7f5d3SJohn Marino# 4286d7f5d3SJohn Marino# Report problems and direct all questions to: 4386d7f5d3SJohn Marino# 4486d7f5d3SJohn Marino# rcs-bugs@cs.purdue.edu 4586d7f5d3SJohn Marino 4686d7f5d3SJohn Marino# The Makefile overrides the following defaults. 4786d7f5d3SJohn Marino: ${ALL_CFLAGS=-Dhas_conf_h} 4886d7f5d3SJohn Marino: ${CC=cc} 4986d7f5d3SJohn Marino: ${DIFF=diff} 5086d7f5d3SJohn Marino# : ${LDFLAGS=} ${LIBS=} tickles old shell bug 5186d7f5d3SJohn Marino 5286d7f5d3SJohn MarinoCL="$CC $ALL_CFLAGS $LDFLAGS -o a.out" 5386d7f5d3SJohn MarinoL=$LIBS 5486d7f5d3SJohn Marino 5586d7f5d3SJohn MarinoRCSINIT=-x 5686d7f5d3SJohn Marinoexport RCSINIT 5786d7f5d3SJohn Marino 5886d7f5d3SJohn MarinoSLASH=/ 5986d7f5d3SJohn MarinoRCSfile=RCS${SLASH}a.c 6086d7f5d3SJohn MarinoRCS_alt=RCS${SLASH}a.d 6186d7f5d3SJohn Marinolockfile=RCS${SLASH}a._ 6286d7f5d3SJohn Marino 6386d7f5d3SJohn Marinocase $1 in 6486d7f5d3SJohn Marino-v) q=; set -x;; 6586d7f5d3SJohn Marino'') q=-q;; 6686d7f5d3SJohn Marino*) echo >&2 "$0: usage: $0 [-v]"; exit 2 6786d7f5d3SJohn Marinoesac 6886d7f5d3SJohn Marino 6986d7f5d3SJohn Marinoif test -d RCS 7086d7f5d3SJohn Marinothen rmdir=: 7186d7f5d3SJohn Marinoelse rmdir=rmdir; mkdir RCS || exit 7286d7f5d3SJohn Marinofi 7386d7f5d3SJohn Marino 7486d7f5d3SJohn Marinorm -f a.* $RCSfile $RCS_alt $lockfile && 7586d7f5d3SJohn Marinoecho 1.1 >a.11 && 7686d7f5d3SJohn Marinoecho 1.1.1.1 >a.3x1 && 7786d7f5d3SJohn Marinoecho 1.2 >a.12 || { echo "#initialization failed"; exit 2; } 7886d7f5d3SJohn Marino 7986d7f5d3SJohn Marinocase "`$DIFF -c a.11 a.3x1`" in 8086d7f5d3SJohn Marino*!\ 1.1.1.1) 8186d7f5d3SJohn Marino diff="$DIFF -c";; 8286d7f5d3SJohn Marino*) 8386d7f5d3SJohn Marino echo "#warning: $DIFF -c does not work, so diagnostics may be cryptic" 8486d7f5d3SJohn Marino diff=$DIFF 8586d7f5d3SJohn Marinoesac 8686d7f5d3SJohn Marino 8786d7f5d3SJohn Marinorcs -i -L -ta.11 $q a.c && 8886d7f5d3SJohn Marinotest -r $RCSfile || { 8986d7f5d3SJohn Marino echo "#rcs -i -L failed; perhaps RCS is not properly installed." 9086d7f5d3SJohn Marino exit 1 9186d7f5d3SJohn Marino} 9286d7f5d3SJohn Marino 9386d7f5d3SJohn Marinorlog a.c >/dev/null || { echo "#rlog failed on empty RCS file"; exit 1; } 9486d7f5d3SJohn Marinorm -f $RCSfile || exit 2 9586d7f5d3SJohn Marino 9686d7f5d3SJohn Marinocp a.11 a.c && 9786d7f5d3SJohn Marinoci -ta.11 -mm $q a.c && 9886d7f5d3SJohn Marinotest -r $RCSfile && 9986d7f5d3SJohn Marinorcs -L $q a.c || { echo "#ci+rcs -L failed"; exit 1; } 10086d7f5d3SJohn Marinotest ! -f a.c || { echo "#ci did not remove working file"; exit 1; } 10186d7f5d3SJohn Marinofor l in '' '-l' 10286d7f5d3SJohn Marinodo 10386d7f5d3SJohn Marino co $l $q a.c && 10486d7f5d3SJohn Marino test -f a.c || { echo '#co' $l did not create working file; exit 1; } 10586d7f5d3SJohn Marino $diff a.11 a.c || { echo '#ci' followed by co $l is not a no-op; exit 1; } 10686d7f5d3SJohn Marinodone 10786d7f5d3SJohn Marino 10886d7f5d3SJohn Marinocp a.12 a.c && 10986d7f5d3SJohn Marinoci -mm $q a.c && 11086d7f5d3SJohn Marinoco $q a.c && 11186d7f5d3SJohn Marino$diff a.12 a.c || { echo "#ci+co failed"; exit 1; } 11286d7f5d3SJohn Marino 11386d7f5d3SJohn Marinorm -f a.c && 11486d7f5d3SJohn Marinoco -r1.1 $q a.c && 11586d7f5d3SJohn Marino$diff a.11 a.c || { echo "#can't retrieve first revision"; exit 1; } 11686d7f5d3SJohn Marino 11786d7f5d3SJohn Marinorm -f a.c && 11886d7f5d3SJohn Marinocp a.3x1 a.c && 11986d7f5d3SJohn Marinoci -r1.1.1 -mm $q a.c && 12086d7f5d3SJohn Marinoco -r1.1.1.1 $q a.c && 12186d7f5d3SJohn Marino$diff a.3x1 a.c || { echo "#branches failed"; exit 1; } 12286d7f5d3SJohn Marino 12386d7f5d3SJohn Marinorm -f a.c && 12486d7f5d3SJohn Marinoco -l $q a.c && 12586d7f5d3SJohn Marinoci -f -mm $q a.c && 12686d7f5d3SJohn Marinoco -r1.3 $q a.c && 12786d7f5d3SJohn Marino$diff a.12 a.c || { echo "#(co -l; ci -f) failed"; exit 1; } 12886d7f5d3SJohn Marino 12986d7f5d3SJohn Marinorm -f a.c && 13086d7f5d3SJohn Marinoco -l $q a.c && 13186d7f5d3SJohn Marinoecho 1.4 >a.c && 13286d7f5d3SJohn Marinoci -l -mm $q a.c && 13386d7f5d3SJohn Marinoecho error >a.c && 13486d7f5d3SJohn Marinoci -mm $q a.c || { echo "#ci -l failed"; exit 1; } 13586d7f5d3SJohn Marino 13686d7f5d3SJohn Marinorm -f a.c && 13786d7f5d3SJohn Marinoco -l $q a.c && 13886d7f5d3SJohn Marinoecho 1.5 >a.c && 13986d7f5d3SJohn Marinoci -u -mm $q a.c && 14086d7f5d3SJohn Marinotest -r a.c || { echo "#ci -u didn't create a working file"; exit 1; } 14186d7f5d3SJohn Marinorm -f a.c && 14286d7f5d3SJohn Marinoecho error >a.c || exit 2 14386d7f5d3SJohn Marinoci -mm $q a.c 2>/dev/null && { echo "#ci -u didn't unlock the file"; exit 1; } 14486d7f5d3SJohn Marino 14586d7f5d3SJohn Marinorm -f a.c && 14686d7f5d3SJohn Marinorcs -l $q a.c && 14786d7f5d3SJohn Marinoco -u $q a.c || { echo "#rcs -l + co -u failed"; exit 1; } 14886d7f5d3SJohn Marinorm -f a.c && 14986d7f5d3SJohn Marinoecho error >a.c || exit 2 15086d7f5d3SJohn Marinoci -mm $q a.c 2>/dev/null && { echo "#co -u didn't unlock the file"; exit 1; } 15186d7f5d3SJohn Marino 15286d7f5d3SJohn Marinorm -f a.c && 15386d7f5d3SJohn Marinocp a.11 a.c && 15486d7f5d3SJohn Marinoco -f $q a.c || { echo "#co -f failed"; exit 1; } 15586d7f5d3SJohn Marino$diff a.11 a.c >/dev/null && { echo "#co -f had no effect"; exit 1; } 15686d7f5d3SJohn Marino 15786d7f5d3SJohn Marinoco -p1.1 $q a.c >a.t && 15886d7f5d3SJohn Marino$diff a.11 a.t || { echo "#co -p failed"; exit 1; } 15986d7f5d3SJohn Marino 16086d7f5d3SJohn Marinofor n in n N 16186d7f5d3SJohn Marinodo 16286d7f5d3SJohn Marino rm -f a.c && 16386d7f5d3SJohn Marino co -l $q a.c && 16486d7f5d3SJohn Marino echo $n >a.$n && 16586d7f5d3SJohn Marino cp a.$n a.c && 16686d7f5d3SJohn Marino ci -${n}n -mm $q a.c && 16786d7f5d3SJohn Marino co -rn $q a.c && 16886d7f5d3SJohn Marino $diff a.$n a.c || { echo "#ci -$n failed"; exit 1; } 16986d7f5d3SJohn Marinodone 17086d7f5d3SJohn Marino 17186d7f5d3SJohn Marinocase $LOGNAME in 17286d7f5d3SJohn Marino?*) me=$LOGNAME;; 17386d7f5d3SJohn Marino*) 17486d7f5d3SJohn Marino case $USER in 17586d7f5d3SJohn Marino ?*) me=$USER;; 17686d7f5d3SJohn Marino *) 17786d7f5d3SJohn Marino me=`who am i` || exit 2 17886d7f5d3SJohn Marino me=`echo "$me" | sed -e 's/ .*//' -e 's/.*!//'` 17986d7f5d3SJohn Marino case $me in 18086d7f5d3SJohn Marino '') echo >&2 "$0: cannot deduce user name"; exit 2 18186d7f5d3SJohn Marino esac 18286d7f5d3SJohn Marino esac 18386d7f5d3SJohn Marinoesac 18486d7f5d3SJohn Marino 18586d7f5d3SJohn Marino 18686d7f5d3SJohn Marino# Get the date of the previous revision in UTC. 18786d7f5d3SJohn Marinodate=`rlog -r a.c | sed -n '/^date: /{ s///; s/;.*//; p; q; }'` || exit 18886d7f5d3SJohn Marinocase $date in 18986d7f5d3SJohn Marino[0-9][0-9][0-9]*[0-9]/[0-1][0-9]/[0-3][0-9]\ [0-2][0-9]:[0-5][0-9]:[0-6][0-9]);; 19086d7f5d3SJohn Marino*) echo >&2 "$0: $date: bad rlog date output"; exit 1 19186d7f5d3SJohn Marinoesac 19286d7f5d3SJohn MarinoPWD=`pwd` && export PWD && 19386d7f5d3SJohn Marinorm -f a.c && 19486d7f5d3SJohn Marinoco -l $q a.c && 19586d7f5d3SJohn Marinosed 's/@/$/g' >a.kv <<EOF 19686d7f5d3SJohn Marino@Author: w @ 19786d7f5d3SJohn Marino@Date: $date @ 19886d7f5d3SJohn Marino@Header: $PWD$SLASH$RCSfile 2.1 $date w s @ 19986d7f5d3SJohn Marino@Id: a.c 2.1 $date w s @ 20086d7f5d3SJohn Marino@Locker: @ 20186d7f5d3SJohn Marino * @Log: a.c @ 20286d7f5d3SJohn Marino * Revision 2.1 $date w 20386d7f5d3SJohn Marino * m 20486d7f5d3SJohn Marino * 20586d7f5d3SJohn Marino@Name: Oz @ 20686d7f5d3SJohn Marino@RCSfile: a.c @ 20786d7f5d3SJohn Marino@Revision: 2.1 @ 20886d7f5d3SJohn Marino@Source: $PWD$SLASH$RCSfile @ 20986d7f5d3SJohn Marino@State: s @ 21086d7f5d3SJohn MarinoEOF 21186d7f5d3SJohn Marinotest $? = 0 && 21286d7f5d3SJohn Marinosed 's/:.*\$/$/' a.kv >a.k && 21386d7f5d3SJohn Marinosed -e 's/w s [$]/w s '"$me"' $/' -e 's/[$]Locker: /&'"$me/" a.kv >a.kvl && 21486d7f5d3SJohn Marinosed s/Oz//g a.kv >a.e && 21586d7f5d3SJohn Marinosed s/Oz/N/g a.kv >a.N && 21686d7f5d3SJohn Marinosed -e '/\$/!d' -e 's/\$$/: old $/' a.k >a.o && 21786d7f5d3SJohn Marinosed -e 's/\$[^ ]*: //' -e 's/ \$//' a.kv >a.v && 21886d7f5d3SJohn Marinocp a.o a.c && 21986d7f5d3SJohn Marinoci -d"$date" -nOz -ss -ww -u2.1 -mm $q a.c && 22086d7f5d3SJohn Marino$diff a.kv a.c || { echo "#keyword expansion failed"; exit 1; } 22186d7f5d3SJohn Marinoco -pOz -ko $q a.c >a.oo && 22286d7f5d3SJohn Marino$diff a.o a.oo || { echo "#co -p -ko failed"; exit 1; } 22386d7f5d3SJohn Marinocp a.kv a.o && cp a.o a.b || exit 2 22486d7f5d3SJohn Marinorcs -oOz $q a.c && 22586d7f5d3SJohn Marinorcs -l $q a.c && 22686d7f5d3SJohn Marinoci -k -u $q a.c && 22786d7f5d3SJohn Marino$diff a.kv a.c || { echo "#ci -k failed"; exit 1; } 22886d7f5d3SJohn Marinosed -n 's/^[^$]*\$/$/p' a.kv >a.i && 22986d7f5d3SJohn Marinoident a.c >a.i1 && 23086d7f5d3SJohn Marinosed -e 1d -e 's/^[ ]*//' a.i1 >a.i2 && 23186d7f5d3SJohn Marino$diff a.i a.i2 || { echo "#ident failed"; exit 1; } 23286d7f5d3SJohn Marino 23386d7f5d3SJohn Marinorcs -i $q a.c 2>/dev/null && { echo "#rcs -i permitted existing file"; exit 1; } 23486d7f5d3SJohn Marino 23586d7f5d3SJohn Marinorm -f a.c && 23686d7f5d3SJohn Marinoco -l $q a.c && 23786d7f5d3SJohn Marinoecho 2.2 >a.c && 23886d7f5d3SJohn Marinoci -mm $q a.c && 23986d7f5d3SJohn Marinoecho 1.1.1.2 >a.c && 24086d7f5d3SJohn Marinorcs -l1.1.1 $q a.c && 24186d7f5d3SJohn Marinoci -r1.1.1.2 -mm $q a.c && 24286d7f5d3SJohn Marinorcs -b1.1.1 $q a.c && 24386d7f5d3SJohn Marinotest " `co -p $q a.c`" = ' 1.1.1.2' || { echo "#rcs -b1.1.1 failed"; exit 1; } 24486d7f5d3SJohn Marinorcs -b $q a.c && 24586d7f5d3SJohn Marinotest " `co -p $q a.c`" = ' 2.2' || { echo "#rcs -b failed"; exit 1; } 24686d7f5d3SJohn Marino 24786d7f5d3SJohn Marinoecho 2.3 >a.c || exit 2 24886d7f5d3SJohn Marinorcs -U $q a.c || { echo "#rcs -U failed"; exit 1; } 24986d7f5d3SJohn Marinoci -mm $q a.c || { echo "#rcs -U didn't unset strict locking"; exit 1; } 25086d7f5d3SJohn Marinorcs -L $q a.c || { echo "#rcs -L failed"; exit 1; } 25186d7f5d3SJohn Marinoecho error >a.c || exit 2 25286d7f5d3SJohn Marinoci -mm $q a.c 2>/dev/null && { echo "#ci retest failed"; exit 1; } 25386d7f5d3SJohn Marino 25486d7f5d3SJohn Marinorm -f a.c && 25586d7f5d3SJohn Marinolog0=`rlog -h a.c` && 25686d7f5d3SJohn Marinoco -l $q a.c && 25786d7f5d3SJohn Marinoci -mm $q a.c && 25886d7f5d3SJohn Marinolog1=`rlog -h a.c` && 25986d7f5d3SJohn Marinotest " $log0" = " $log1" || { echo "#unchanged ci didn't revert"; exit 1; } 26086d7f5d3SJohn Marino 26186d7f5d3SJohn Marinorm -f a.c && 26286d7f5d3SJohn Marinorcs -nN:1.1 $q a.c && 26386d7f5d3SJohn Marinoco -rN $q a.c && 26486d7f5d3SJohn Marino$diff a.11 a.c || { echo "#rcs -n failed"; exit 1; } 26586d7f5d3SJohn Marino 26686d7f5d3SJohn Marinorm -f a.c && 26786d7f5d3SJohn Marinorcs -NN:2.1 $q a.c && 26886d7f5d3SJohn Marinoco -rN $q a.c && 26986d7f5d3SJohn Marino$diff a.N a.c || { echo "#rcs -N failed"; exit 1; } 27086d7f5d3SJohn Marino 27186d7f5d3SJohn Marinorm -f a.c && 27286d7f5d3SJohn Marinoco -l $q a.c && 27386d7f5d3SJohn Marinoecho ':::$''Log$' >a.c && 27486d7f5d3SJohn Marinoci -u -mm $q a.c && 27586d7f5d3SJohn Marinotest " `sed '$!d' a.c`" = ' :::' || { echo "#comment leader failed"; exit 1; } 27686d7f5d3SJohn Marino 27786d7f5d3SJohn Marinorm -f a.c && 27886d7f5d3SJohn Marinorcs -o2.2: $q a.c && 27986d7f5d3SJohn Marinoco $q a.c && 28086d7f5d3SJohn Marino$diff a.e a.c || { echo "#rcs -o failed"; exit 1; } 28186d7f5d3SJohn Marino 28286d7f5d3SJohn Marinorcsdiff -r1.1 -rOz $q a.c >a.0 28386d7f5d3SJohn Marinocase $? in 28486d7f5d3SJohn Marino1) ;; 28586d7f5d3SJohn Marino*) echo "#rcsdiff bad status"; exit 1 28686d7f5d3SJohn Marinoesac 28786d7f5d3SJohn Marino$DIFF a.11 a.kv >a.1 28886d7f5d3SJohn Marino$diff a.0 a.1 || { echo "#rcsdiff failed"; exit 1; } 28986d7f5d3SJohn Marino 29086d7f5d3SJohn Marinorcs -l2.1 $q a.c || { echo "#rcs -l2.1 failed"; exit 1; } 29186d7f5d3SJohn Marinofor i in b k kv kvl o v 29286d7f5d3SJohn Marinodo 29386d7f5d3SJohn Marino rm -f a.c && 29486d7f5d3SJohn Marino cp a.$i a.c && 29586d7f5d3SJohn Marino rcsdiff -k$i -rOz $q a.c || { echo "#rcsdiff -k$i failed"; exit 1; } 29686d7f5d3SJohn Marinodone 29786d7f5d3SJohn Marinoco -p1.1 -ko $q a.c >a.t && 29886d7f5d3SJohn Marino$diff a.11 a.t || { echo "#co -p1.1 -ko failed"; exit 1; } 29986d7f5d3SJohn Marinorcs -u2.1 $q a.c || { echo "#rcs -u2.1 failed"; exit 1; } 30086d7f5d3SJohn Marino 30186d7f5d3SJohn Marinorm -f a.c && 30286d7f5d3SJohn Marinorcsclean $q a.c && 30386d7f5d3SJohn Marinorcsclean -u $q a.c || { echo "#rcsclean botched a nonexistent file"; exit 1; } 30486d7f5d3SJohn Marino 30586d7f5d3SJohn Marinorm -f a.c && 30686d7f5d3SJohn Marinoco $q a.c && 30786d7f5d3SJohn Marinorcsclean -n $q a.c && 30886d7f5d3SJohn Marinorcsclean -n -u $q a.c && 30986d7f5d3SJohn Marinotest -f a.c || { echo "#rcsclean -n removed a file"; exit 1; } 31086d7f5d3SJohn Marino 31186d7f5d3SJohn Marinorm -f a.c && 31286d7f5d3SJohn Marinoco $q a.c && 31386d7f5d3SJohn Marinorcsclean $q a.c && 31486d7f5d3SJohn Marinotest ! -f a.c || { echo "#rcsclean missed an unlocked file"; exit 1; } 31586d7f5d3SJohn Marino 31686d7f5d3SJohn Marinorm -f a.c && 31786d7f5d3SJohn Marinoco -l $q a.c && 31886d7f5d3SJohn Marinorcsclean $q a.c && 31986d7f5d3SJohn Marinotest -f a.c || { echo "#rcsclean removed a locked file"; exit 1; } 32086d7f5d3SJohn Marinorcsclean -u $q a.c && 32186d7f5d3SJohn Marinotest ! -f a.c || { 32286d7f5d3SJohn Marino echo "#rcsclean -u missed an unchanged locked file"; exit 1; 32386d7f5d3SJohn Marino} 32486d7f5d3SJohn Marino 32586d7f5d3SJohn Marinorm -f a.c && 32686d7f5d3SJohn Marinoco -l $q a.c && 32786d7f5d3SJohn Marinoecho change >>a.c && 32886d7f5d3SJohn Marinorcsclean $q a.c && 32986d7f5d3SJohn Marinorcsclean $q -u a.c && 33086d7f5d3SJohn Marinotest -f a.c || { echo "#rcsclean removed a changed file"; exit 1; } 33186d7f5d3SJohn Marino 33286d7f5d3SJohn Marinorm -f a.c && 33386d7f5d3SJohn Marinoco -l $q a.c && 33486d7f5d3SJohn Marinocat >a.c <<'EOF' 33586d7f5d3SJohn Marino2.2 33686d7f5d3SJohn Marinoa 33786d7f5d3SJohn Marinob 33886d7f5d3SJohn Marinoc 33986d7f5d3SJohn Marinod 34086d7f5d3SJohn MarinoEOF 34186d7f5d3SJohn Marinotest $? = 0 && 34286d7f5d3SJohn Marinoci -l -mm $q a.c && 34386d7f5d3SJohn Marinoco -p2.2 $q a.c | sed -e s/2.2/2.3/ -e s/b/b1/ >a.c && 34486d7f5d3SJohn Marinoci -l -mm $q a.c && 34586d7f5d3SJohn Marinoco -p2.2 $q a.c | sed -e s/2.2/new/ -e s/d/d1/ >a.c || exit 2 34686d7f5d3SJohn Marinocat >a.0 <<'EOF' 34786d7f5d3SJohn Marino2.3 34886d7f5d3SJohn Marinoa 34986d7f5d3SJohn Marinob1 35086d7f5d3SJohn Marinoc 35186d7f5d3SJohn Marinod1 35286d7f5d3SJohn MarinoEOF 35386d7f5d3SJohn Marinocat >a.1 <<'EOF' 35486d7f5d3SJohn Marino<<<<<<< a.c 35586d7f5d3SJohn Marinonew 35686d7f5d3SJohn Marino======= 35786d7f5d3SJohn Marino2.3 35886d7f5d3SJohn Marino>>>>>>> 2.3 35986d7f5d3SJohn Marinoa 36086d7f5d3SJohn Marinob1 36186d7f5d3SJohn Marinoc 36286d7f5d3SJohn Marinod1 36386d7f5d3SJohn MarinoEOF 36486d7f5d3SJohn Marinorcsmerge -E -r2.2 -r2.3 $q a.c 36586d7f5d3SJohn Marinocase $? in 36686d7f5d3SJohn Marino0) 36786d7f5d3SJohn Marino if $diff a.0 a.c >/dev/null 36886d7f5d3SJohn Marino then echo "#warning: diff3 -E does not work, " \ 36986d7f5d3SJohn Marino "so merge and rcsmerge ignore overlaps and suppress overlap lines." 37086d7f5d3SJohn Marino else 37186d7f5d3SJohn Marino $diff a.1 a.c || { echo "#rcsmerge failed (status 0)"; exit 1; } 37286d7f5d3SJohn Marino echo "#warning: The diff3 lib program exit status ignores overlaps," \ 37386d7f5d3SJohn Marino "so rcsmerge does not warn about overlap lines that it generates." 37486d7f5d3SJohn Marino fi 37586d7f5d3SJohn Marino ;; 37686d7f5d3SJohn Marino1) 37786d7f5d3SJohn Marino $diff a.1 a.c || { echo "#rcsmerge failed (status 1)"; exit 1; } 37886d7f5d3SJohn Marino ;; 37986d7f5d3SJohn Marino*) 38086d7f5d3SJohn Marino echo "#rcsmerge bad status"; exit 1 38186d7f5d3SJohn Marinoesac 38286d7f5d3SJohn Marino 38386d7f5d3SJohn Marino# Avoid `tr' if possible; it's not portable, and it can't handle null bytes. 38486d7f5d3SJohn Marino# Our substitute exclusive-ORs with '\n'; 38586d7f5d3SJohn Marino# this ensures null bytes on output, which is even better than `tr', 38686d7f5d3SJohn Marino# since some diffs think a file is binary only if it contains null bytes. 38786d7f5d3SJohn Marinocat >a.c <<'EOF' 38886d7f5d3SJohn Marino#include <stdio.h> 38986d7f5d3SJohn Marinoint main() { 39086d7f5d3SJohn Marino int c; 39186d7f5d3SJohn Marino while ((c=getchar()) != EOF) 39286d7f5d3SJohn Marino putchar(c ^ '\n'); 39386d7f5d3SJohn Marino return 0; 39486d7f5d3SJohn Marino} 39586d7f5d3SJohn MarinoEOF 39686d7f5d3SJohn Marinotr=tr 39786d7f5d3SJohn Marinoif (rm -f a.exe a.out && $CL a.c $L >&2) >/dev/null 2>&1 39886d7f5d3SJohn Marinothen 39986d7f5d3SJohn Marino if test -s a.out 40086d7f5d3SJohn Marino then tr=./a.out 40186d7f5d3SJohn Marino elif test -s a.exe 40286d7f5d3SJohn Marino then tr=./a.exe 40386d7f5d3SJohn Marino fi 40486d7f5d3SJohn Marinofi 40586d7f5d3SJohn Marino{ 40686d7f5d3SJohn Marino co -p $q a.c | $tr '\012' '\200' >a.24 && 40786d7f5d3SJohn Marino cp a.24 a.c && 40886d7f5d3SJohn Marino ciOut=`(ci -l -mm $q a.c 2>&1)` && 40986d7f5d3SJohn Marino case $ciOut in 41086d7f5d3SJohn Marino ?*) echo >&2 "$ciOut" 41186d7f5d3SJohn Marino esac && 41286d7f5d3SJohn Marino co -p $q a.c | $tr '\200' '\012' >a.c && 41386d7f5d3SJohn Marino rcsdiff -r2.3 $q a.c >/dev/null && 41486d7f5d3SJohn Marino 41586d7f5d3SJohn Marino echo 2.5 >a.c && 41686d7f5d3SJohn Marino ci -l -mm $q a.c && 41786d7f5d3SJohn Marino cp a.24 a.c && 41886d7f5d3SJohn Marino rcsdiff -r2.4 $q a.c >/dev/null 41986d7f5d3SJohn Marino} || echo "#warning: Traditional diff is used, so RCS is limited to text files." 42086d7f5d3SJohn Marino 42186d7f5d3SJohn Marinorcs -u -o2.4: $q a.c || { echo "#rcs -u -o failed"; exit 1; } 42286d7f5d3SJohn Marino 42386d7f5d3SJohn Marinorcs -i -Aa.c -t- $q a.d || { echo "#rcs -i -A failed"; exit 1; } 42486d7f5d3SJohn Marino 42586d7f5d3SJohn Marinorlog -r2.1 a.c >a.t && 42686d7f5d3SJohn Marinogrep '^checked in with -k' a.t >/dev/null && 42786d7f5d3SJohn Marinosed '/^checked in with -k/d' a.t >a.u && 42886d7f5d3SJohn Marino$diff - a.u <<EOF 42986d7f5d3SJohn Marino 43086d7f5d3SJohn MarinoRCS file: $RCSfile 43186d7f5d3SJohn MarinoWorking file: a.c 43286d7f5d3SJohn Marinohead: 2.3 43386d7f5d3SJohn Marinobranch: 43486d7f5d3SJohn Marinolocks: strict 43586d7f5d3SJohn Marinoaccess list: 43686d7f5d3SJohn Marinosymbolic names: 43786d7f5d3SJohn Marino N: 2.1 43886d7f5d3SJohn Marino Oz: 2.1 43986d7f5d3SJohn Marino n: 1.8 44086d7f5d3SJohn Marinokeyword substitution: kv 44186d7f5d3SJohn Marinototal revisions: 13; selected revisions: 1 44286d7f5d3SJohn Marinodescription: 44386d7f5d3SJohn Marino1.1 44486d7f5d3SJohn Marino---------------------------- 44586d7f5d3SJohn Marinorevision 2.1 44686d7f5d3SJohn Marinodate: $date; author: w; state: s; lines: +14 -1 44786d7f5d3SJohn Marino============================================================================= 44886d7f5d3SJohn MarinoEOF 44986d7f5d3SJohn Marinotest $? = 0 || { echo "#rlog failed"; exit 1; } 45086d7f5d3SJohn Marino 45186d7f5d3SJohn Marino 45286d7f5d3SJohn Marinotest ! -f $lockfile || { echo "#lock file not removed"; exit 1; } 45386d7f5d3SJohn Marino 45486d7f5d3SJohn Marinorm -f a.* $RCSfile $RCS_alt 45586d7f5d3SJohn Marino$rmdir RCS 456