Merge from vendor branch CVS:
[dragonfly.git] / contrib / cvs-1.12.11 / contrib / rcs-to-cvs.sh
1 #! /bin/sh
2 #
3 # Based on the CVS 1.0 checkin csh script.
4 # Contributed by Per Cederqvist <ceder@signum.se>.
5 # Rewritten in sh by David MacKenzie <djm@cygnus.com>.
6 #
7 #   Copyright (c) 1989, Brian Berliner
8 #
9 #   You may distribute under the terms of the GNU General Public License.
10 #
11 #############################################################################
12 #
13 # Check in sources that previously were under RCS or no source control system.
14 #
15 # The repository is the directory where the sources should be deposited.
16 #
17 # Traverses the current directory, ensuring that an
18 # identical directory structure exists in the repository directory.  It
19 # then checks the files in in the following manner:
20 #
21 #               1) If the file doesn't yet exist, check it in as revision 1.1
22 #
23 # The script also is somewhat verbose in letting the user know what is
24 # going on.  It prints a diagnostic when it creates a new file, or updates
25 # a file that has been modified on the trunk.
26 #
27 # Bugs: doesn't put the files in branch 1.1.1
28 #       doesn't put in release and vendor tags
29 #
30 #############################################################################
31
32 usage="Usage: rcs-to-cvs [-v] [-m message] [-f message_file] repository"
33 vbose=0
34 message=""
35 if [ -d /var/tmp ]; then message_file=/var/tmp/checkin.$$; else message_file=/usr/tmp/checkin.$$; fi
36 got_one=0
37
38 if [ $# -lt 1 ]; then
39     echo "$usage" >&2
40     exit 1
41 fi
42
43 while [ $# -ne 0 ]; do
44     case "$1" in
45         -v)
46             vbose=1
47             ;;
48         -m)
49             shift
50             echo $1 > $message_file
51             got_one=1
52             ;;
53         -f)
54             shift
55             message_file=$1
56             got_one=2
57             ;;
58         *)
59             break
60     esac
61     shift
62 done
63
64 if [ $# -lt 1 ]; then
65     echo "$usage" >&2
66     exit 1
67 fi
68
69 repository=$1
70 shift
71
72 if [ -z "$CVSROOT" ]; then
73     echo "Please the environmental variable CVSROOT to the root" >&2
74     echo "      of the tree you wish to update" >&2
75     exit 1
76 fi
77
78 if [ $got_one -eq 0 ]; then
79     echo "Please Edit this file to contain the RCS log information" >$message_file
80     echo "to be associated with this directory (please remove these lines)">>$message_file
81     ${EDITOR-vi} $message_file
82     got_one=1
83 fi
84
85 # Ya gotta share.
86 umask 0
87
88 update_dir=${CVSROOT}/${repository}
89 [ ! -d ${update_dir} ] && mkdir $update_dir
90
91 if [ -d SCCS ]; then
92     echo SCCS files detected! >&2
93     exit 1
94 fi
95 if [ -d RCS ]; then
96     co RCS/*
97 fi
98
99 for name in * .[a-zA-Z0-9]*
100 do
101     case "$name" in
102     RCS | *~ | \* | .\[a-zA-Z0-9\]\* ) continue ;;
103     esac
104     echo $name
105     if [ $vbose -ne 0 ]; then 
106         echo "Updating ${repository}/${name}"
107     fi
108     if [ -d "$name" ]; then
109         if [ ! -d "${update_dir}/${name}" ]; then
110             echo "WARNING: Creating new directory ${repository}/${name}"
111             mkdir "${update_dir}/${name}"
112             if [ $? -ne 0 ]; then
113                 echo "ERROR: mkdir failed - aborting" >&2
114                 exit 1
115             fi
116         fi
117         cd "$name"
118         if [ $? -ne 0 ]; then
119             echo "ERROR: Couldn\'t cd to $name - aborting" >&2
120             exit 1
121         fi
122         if [ $vbose -ne 0 ]; then
123             $0 -v -f $message_file "${repository}/${name}"
124         else
125             $0 -f $message_file "${repository}/${name}"
126         fi
127         if [ $? -ne 0 ]; then 
128             exit 1
129         fi
130         cd ..
131     else        # if not directory 
132         if [ ! -f "$name" ]; then
133             echo "WARNING: $name is neither a regular file"
134             echo "         nor a directory - ignored"
135             continue
136         fi
137         file="${update_dir}/${name},v"
138         comment=""
139         if grep -s '\$Log.*\$' "${name}"; then # If $Log keyword
140             myext=`echo $name | sed 's,.*\.,,'`
141             [ "$myext" = "$name" ] && myext=
142             case "$myext" in
143                 c | csh | e | f | h | l | mac | me | mm | ms | p | r | red | s | sh | sl | cl | ml | el | tex | y | ye | yr | "" )
144                 ;;
145
146                 * )
147                 echo "For file ${file}:"
148                 grep '\$Log.*\$' "${name}"
149                 echo -n "Please insert a comment leader for file ${name} > "
150                 read comment
151                 ;;
152             esac
153         fi
154         if [ ! -f "$file" ]; then       # If not exists in repository
155             if [ ! -f "${update_dir}/Attic/${name},v" ]; then
156                 echo "WARNING: Creating new file ${repository}/${name}"
157                 if [ -f RCS/"${name}",v ]; then
158                         echo "MSG: Copying old rcs file."
159                         cp RCS/"${name}",v "$file"
160                 else
161                     if [ -n "${comment}" ]; then
162                         rcs -q -i -c"${comment}" -t${message_file} -m'.' "$file"
163                     fi
164                     ci -q -u1.1 -t${message_file} -m'.' "$file" 
165                     if [ $? -ne 0 ]; then
166                         echo "ERROR: Initial check-in of $file failed - aborting" >&2
167                         exit 1
168                     fi
169                 fi
170             else 
171                 file="${update_dir}/Attic/${name},v"
172                 echo "WARNING: IGNORED: ${repository}/Attic/${name}"
173                 continue
174             fi
175         else    # File existed 
176             echo "ERROR: File exists in repository: Ignored: $file"
177             continue
178         fi
179     fi
180 done
181
182 [ $got_one -eq 1 ] && rm -f $message_file
183
184 exit 0