[comp.sources.misc] v15i022: sccs2rcs

kenc@Viewlogic.COM (Kenstir) (10/06/90)

Posting-number: Volume 15, Issue 22
Submitted-by: kenc@Viewlogic.COM (Kenstir)
Archive-name: sccs2rcs_kc/part01

Here is a script file which I spent a lot of time perfecting.  It
converts an existing SCCS history (s-file) into the identical RCS
history (RCS-file).

It has been tested under SunOS 3.5, 4.0.3, 4.1; Ultrix 2.0, 3.1
Be sure to look at the README file before using!
--
Kenneth H. Cox
Viewlogic Systems, Inc.
kenstir@viewlogic.com
...!harvard!cg-atla!viewlog!kenstir
-----------------------------------------------------------------------
#! /bin/sh
# This is a shell archive.  Remove anything before this line, then
unpack
# it by saving it into a file and typing "sh file".  To overwrite
existing
# files, type "sh file -c".  You can also feed this as standard input
via
# unshar, or by typing "sh <file", e.g..  If this archive is complete,
you
# will see the following message at the end:
#		"End of shell archive."
# Contents:  sccs2rcs README
# Wrapped by kenc@madmax on Thu Oct  4 20:58:43 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f sccs2rcs -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"sccs2rcs\"
else
echo shar: Extracting \"sccs2rcs\" \(7364 characters\)
sed "s/^X//" >sccs2rcs <<'END_OF_sccs2rcs'
X#!/bin/csh -f
X#
X# Sccs2rcs is a script to convert an existing SCCS
X# history into an RCS history without losing any of
X# the information contained therein.
X# It has been tested under the following OS's:
X#     SunOS 3.5, 4.0.3, 4.1
X#     Ultrix-32 2.0, 3.1
X#
X# Things to note:
X#   + It will NOT delete or alter your ./SCCS history under any
circumstances.
X#
X#   + Run in a directory where ./SCCS exists and where you can
X#       create ./RCS
X#
X#   + /usr/local/bin is put in front of the default path.
X#     (SCCS under Ultrix is set-uid sccs, bad bad bad, so
X#     /usr/local/bin/sccs here fixes that)
X#
X#   + Date, time, author, comments, branches, are all preserved.
X#
X#   + If a command fails somewhere in the middle, it bombs with
X#     a message -- remove what it's done so far and try again.
X#         "rm -rf RCS; sccs unedit `sccs tell`; sccs clean"
X#     There is no recovery and exit is far from graceful.
X#     If a particular module is hanging you up, consider
X#     doing it separately; move it from the current area so that
X#     the next run will have a better chance or working.
X#     Also (for the brave only) you might consider hacking
X#     the s-file for simpler problems:  I've successfully changed
X#     the date of a delta to be in sync, then run "sccs admin -z"
X#     on the thing.
X#
X#   + After everything finishes, ./SCCS will be moved to ./old-SCCS.
X#
X# This file may be copied, processed, hacked, mutilated, and
X# even destroyed as long as you don't tell anyone you wrote it.
X#
X# Ken Cox
X# Viewlogic Systems, Inc.
X# kenstir@viewlogic.com
X# ...!harvard!cg-atla!viewlog!kenstir
X#
X# $Id: sccs2rcs,v 1.12 90/10/04 20:52:23 kenc Exp $
X
X
X#we'll assume the user set up the path correctly
X# for the Pmax, /usr/ucb/sccs is suid sccs, what a pain
X#   /usr/local/bin/sccs should override /usr/ucb/sccs there
Xset path = (/usr/local/bin $path)
X
X
X############################################################
X# Error checking
X#
Xif (! -w .) then
X    echo "Error: ./ not writeable by you."
X    exit 1
Xendif
Xif (! -d SCCS) then
X    echo "Error: ./SCCS directory not found."
X    exit 1
Xendif
Xset edits = (`sccs tell`)
Xif ($#edits) then
X    echo "Error: $#edits file(s) out for edit...clean up before
converting."
X    exit 1
Xendif
Xif (-d RCS) then
X    echo "Warning: RCS directory exists"
X    if (`ls -a RCS | wc -l` > 2) then
X        echo "Error: RCS directory not empty
X        exit 1
X    endif
Xelse
X    mkdir RCS
Xendif
X
Xsccs clean
X
Xset logfile = /tmp/sccs2rcs_$$_log
Xrm -f $logfile
Xset tmpfile = /tmp/sccs2rcs_$$_tmp
Xrm -f $tmpfile
Xset emptyfile = /tmp/sccs2rcs_$$_empty
Xecho -n "" > $emptyfile
Xset initialfile = /tmp/sccs2rcs_$$_init
Xecho "Initial revision" > $initialfile
Xset sedfile = /tmp/sccs2rcs_$$_sed
Xrm -f $sedfile
X
X# the quotes surround the dollar signs to fool RCS when I check in this
script
Xset sccs_keywords = (\
X    '%W%[ 	]*%G%'\
X    '%W%[ 	]*%E%'\
X    '%W%'\
X    '%M%[ 	]*%I%[ 	]*%G%'\
X    '%M%[ 	]*%I%[ 	]*%E%'\
X    '%M%'\
X    '%I%'\
X    '%G%'\
X    '%E%'\
X    '%U%')
Xset rcs_keywords = (\
X    '$'Id'$'\
X    '$'Id'$'\
X    '$'Id'$'\
X    '$'Id'$'\
X    '$'Id'$'\
X    '$'RCSfile'$'\
X    '$'Revision'$'\
X    '$'Date'$'\
X    '$'Date'$'\
X    '')
X
X
X############################################################
X# Get some answers from user
X#
Xecho ""
Xecho "Do you want to be prompted for a description of each"
Xecho "file as it is checked in to RCS initially?"
Xecho -n "(y=prompt for description, n=null description) [y] ?"
Xset ans = $<
Xif ((_$ans == _) || (_$ans == _y) || (_$ans == _Y)) then
X    set nodesc = 0
Xelse
X    set nodesc = 1
Xendif
Xecho ""
Xecho "The default keyword substitutions are as follows and are"
Xecho "applied in the order specified:"
Xset i = 1
Xwhile ($i <= $#sccs_keywords)
X#    echo '	'\"$sccs_keywords[$i]\"'	==>	'\"$rcs_keywords[$i]\"
X    echo "	$sccs_keywords[$i]	==>	$rcs_keywords[$i]"
X    @ i = $i + 1
Xend
Xecho ""
Xecho -n "Do you want to change them [n] ?"
Xset ans = $<
Xif ((_$ans != _) && (_$ans != _n) && (_$ans != _N)) then
X    echo "You can't always get what you want."
X    echo "Edit this script file and change the variables:"
X    echo '    $sccs_keywords'
X    echo '    $rcs_keywords'
Xelse
X    echo "good idea."
Xendif
X
X# create the sed script
Xset i = 1
Xwhile ($i <= $#sccs_keywords)
X    echo "s,$sccs_keywords[$i],$rcs_keywords[$i],g" >> $sedfile
X    @ i = $i + 1
Xend
X
X
X############################################################
X# Loop over every s-file in SCCS dir
X#
Xforeach sfile (SCCS/s.*)
X    # get rid of the "s." at the beginning of the name
X    set file = `echo $sfile:t | sed -e "s/^..//"`
X
X    # work on each rev of that file in ascending order
X    set firsttime = 1
X    foreach rev (`sccs prs $file | grep "^D " | awk '{print $2}' | tail
-r`)
X        if ($status != 0) goto ERROR
X
X        # get file into current dir and get stats
X        set date = `sccs prs -r$rev $file | grep "^D " | awk '{print
$3, $4}'`
X        set author = `sccs prs -r$rev $file | grep "^D " | awk '{print
$5}'`
X        echo ""
X        echo "==> file $file, rev=$rev, date=$date, author=$author"
X        sccs edit -r$rev $file >>& $logfile
X        if ($status != 0) goto ERROR
X        echo checked out of SCCS
X
X        # add RCS keywords in place of SCCS keywords
X        sed -f $sedfile $file > $tmpfile
X        if ($status != 0) goto ERROR
X        echo performed keyword substitutions
X        cp $tmpfile $file
X
X        # check file into RCS
X        if ($firsttime) then
X            set firsttime = 0
X            if ($nodesc) then
X                ci -f -r$rev -d"$date" -w$author -t$emptyfile $file <
$initialfile >>& $logfile
X                if ($status != 0) goto ERROR
X                echo initial rev checked into RCS without description
X            else
X                echo ""
X                echo Enter a brief description of the file $file \(end
w/ Ctrl-D\):
X                cat > $tmpfile
X                ci -f -r$rev -d"$date" -w$author -t$tmpfile $file <
$initialfile >>& $logfile
X                if ($status != 0) goto ERROR
X                echo initial rev checked into RCS
X            endif
X        else
X            # get RCS lock
X            rcs -l $file >>& $logfile
X            if ($status != 0) goto ERROR
X            echo got lock
X            sccs prs -r$rev $file | grep "." > $tmpfile
X            # it's OK if grep fails here and gives status == 1
X            # put the delta message in $tmpfile
X            ed $tmpfile >>& $logfile <<EOF
X/COMMENTS
X1,.d
Xw
Xq
XEOF
X            ci -f -r$rev -d"$date" -w$author $file < $tmpfile >>&
$logfile
X            if ($status != 0) goto ERROR
X            echo checked into RCS
X        endif
X        sccs unedit $file >>& $logfile
X        if ($status != 0) goto ERROR
X    end
X    rm -f $file
Xend
X
X
X############################################################
X# Clean up
X#
Xecho cleaning up...
Xmv SCCS old-SCCS
Xrm -f $tmpfile $emptyfile $initialfile $sedfile
Xecho ===================================================
Xecho "       Conversion Completed Successfully"
Xecho ""
Xecho "         SCCS history now in old-SCCS/"
Xecho ===================================================
Xexit 0
X
XERROR:
Xforeach f (`sccs tell`)
X    sccs unedit $f
Xend
Xecho ""
Xecho ""
Xecho Danger\!  Danger\!
Xecho Some command exited with a non-zero exit status.
Xecho Log file exists in $logfile.
Xecho ""
Xecho Incomplete history in ./RCS -- remove it
Xecho Original unchanged history in ./SCCS
Xexit 1
END_OF_sccs2rcs
echo shar: 3 control characters may be missing from \"sccs2rcs\"
if test 7364 -ne `wc -c <sccs2rcs`; then
    echo shar: \"sccs2rcs\" unpacked with wrong size!
fi
chmod +x sccs2rcs
# end of overwriting check
fi
if test -f README -a "${1}" != "-c" ; then 
  echo shar: Will not over-write existing file \"README\"
else
echo shar: Extracting \"README\" \(1516 characters\)
sed "s/^X//" >README <<'END_OF_README'
XSccs2rcs is a script to convert an existing SCCS
Xhistory into an RCS history without losing any of
Xthe information contained therein.
XIt has been tested under the following OS's:
X    SunOS 3.5, 4.0.3, 4.1
X    Ultrix-32 2.0, 3.1
X
XThings to note:
X  + It will NOT delete or alter your ./SCCS history under any
circumstances.
X
X  + Run in a directory where ./SCCS exists and where you can
X      create ./RCS
X
X  + /usr/local/bin is put in front of the default path.
X    (SCCS under Ultrix is set-uid sccs, bad bad bad, so
X    /usr/local/bin/sccs here fixes that)
X
X  + Date, time, author, comments, branches, are all preserved.
X
X  + If a command fails somewhere in the middle, it bombs with
X    a message -- remove what it's done so far and try again.
X        "rm -rf RCS; sccs unedit `sccs tell`; sccs clean"
X    There is no recovery and exit is far from graceful.
X    If a particular module is hanging you up, consider
X    doing it separately; move it from the current area so that
X    the next run will have a better chance or working.
X    Also (for the brave only) you might consider hacking
X    the s-file for simpler problems:  I've successfully changed
X    the date of a delta to be in sync, then run "sccs admin -z"
X    on the thing.
X
X  + After everything finishes, ./SCCS will be moved to ./old-SCCS.
X
XThis file may be copied, processed, hacked, mutilated, and
Xeven destroyed as long as you don't tell anyone you wrote it.
X
XKen Cox
XViewlogic Systems, Inc.
Xkenstir@viewlogic.com
X...!harvard!cg-atla!viewlog!kenstir
END_OF_README
if test 1516 -ne `wc -c <README`; then
    echo shar: \"README\" unpacked with wrong size!
fi
# end of overwriting check
fi
echo shar: End of shell archive.
exit 0