sccscp.sh revision 7c478bd95313f5f23a4c958a745db2134aa03244
#!/bin/sh
#
# CDDL HEADER START
#
# The contents of this file are subject to the terms of the
# Common Development and Distribution License, Version 1.0 only
# (the "License"). You may not use this file except in compliance
# with the License.
#
# You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
# or http://www.opensolaris.org/os/licensing.
# See the License for the specific language governing permissions
# and limitations under the License.
#
# When distributing Covered Code, include this CDDL HEADER in each
# file and include the License file at usr/src/OPENSOLARIS.LICENSE.
# If applicable, add the following below this CDDL HEADER, with the
# fields enclosed by brackets "[]" replaced with your own identifying
# information: Portions Copyright [yyyy] [name of copyright owner]
#
# CDDL HEADER END
#
#
# Copyright 1993-1998, 2003 Sun Microsystems, Inc.
# All rights reserved.
# Use is subject to license terms.
#
#pragma ident "%Z%%M% %I% %E% SMI"
#
# This script is to be used to copy SCCS files and SCCS
# directory structures within a CodeManager workspace
# You specify the 'clear file' or directory to sccscp, it
# will duplicate the coresponding s-dot file(s),
# and do an SCCS GET operation on the newly
# created s-dot file.
#
#
#
# The CDPATH variable causes ksh's `cd' builtin to emit messages to stdout
# under certain circumstances, which can really screw things up; unset it.
#
unset CDPATH
R_FLAG=0
G_FLAG=0
E_FLAG=0
usage()
{
echo "usage: sccscp [-r] filename1 [ filename2...] target"
echo " -r copy a directory and all of its files"
echo " -g copy the sdot file, but do not sccs-get it"
echo " -e copy most recent delta if file is currently checked out."
echo " -d debug mode"
} #usage()
#
# function to return that last arguement passed to it.
# I use this in place of array indexing - which shell
# does not do well.
#
getlast()
{
for arg in $*
do
:
done
echo "$arg"
} # getlast()
#
# copy_file(source, destination)
#
copy_file()
{
f1=`basename $1`
d1=`dirname $1`
s1="$d1/SCCS/s.$f1"
p1="$d1/SCCS/p.$f1"
f2=`basename $2`
d2=`dirname $2`
s2="$d2/SCCS/s.$f2"
#
# is the file currently checked out?
#
if [ "(" -f $p1 ")" -a "(" $E_FLAG -eq "0" ")" ]; then
echo "sccscp: $f1 currently checked out - not copied"
return
fi
#
# Does the destination directory have an SCCS directory,
# if not we will create it!
#
if [ ! -d $d2/SCCS ]; then
mkdir $d2/SCCS
fi
cp $s1 $s2
if [ $G_FLAG -eq "0" ]; then
PWD=`pwd`
cd $d2
echo "sccs get $d2/$f2"
sccs get $f2
cd $PWD
fi
} # copy_file()
#
# copy_dir(source, destination)
#
copy_dir()
{
PWD=`pwd`
if [ -d $2 ]; then
destdir=$2/`basename $1`
else
destdir=$2
fi
cd $1
find . -name "s.*" -print | grep '/SCCS/s\.' \
| while read sdot
do
sdot=`echo $sdot | sed -e "s/^\.\///"`
d2=$PWD/$destdir/`dirname $sdot`
f2=`basename $sdot | sed -e "s/^s\.//" `
if [ "(" -f $PWD/$1/`dirname $sdot`/p.$f2 ")" -a \
"(" $E_FLAG -eq "0" ")" ]; then
d1=`basename $sdot`
d1=`basename $d1`
echo "sccscp: $d1/$f2 currently checked out - not copied"
continue
fi
if [ ! -d $d2 ]; then
mkdir -p $d2
fi
cp $PWD/$1/$sdot $PWD/$destdir/$sdot
if [ $G_FLAG -eq "0" ]; then
dir=`dirname $destdir/$sdot`
dir=`dirname $dir`
cd $PWD/$dir
echo "sccs get $dir/$f2"
sccs get $f2
fi
done
cd $PWD
} # copy_dir()
if [ -f /usr/sccs/admin ]; then
ADMIN=/usr/sccs/admin
PRS=/usr/sccs/prs
else
ADMIN=/usr/ccs/bin/admin
PRS=/usr/ccs/bin/prs
fi
#
# Parse options...
#
set -- `getopt edgr $*`
if [ $? != 0 ]; then
usage
exit 2
fi
for i in $*
do
case $i in
-r) R_FLAG=1; shift;;
-d) set -x; shift;;
-g) G_FLAG=1; shift;;
-e) E_FLAG=1; shift;;
--) shift; break;;
esac
done
if [ $# -lt 2 ]; then
echo "sccscp: Insufficient arguments (${#})"
usage
exit 1
fi
lastarg=`getlast $*`
if [ "(" $# -gt 2 ")" -a "(" ! -d $lastarg ")" ]; then
echo "sccscp: Target must be a directory"
usage
exit 1
fi
while [ $# -gt 1 ]
do
if [ ! -r $1 ]; then
echo "sccscp: cannot access $1"
shift
continue
fi
if [ -d $lastarg ]; then
dest=$lastarg/`basename $1`
else
dest=$lastarg
fi
if [ -d $1 ]; then
if [ $R_FLAG -eq 0 ]; then
echo "sccscp: <$1> directory"
else
copy_dir $1 $dest
fi
else
copy_file $1 $dest
fi
shift
done