/contrib/cvs/contrib/rcs-to-cvs.sh
https://bitbucket.org/freebsd/freebsd-head/ · Shell · 193 lines · 139 code · 14 blank · 40 comment · 29 complexity · 345d3a1bbb152dbd31067e9cdd342b04 MD5 · raw file
- #! /bin/sh
- #
- # Copyright (c) 1989-2005 The Free Software Foundation, Inc.
- # Portions Copyright (c) 1989, Brian Berliner
- #
- # This program is free software; you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation; either version 2, or (at your option)
- # any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # Based on the CVS 1.0 checkin csh script.
- # Contributed by Per Cederqvist <ceder@signum.se>.
- # Rewritten in sh by David MacKenzie <djm@cygnus.com>.
- #
- #############################################################################
- #
- # Check in sources that previously were under RCS or no source control system.
- #
- # The repository is the directory where the sources should be deposited.
- #
- # 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 1.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.
- #
- # Bugs: doesn't put the files in branch 1.1.1
- # doesn't put in release and vendor tags
- #
- #############################################################################
- usage="Usage: rcs-to-cvs [-v] [-m message] [-f message_file] repository"
- vbose=0
- message=""
- if [ -d /var/tmp ]; then message_file=/var/tmp/checkin.$$; else message_file=/usr/tmp/checkin.$$; fi
- got_one=0
- if [ $# -lt 1 ]; then
- echo "$usage" >&2
- exit 1
- fi
- while [ $# -ne 0 ]; do
- case "$1" in
- -v)
- vbose=1
- ;;
- -m)
- shift
- echo $1 > $message_file
- got_one=1
- ;;
- -f)
- shift
- message_file=$1
- got_one=2
- ;;
- *)
- break
- esac
- shift
- done
- if [ $# -lt 1 ]; then
- echo "$usage" >&2
- exit 1
- fi
- repository=$1
- shift
- if [ -z "$CVSROOT" ]; then
- echo "Please the environmental variable CVSROOT to the root" >&2
- echo " of the tree you wish to update" >&2
- exit 1
- fi
- if [ $got_one -eq 0 ]; then
- echo "Please Edit this file to contain the RCS log information" >$message_file
- echo "to be associated with this directory (please remove these lines)">>$message_file
- ${EDITOR-vi} $message_file
- got_one=1
- fi
- # Ya gotta share.
- umask 0
- update_dir=${CVSROOT}/${repository}
- [ ! -d ${update_dir} ] && mkdir $update_dir
- if [ -d SCCS ]; then
- echo SCCS files detected! >&2
- exit 1
- fi
- if [ -d RCS ]; then
- co RCS/*
- fi
- for name in * .[a-zA-Z0-9]*
- do
- case "$name" in
- RCS | *~ | \* | .\[a-zA-Z0-9\]\* ) continue ;;
- esac
- echo $name
- if [ $vbose -ne 0 ]; then
- echo "Updating ${repository}/${name}"
- fi
- if [ -d "$name" ]; then
- if [ ! -d "${update_dir}/${name}" ]; then
- echo "WARNING: Creating new directory ${repository}/${name}"
- mkdir "${update_dir}/${name}"
- if [ $? -ne 0 ]; then
- echo "ERROR: mkdir failed - aborting" >&2
- exit 1
- fi
- fi
- cd "$name"
- if [ $? -ne 0 ]; then
- echo "ERROR: Couldn\'t cd to $name - aborting" >&2
- exit 1
- fi
- if [ $vbose -ne 0 ]; then
- $0 -v -f $message_file "${repository}/${name}"
- else
- $0 -f $message_file "${repository}/${name}"
- fi
- if [ $? -ne 0 ]; then
- exit 1
- fi
- cd ..
- else # if not directory
- if [ ! -f "$name" ]; then
- echo "WARNING: $name is neither a regular file"
- echo " nor a directory - ignored"
- continue
- fi
- file="${update_dir}/${name},v"
- comment=""
- if grep -s '\$Log.*\$' "${name}"; then # If $Log keyword
- myext=`echo $name | sed 's,.*\.,,'`
- [ "$myext" = "$name" ] && myext=
- case "$myext" in
- c | csh | e | f | h | l | mac | me | mm | ms | p | r | red | s | sh | sl | cl | ml | el | tex | y | ye | yr | "" )
- ;;
- * )
- echo "For file ${file}:"
- grep '\$Log.*\$' "${name}"
- echo -n "Please insert a comment leader for file ${name} > "
- read comment
- ;;
- esac
- fi
- 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 [ -n "${comment}" ]; then
- rcs -q -i -c"${comment}" -t${message_file} -m'.' "$file"
- fi
- ci -q -u1.1 -t${message_file} -m'.' "$file"
- if [ $? -ne 0 ]; then
- echo "ERROR: Initial check-in of $file failed - aborting" >&2
- exit 1
- fi
- fi
- else
- file="${update_dir}/Attic/${name},v"
- echo "WARNING: IGNORED: ${repository}/Attic/${name}"
- continue
- fi
- else # File existed
- echo "ERROR: File exists in repository: Ignored: $file"
- continue
- fi
- fi
- done
- [ $got_one -eq 1 ] && rm -f $message_file
- exit 0