Initial bulk commit for "Git on MSys"
[msysgit/historical-msysgit.git] / lib / cvs / contrib / sccs2rcs
blob61207e222fe82549dd57de4148d8699847d100f3
1 #! no -f
3 # Sccs2rcs is a script to convert an existing SCCS
4 # history into an RCS history without losing any of
5 # the information contained therein.
6 # It has been tested under the following OS's:
7 #     SunOS 3.5, 4.0.3, 4.1
8 #     Ultrix-32 2.0, 3.1
10 # Things to note:
11 #   + It will NOT delete or alter your ./SCCS history under any circumstances.
13 #   + Run in a directory where ./SCCS exists and where you can
14 #       create ./RCS
16 #   + /usr/local/bin is put in front of the default path.
17 #     (SCCS under Ultrix is set-uid sccs, bad bad bad, so
18 #     /usr/local/bin/sccs here fixes that)
20 #   + Date, time, author, comments, branches, are all preserved.
22 #   + If a command fails somewhere in the middle, it bombs with
23 #     a message -- remove what it's done so far and try again.
24 #         "rm -rf RCS; sccs unedit `sccs tell`; sccs clean"
25 #     There is no recovery and exit is far from graceful.
26 #     If a particular module is hanging you up, consider
27 #     doing it separately; move it from the current area so that
28 #     the next run will have a better chance or working.
29 #     Also (for the brave only) you might consider hacking
30 #     the s-file for simpler problems:  I've successfully changed
31 #     the date of a delta to be in sync, then run "sccs admin -z"
32 #     on the thing.
34 #   + After everything finishes, ./SCCS will be moved to ./old-SCCS.
36 # This file may be copied, processed, hacked, mutilated, and
37 # even destroyed as long as you don't tell anyone you wrote it.
39 # Ken Cox
40 # Viewlogic Systems, Inc.
41 # kenstir@viewlogic.com
42 # ...!harvard!cg-atla!viewlog!kenstir
44 # Various hacks made by Brian Berliner before inclusion in CVS contrib area.
47 #we'll assume the user set up the path correctly
48 # for the Pmax, /usr/ucb/sccs is suid sccs, what a pain
49 #   /usr/local/bin/sccs should override /usr/ucb/sccs there
50 set path = (/usr/local/bin $path)
53 ############################################################
54 # Error checking
56 if (! -w .) then
57     echo "Error: ./ not writeable by you."
58     exit 1
59 endif
60 if (! -d SCCS) then
61     echo "Error: ./SCCS directory not found."
62     exit 1
63 endif
64 set edits = (`sccs tell`)
65 if ($#edits) then
66     echo "Error: $#edits file(s) out for edit...clean up before converting."
67     exit 1
68 endif
69 if (-d RCS) then
70     echo "Warning: RCS directory exists"
71     if (`ls -a RCS | wc -l` > 2) then
72         echo "Error: RCS directory not empty
73         exit 1
74     endif
75 else
76     mkdir RCS
77 endif
79 sccs clean
81 set logfile = /tmp/sccs2rcs_$$_log
82 rm -f $logfile
83 set tmpfile = /tmp/sccs2rcs_$$_tmp
84 rm -f $tmpfile
85 set emptyfile = /tmp/sccs2rcs_$$_empty
86 echo -n "" > $emptyfile
87 set initialfile = /tmp/sccs2rcs_$$_init
88 echo "Initial revision" > $initialfile
89 set sedfile = /tmp/sccs2rcs_$$_sed
90 rm -f $sedfile
91 set revfile = /tmp/sccs2rcs_$$_rev
92 rm -f $revfile
94 # the quotes surround the dollar signs to fool RCS when I check in this script
95 set sccs_keywords = (\
96     '%W%[       ]*%G%'\
97     '%W%[       ]*%E%'\
98     '%W%'\
99     '%Z%%M%[    ]*%I%[  ]*%G%'\
100     '%Z%%M%[    ]*%I%[  ]*%E%'\
101     '%M%[       ]*%I%[  ]*%G%'\
102     '%M%[       ]*%I%[  ]*%E%'\
103     '%M%'\
104     '%I%'\
105     '%G%'\
106     '%E%'\
107     '%U%')
108 set rcs_keywords = (\
109     '$'Id'$'\
110     '$'Id'$'\
111     '$'Id'$'\
112     '$'SunId'$'\
113     '$'SunId'$'\
114     '$'Id'$'\
115     '$'Id'$'\
116     '$'RCSfile'$'\
117     '$'Revision'$'\
118     '$'Date'$'\
119     '$'Date'$'\
120     '')
123 ############################################################
124 # Get some answers from user
126 echo ""
127 echo "Do you want to be prompted for a description of each"
128 echo "file as it is checked in to RCS initially?"
129 echo -n "(y=prompt for description, n=null description) [y] ?"
130 set ans = $<
131 if ((_$ans == _) || (_$ans == _y) || (_$ans == _Y)) then
132     set nodesc = 0
133 else
134     set nodesc = 1
135 endif
136 echo ""
137 echo "The default keyword substitutions are as follows and are"
138 echo "applied in the order specified:"
139 set i = 1
140 while ($i <= $#sccs_keywords)
141 #    echo '     '\"$sccs_keywords[$i]\"'        ==>     '\"$rcs_keywords[$i]\"
142     echo "      $sccs_keywords[$i]      ==>     $rcs_keywords[$i]"
143     @ i = $i + 1
145 echo ""
146 echo -n "Do you want to change them [n] ?"
147 set ans = $<
148 if ((_$ans != _) && (_$ans != _n) && (_$ans != _N)) then
149     echo "You can't always get what you want."
150     echo "Edit this script file and change the variables:"
151     echo '    $sccs_keywords'
152     echo '    $rcs_keywords'
153 else
154     echo "good idea."
155 endif
157 # create the sed script
158 set i = 1
159 while ($i <= $#sccs_keywords)
160     echo "s,$sccs_keywords[$i],$rcs_keywords[$i],g" >> $sedfile
161     @ i = $i + 1
164 onintr ERROR
166 ############################################################
167 # Loop over every s-file in SCCS dir
169 foreach sfile (SCCS/s.*)
170     # get rid of the "s." at the beginning of the name
171     set file = `echo $sfile:t | sed -e "s/^..//"`
173     # work on each rev of that file in ascending order
174     set firsttime = 1
175     sccs prs $file | grep "^D " | awk '{print $2}' | sed -e 's/\./ /g' | sort -n -u +0 +1 +2 +3 +4 +5 +6 +7 +8 | sed -e 's/ /./g' > $revfile
176     foreach rev (`cat $revfile`)
177         if ($status != 0) goto ERROR
179         # get file into current dir and get stats
180         set year = `echo $date | cut -c3-4`
181         if ($year < 70) then
182                 # Y2K Bug, change century to 20
183                 set date = `echo $date | sed -e s/19/20/`
184         endif
185         set date = `sccs prs -r$rev $file | grep "^D " | awk '{printf("19%s %s", $3, $4); exit}'`
186         set author = `sccs prs -r$rev $file | grep "^D " | awk '{print $5; exit}'`
187         echo ""
188         echo "==> file $file, rev=$rev, date=$date, author=$author"
189         sccs edit -r$rev $file >>& $logfile
190         if ($status != 0) goto ERROR
191         echo checked out of SCCS
193         # add RCS keywords in place of SCCS keywords
194         sed -f $sedfile $file > $tmpfile
195         if ($status != 0) goto ERROR
196         echo performed keyword substitutions
197         cp $tmpfile $file
199         # check file into RCS
200         if ($firsttime) then
201             set firsttime = 0
202             if ($nodesc) then
203                 echo about to do ci
204                 echo ci -f -r$rev -d"$date" -w$author -t$emptyfile $file 
205                 ci -f -r$rev -d"$date" -w$author -t$emptyfile $file < $initialfile >>& $logfile
206                 if ($status != 0) goto ERROR
207                 echo initial rev checked into RCS without description
208             else
209                 echo ""
210                 echo Enter a brief description of the file $file \(end w/ Ctrl-D\):
211                 cat > $tmpfile
212                 ci -f -r$rev -d"$date" -w$author -t$tmpfile $file < $initialfile >>& $logfile
213                 if ($status != 0) goto ERROR
214                 echo initial rev checked into RCS
215             endif
216         else
217             # get RCS lock
218             set lckrev = `echo $rev | sed -e 's/\.[0-9]*$//'`
219             if ("$lckrev" =~ [0-9]*.*) then
220                 # need to lock the brach -- it is OK if the lock fails
221                 rcs -l$lckrev $file >>& $logfile
222             else
223                 # need to lock the trunk -- must succeed
224                 rcs -l $file >>& $logfile
225                 if ($status != 0) goto ERROR
226             endif
227             echo got lock
228             sccs prs -r$rev $file | grep "." > $tmpfile
229             # it's OK if grep fails here and gives status == 1
230             # put the delta message in $tmpfile
231             ed $tmpfile >>& $logfile <<EOF
232 /COMMENTS
233 1,.d
237             ci -f -r$rev -d"$date" -w$author $file < $tmpfile >>& $logfile
238             if ($status != 0) goto ERROR
239             echo checked into RCS
240         endif
241         sccs unedit $file >>& $logfile
242         if ($status != 0) goto ERROR
243     end
244     rm -f $file
248 ############################################################
249 # Clean up
251 echo cleaning up...
252 mv SCCS old-SCCS
253 rm -f $tmpfile $emptyfile $initialfile $sedfile
254 echo ===================================================
255 echo "       Conversion Completed Successfully"
256 echo ""
257 echo "         SCCS history now in old-SCCS/"
258 echo ===================================================
259 set exitval = 0
260 goto cleanup
262 ERROR:
263 foreach f (`sccs tell`)
264     sccs unedit $f
266 echo ""
267 echo ""
268 echo Danger\!  Danger\!
269 echo Some command exited with a non-zero exit status.
270 echo Log file exists in $logfile.
271 echo ""
272 echo Incomplete history in ./RCS -- remove it
273 echo Original unchanged history in ./SCCS
274 set exitval = 1
276 cleanup:
277 # leave log file
278 rm -f $tmpfile $emptyfile $initialfile $sedfile $revfile
280 exit $exitval