vms/cms -> ultrix/rcs

Jeffrey Mogul mogul at wrl.dec.com
Tue Oct 16 11:08:38 AEST 1990


In article <LLLRWJD at dri.com> braun at dri.com (Karl T. Braun (kral)) writes:
>Currently one of the engineers has a wieldy and fragile set of csh/sh and dcl
>scripts running which 
>	(1)	check out a file from cms, old revision
>	(2)	move it (via dcp) to the ultrix machine
>	(3)	ci it into the rcs system.
>This must be done one revision at a time for each file.  Can you say *BARFO*?
>Anyone got any better ideas (boy, I sure hope so!)?

The usual unix-to-unix solution to this kind of problem is called "shar",
which stands for "shell archive".  The basic idea is that you write
a shell script that contains a set of text files as "data", interspersed
with shell commands that unpack this data into the proper files.  Or rather,
you don't actually write this script, you run a simple program that creates
the script (on the source machine).  You then copy the script, as one
file, to the target machine, and then invoke it as a shell script, whereupon
it unpacks itself.

Perhaps someone out there has a "shar" generator written in DCL.  Otherwise,
you'll have to write your own.  (I was writing DCL scripts before most
people had even heard of VMS; but since I haven't written any since then,
I can't help you with this.)  The original versions of "shar" were
written as shell scripts themselves, although nowadays they are written
in C. I've appended a version written for the shell (note that I've
included it as a "shar" archive, albeit one created with a fancier version
of "shar").

In your case, since you have a specific task that includes not just
moving the files, but using CMS and RCS, you might find it easier
to write a special-purpose DCL script that takes a list of files,
checks them out from CMS, and creates a shell script containing the files
interspersed with shell commands that unpack the files and "ci" them.

-Jeff

#! /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:  shar.sh
# Wrapped by mogul at jove.pa.dec.com on Mon Oct 15 18:07:20 1990
PATH=/bin:/usr/bin:/usr/ucb ; export PATH
if test -f 'shar.sh' -a "${1}" != "-c" ; then 
  echo shar: Will not clobber existing file \"'shar.sh'\"
else
echo shar: Extracting \"'shar.sh'\" \(1647 characters\)
sed "s/^X//" >'shar.sh' <<'END_OF_FILE'
X#!/bin/sh -
X#
X# Copyright (c) 1990 The Regents of the University of California.
X# All rights reserved.
X#
X# Redistribution and use in source and binary forms are permitted
X# provided that: (1) source distributions retain this entire copyright
X# notice and comment, and (2) distributions including binaries display
X# the following acknowledgement:  ``This product includes software
X# developed by the University of California, Berkeley and its contributors''
X# in the documentation or other materials provided with the distribution
X# and in all advertising materials mentioning features or use of this
X# software. Neither the name of the University nor the names of its
X# contributors may be used to endorse or promote products derived
X# from this software without specific prior written permission.
X# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
X# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
X# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
X#
X#	@(#)shar.sh	5.2 (Berkeley) 5/23/90
X#
X
if [ $# -eq 0 ]; then
X	echo 'usage: shar file ...'
X	exit 1
fi
X
cat << EOF
X# This is a shell archive.  Save it in a file, remove anything before
X# this line, and then unpack it by entering "sh file".  Note, it may
X# create directories; files and directories will be owned by you and
X# have default permissions.
X#
X# This archive contains:
X#
XEOF
X
for i
do
X	echo "#	$i"
done
X
echo "#"
X
for i
do
X	if [ -d $i ]; then
X		echo "echo c - $i"
X		echo "mkdir $i > /dev/null 2>&1"
X	else
X		echo "echo x - $i"
X		echo "sed 's/^X//' >$i << 'END-of-$i'"
X		sed 's/^/X/' $i
X		echo "END-of-$i"
X	fi
done
echo exit
echo ""
X
exit 0
END_OF_FILE
if test 1647 -ne `wc -c <'shar.sh'`; then
    echo shar: \"'shar.sh'\" unpacked with wrong size!
fi
# end of 'shar.sh'
fi
echo shar: End of shell archive.
exit 0



More information about the Comp.unix.ultrix mailing list