117721Speter#! /bin/sh
217721Speter#
3175261Sobrien#   Copyright (c) 1989-2005 The Free Software Foundation, Inc.
4175261Sobrien#   Portions Copyright (c) 1989, Brian Berliner
5175261Sobrien#
6175261Sobrien# This program is free software; you can redistribute it and/or modify
7175261Sobrien# it under the terms of the GNU General Public License as published by
8175261Sobrien# the Free Software Foundation; either version 2, or (at your option)
9175261Sobrien# any later version.
10175261Sobrien#
11175261Sobrien# This program is distributed in the hope that it will be useful,
12175261Sobrien# but WITHOUT ANY WARRANTY; without even the implied warranty of
13175261Sobrien# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14175261Sobrien# GNU General Public License for more details.
15175261Sobrien#
1617721Speter# Based on the CVS 1.0 checkin csh script.
1717721Speter# Contributed by Per Cederqvist <ceder@signum.se>.
1817721Speter# Rewritten in sh by David MacKenzie <djm@cygnus.com>.
1917721Speter#
2017721Speter#############################################################################
2117721Speter#
2217721Speter# Check in sources that previously were under RCS or no source control system.
2317721Speter#
2417721Speter# The repository is the directory where the sources should be deposited.
2517721Speter#
2617721Speter# Traverses the current directory, ensuring that an
2717721Speter# identical directory structure exists in the repository directory.  It
2817721Speter# then checks the files in in the following manner:
2917721Speter#
3017721Speter#		1) If the file doesn't yet exist, check it in as revision 1.1
3117721Speter#
3217721Speter# The script also is somewhat verbose in letting the user know what is
3317721Speter# going on.  It prints a diagnostic when it creates a new file, or updates
3417721Speter# a file that has been modified on the trunk.
3517721Speter#
3617721Speter# Bugs: doesn't put the files in branch 1.1.1
3717721Speter#       doesn't put in release and vendor tags
3817721Speter#
3917721Speter#############################################################################
4017721Speter
4117721Speterusage="Usage: rcs-to-cvs [-v] [-m message] [-f message_file] repository"
4217721Spetervbose=0
4317721Spetermessage=""
4425839Speterif [ -d /var/tmp ]; then message_file=/var/tmp/checkin.$$; else message_file=/usr/tmp/checkin.$$; fi
4517721Spetergot_one=0
4617721Speter
4717721Speterif [ $# -lt 1 ]; then
4817721Speter    echo "$usage" >&2
4917721Speter    exit 1
5017721Speterfi
5117721Speter
5217721Speterwhile [ $# -ne 0 ]; do
5317721Speter    case "$1" in
5417721Speter        -v)
5517721Speter            vbose=1
5617721Speter	    ;;
5717721Speter	-m)
5817721Speter	    shift
5917721Speter	    echo $1 > $message_file
6017721Speter	    got_one=1
6117721Speter	    ;;
6217721Speter	-f)
6317721Speter	    shift
6417721Speter	    message_file=$1
6517721Speter	    got_one=2
6617721Speter	    ;;
6717721Speter	*)
6817721Speter	    break
6917721Speter    esac
7017721Speter    shift
7117721Speterdone
7217721Speter
7317721Speterif [ $# -lt 1 ]; then
7417721Speter    echo "$usage" >&2
7517721Speter    exit 1
7617721Speterfi
7717721Speter
7817721Speterrepository=$1
7917721Spetershift
8017721Speter
8117721Speterif [ -z "$CVSROOT" ]; then
8217721Speter    echo "Please the environmental variable CVSROOT to the root" >&2
8317721Speter    echo "	of the tree you wish to update" >&2
8417721Speter    exit 1
8517721Speterfi
8617721Speter
8717721Speterif [ $got_one -eq 0 ]; then
8817721Speter    echo "Please Edit this file to contain the RCS log information" >$message_file
8917721Speter    echo "to be associated with this directory (please remove these lines)">>$message_file
9025839Speter    ${EDITOR-vi} $message_file
9117721Speter    got_one=1
9217721Speterfi
9317721Speter
9417721Speter# Ya gotta share.
9517721Speterumask 0
9617721Speter
9717721Speterupdate_dir=${CVSROOT}/${repository}
9817721Speter[ ! -d ${update_dir} ] && mkdir $update_dir
9917721Speter
10017721Speterif [ -d SCCS ]; then
10117721Speter    echo SCCS files detected! >&2
10217721Speter    exit 1
10317721Speterfi
10417721Speterif [ -d RCS ]; then
10517721Speter    co RCS/*
10617721Speterfi
10717721Speter
10817721Speterfor name in * .[a-zA-Z0-9]*
10917721Speterdo
11017721Speter    case "$name" in
11117721Speter    RCS | *~ | \* | .\[a-zA-Z0-9\]\* ) continue ;;
11217721Speter    esac
11317721Speter    echo $name
11417721Speter    if [ $vbose -ne 0 ]; then 
11517721Speter	echo "Updating ${repository}/${name}"
11617721Speter    fi
11717721Speter    if [ -d "$name" ]; then
11817721Speter	if [ ! -d "${update_dir}/${name}" ]; then
11917721Speter	    echo "WARNING: Creating new directory ${repository}/${name}"
12017721Speter	    mkdir "${update_dir}/${name}"
12117721Speter	    if [ $? -ne 0 ]; then
12217721Speter		echo "ERROR: mkdir failed - aborting" >&2
12317721Speter		exit 1
12417721Speter	    fi
12517721Speter	fi
12617721Speter	cd "$name"
12717721Speter	if [ $? -ne 0 ]; then
12817721Speter	    echo "ERROR: Couldn\'t cd to $name - aborting" >&2
12917721Speter	    exit 1
13017721Speter	fi
13117721Speter	if [ $vbose -ne 0 ]; then
13217721Speter	    $0 -v -f $message_file "${repository}/${name}"
13317721Speter	else
13417721Speter	    $0 -f $message_file "${repository}/${name}"
13517721Speter	fi
13617721Speter	if [ $? -ne 0 ]; then 
13717721Speter	    exit 1
13817721Speter	fi
13917721Speter	cd ..
14017721Speter    else	# if not directory 
14117721Speter	if [ ! -f "$name" ]; then
14217721Speter	    echo "WARNING: $name is neither a regular file"
14317721Speter	    echo "	   nor a directory - ignored"
14417721Speter	    continue
14517721Speter	fi
14617721Speter	file="${update_dir}/${name},v"
14717721Speter	comment=""
14817721Speter	if grep -s '\$Log.*\$' "${name}"; then # If $Log keyword
14917721Speter	    myext=`echo $name | sed 's,.*\.,,'`
15017721Speter	    [ "$myext" = "$name" ] && myext=
15117721Speter	    case "$myext" in
15217721Speter		c | csh | e | f | h | l | mac | me | mm | ms | p | r | red | s | sh | sl | cl | ml | el | tex | y | ye | yr | "" )
15317721Speter		;;
15417721Speter
15517721Speter		* )
15617721Speter		echo "For file ${file}:"
15717721Speter		grep '\$Log.*\$' "${name}"
15817721Speter		echo -n "Please insert a comment leader for file ${name} > "
15917721Speter		read comment
16017721Speter		;;
16117721Speter	    esac
16217721Speter	fi
16317721Speter	if [ ! -f "$file" ]; then	# If not exists in repository
16417721Speter	    if [ ! -f "${update_dir}/Attic/${name},v" ]; then
16517721Speter	        echo "WARNING: Creating new file ${repository}/${name}"
16617721Speter		if [ -f RCS/"${name}",v ]; then
16717721Speter			echo "MSG: Copying old rcs file."
16817721Speter			cp RCS/"${name}",v "$file"
16917721Speter		else
17017721Speter   		    if [ -n "${comment}" ]; then
17117721Speter		        rcs -q -i -c"${comment}" -t${message_file} -m'.' "$file"
17217721Speter		    fi
17317721Speter	            ci -q -u1.1 -t${message_file} -m'.' "$file" 
17417721Speter	            if [ $? -ne 0 ]; then
17517721Speter		        echo "ERROR: Initial check-in of $file failed - aborting" >&2
17617721Speter		        exit 1
17717721Speter	            fi
17817721Speter		fi
17917721Speter	    else 
18017721Speter		file="${update_dir}/Attic/${name},v"
18117721Speter		echo "WARNING: IGNORED: ${repository}/Attic/${name}"
18217721Speter		continue
18317721Speter	    fi
18417721Speter	else	# File existed 
18517721Speter	    echo "ERROR: File exists in repository: Ignored: $file"
18617721Speter	    continue
18717721Speter	fi
18817721Speter    fi
18917721Speterdone
19017721Speter
19117721Speter[ $got_one -eq 1 ] && rm -f $message_file
19217721Speter
19317721Speterexit 0
194