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