209 lines
5.8 KiB
Tcsh
209 lines
5.8 KiB
Tcsh
#!/bin/csh
|
|
#
|
|
# rcs-to-cvs,v 1.3 1992/04/10 03:04:25 berliner Exp
|
|
# Contributed by Per Cederqvist <ceder@lysator.liu.se>.
|
|
#
|
|
# Copyright (c) 1989, Brian Berliner
|
|
#
|
|
# You may distribute under the terms of the GNU General Public License
|
|
# as specified in the README file that comes with the CVS 1.0 kit.
|
|
#
|
|
#############################################################################
|
|
# #
|
|
# This script is used to check in sources that previously was under RCS or #
|
|
# no source control system. #
|
|
# #
|
|
# Usage: rcs-to-cvs repository #
|
|
# #
|
|
# The repository is the directory where the sources should #
|
|
# be deposited.
|
|
# #
|
|
# checkin traverses the current directory, ensuring that an #
|
|
# identical directory structure exists in the repository directory. It #
|
|
# then checks the files in in the following manner: #
|
|
# #
|
|
# 1) If the file doesn't yet exist, check it in #
|
|
# as revision 0.1 #
|
|
# #
|
|
# The script also is somewhat verbose in letting the user know what is #
|
|
# going on. It prints a diagnostic when it creates a new file, or updates #
|
|
# a file that has been modified on the trunk. #
|
|
# #
|
|
#############################################################################
|
|
|
|
set vbose = 0
|
|
set message = ""
|
|
set cvsbin = /usr/gnu/bin
|
|
set rcsbin = /usr/gnu/bin
|
|
set grep = /bin/grep
|
|
set message_file = /usr/tmp/checkin.$$
|
|
set got_one = 0
|
|
|
|
if ( $#argv < 1 ) then
|
|
echo "Usage: rcs-to-cvs [-v] [-m message] [-f message_file] repository"
|
|
exit 1
|
|
endif
|
|
while ( $#argv )
|
|
switch ( $argv[1] )
|
|
case -v:
|
|
set vbose = 1
|
|
breaksw
|
|
case -m:
|
|
shift
|
|
echo $argv[1] > $message_file
|
|
set got_one = 1
|
|
breaksw
|
|
case -f:
|
|
shift
|
|
set message_file = $argv[1]
|
|
set got_one = 2
|
|
breaksw
|
|
default:
|
|
break
|
|
endsw
|
|
shift
|
|
end
|
|
if ( $#argv < 1 ) then
|
|
echo "Usage: rcs-to-cvs [-v] [-m message] [-f message_file] repository"
|
|
exit 1
|
|
endif
|
|
set repository = $argv[1]
|
|
shift
|
|
|
|
if ( ! $?CVSROOT ) then
|
|
echo "Please set the environmental variable CVSROOT to the root"
|
|
echo " of the tree you wish to update"
|
|
exit 1
|
|
endif
|
|
|
|
if ( $got_one == 0 ) then
|
|
echo "Please Edit this file to contain the RCS log information" >$message_file
|
|
echo "to be associated with this file (please remove these lines)">>$message_file
|
|
if ( $?EDITOR ) then
|
|
$EDITOR $message_file > /dev/tty
|
|
else
|
|
/usr/ucb/vi $message_file > /dev/tty
|
|
endif
|
|
set got_one = 1
|
|
endif
|
|
|
|
umask 22
|
|
|
|
set update_dir = ${CVSROOT}/${repository}
|
|
if ( -d SCCS ) then
|
|
echo SCCS files detected!
|
|
exit 1
|
|
endif
|
|
if ( -d RCS ) then
|
|
$rcsbin/co RCS/* >& /dev/null
|
|
endif
|
|
foreach name ( * .[a-zA-Z0-9]* )
|
|
echo $name
|
|
if ( "$name" == SCCS ) then
|
|
continue
|
|
endif
|
|
if ( "$name" == RCS ) then
|
|
continue
|
|
endif
|
|
if ( $vbose ) then
|
|
echo "Updating ${repository}/${name}"
|
|
endif
|
|
if ( -d "$name" ) then
|
|
if ( ! -d "${update_dir}/${name}" ) then
|
|
echo "WARNING: Creating new directory ${repository}/${name}"
|
|
mkdir "${update_dir}/${name}"
|
|
if ( $status ) then
|
|
echo "ERROR: mkdir failed - aborting"
|
|
exit 1
|
|
endif
|
|
endif
|
|
chdir "$name"
|
|
if ( $status ) then
|
|
echo "ERROR: Couldn\'t chdir to "$name" - aborting"
|
|
exit 1
|
|
endif
|
|
if ( $vbose ) then
|
|
rcs-to-cvs -v -f $message_file "${repository}/${name}"
|
|
else
|
|
rcs-to-cvs -f $message_file "${repository}/${name}"
|
|
endif
|
|
if ( $status ) then
|
|
exit 1
|
|
endif
|
|
chdir ..
|
|
else # if not directory
|
|
if ( ! -f "$name" ) then
|
|
echo "WARNING: "$name" is neither a regular file"
|
|
echo " nor a directory - ignored"
|
|
continue
|
|
endif
|
|
set file = "${update_dir}/${name},v"
|
|
set new = 0
|
|
set comment = ""
|
|
grep -s '\$Log.*\$' "${name}"
|
|
if ( $status == 0 ) then # If $Log keyword
|
|
set myext = ${name:e}
|
|
set knownext = 0
|
|
foreach xx ( "c" "csh" "e" "f" "h" "l" "mac" "me" "mm" "ms" "p" "r" "red" "s" "sh" "sl" "cl" "ml" "el" "tex" "y" "ye" "yr" "" )
|
|
if ( "${myext}" == "${xx}" ) then
|
|
set knownext = 1
|
|
break
|
|
endif
|
|
end
|
|
if ( $knownext == 0 ) then
|
|
echo For file ${file}:
|
|
grep '\$Log.*\$' "${name}"
|
|
echo -n "Please insert a comment leader for file ${name} > "
|
|
set comment = $<
|
|
endif
|
|
endif
|
|
if ( ! -f "$file" ) then # If not exists in repository
|
|
if ( ! -f "${update_dir}/Attic/${name},v" ) then
|
|
echo "WARNING: Creating new file ${repository}/${name}"
|
|
if ( -f RCS/"${name}",v ) then
|
|
echo "MSG: Copying old rcs file."
|
|
cp RCS/"${name}",v "$file"
|
|
else
|
|
if ( "${comment}" != "" ) then
|
|
$rcsbin/rcs -q -i -c"${comment}" -t${message_file} -m'.' "$file"
|
|
endif
|
|
$rcsbin/ci -q -u0.1 -t${message_file} -m'.' "$file"
|
|
if ( $status ) then
|
|
echo "ERROR: Initial check-in of $file failed - aborting"
|
|
exit 1
|
|
endif
|
|
set new = 1
|
|
endif
|
|
else
|
|
set file = "${update_dir}/Attic/${name},v"
|
|
echo "WARNING: IGNORED: ${repository}/Attic/${name}"
|
|
continue
|
|
endif
|
|
else # File existed
|
|
echo ERROR: File exists: Ignored: "$file"
|
|
continue
|
|
# set headbranch = `sed -n '/^head/p; /^branch/p; 2q' $file`
|
|
# if ( $#headbranch != 2 && $#headbranch != 4 ) then
|
|
# echo "ERROR: corrupted RCS file $file - aborting"
|
|
# endif
|
|
# set head = "$headbranch[2]"
|
|
# set branch = ""
|
|
# if ( $#headbranch == 4 ) then
|
|
# set branch = "$headbranch[4]"
|
|
# endif
|
|
# if ( "$head" == "1.1;" && "$branch" != "1.1.1;" ) then
|
|
# ${rcsbin}/rcsdiff -q -r1.1 $file > /dev/null
|
|
# if ( ! $status ) then
|
|
# set new = 1
|
|
# endif
|
|
# else
|
|
# if ( "$branch" != "1.1.1;" ) then
|
|
# echo -n "WARNING: Updating locally modified file "
|
|
# echo "${repository}/${name}"
|
|
# endif
|
|
# endif
|
|
endif
|
|
endif
|
|
end
|
|
if ( $got_one == 1 ) rm $message_file
|