[p4] SCCS to perforce Migration
Eric Dew
ericd at resilience.com
Wed Jan 16 11:37:17 PST 2002
I have done a SCCS to RCS at one time for another company. There, I had the
benefit of using a freeware sccs2rcs utility. I just wrote a wrapper
script to search
through for all s-files and create a corresponding ,v-file.
In this case, SCCS to P4 (or even RCS to P4), you might need to do a
different tack
because you don't want to get swamped with changelists. If you just did a
p4 edit <filename>
sccs get -r<rev_num> <filename>
p4 submit <filename>
for each revision and each file, you can get a heckuva lot of
changelists, which makes
the whole changelist list useless.
The way I did it below allows one to limit the number of changelists to
the max number
of revisions from all the files. In my run, that number was 44. You
will lose information
about each check-in that occurred in SCCS, but hey, you have to move
forward, right?
EDEW
Raju Subbanna X4832 wrote:
>Thank You Eric,
>By the way you are (un) officially the first person who has tried this.
>Congrats!!
>Now about me. I will wait a little longer before I actully spend any time on
>this.
>I am asking the group here to validate the efforts before I start on it.
>
>Thank You once again for responding and sharing
>--Raju
>
>Eric Dew wrote:
>
>>Actually, I just completed this (still doing it, actually, since SCCS
>>seems to propagate itself
>>with many copies of the SCCS/s.<filename> all over the place).
>>
>>Here's one question for you: do you want to keep the comments for each
>>file checked in in
>>SCCS? If not, there's an easy way. Otherwise, it could be quite difficult.
>>
>>Second question: do you have files in SCCS checked in on branches?
>> That is, are any files
>>checked in with a rev number resembling 1.2.4.2 (as opposed to 1.2)? If
>>so, that's also a pain
>>in the ass.
>>
>>So, assume you have the following situation: revisions of all files are
>>linearly checked in.
>>That is, they are numbered, 1.1, 1.2, 1.3, 1.4, etc. (with the top
>>revision possibly different
>>for different files, of course).
>>
>>Second, assume you don't really care too much about the comments. (In
>>my case, the comments
>>were basically non-existent.)
>>
>>Then, what I did was created a perl script which basically did the
>>following:
>>
>>%files = get_all_files();
>>&create_submit_template;
>>&check_in_revision_1;
>>&loop_through_all_revisions;
>>
>>sub get_all_files
>>{
>> local(%file_info);
>> find('.');
>> wanted
>> {
>> <usual stuff>
>> }
>> &exec("$name");
>>
>> sub exec
>> {
>> if ($name =~ m|^\./(.*)/SCCS/s\.(.*)$|) #gets all files which
>>has an associated SCCS/s.file
>> {
>> $filename = "$1/$2";
>> }
>> `get the top revision of said file using sccs prs <filename> and
>>awking for rev number`;
>> $file_info{"$filename"} = $top_rev_number;
>> }
>> return(%file_info);
>>}
>>
>>sub create_submit_template
>>{
>> open(TEMPLATE,"/tmp/main_template");
>> print TEMPLATE "Change:\tnew\n\n";
>> print TEMPLATE "Client:\t$clientname\n\n";
>> # etc... all boilerplate text for a p4 submit form, except for the
>>actual files
>> close(TEMPLATE);
>>}
>>
>>sub check_in_revision_1
>>{
>> foreach $key (keys (%files))
>> {
>> rename("$key","${key}_new"); # don't want to blow away a
>>working version...
>> # rename it back after you're done.
>> `sccs get -r1.1 $key`; # you may need to chdir to proper place
>>and get the basename($key)
>> # but, you get the idea. If you just
>>do the above, you will
>> # check the file out to your pwd, not
>>in the correct location
>> `p4 add $key`; # again, actually p4 add basename($key)
>> open(SUBMIT_TEMPLATE, "/tmp/submitform_1");
>> print SUBMIT_TEMPLATE "\t//depot/<directory path>/<filename> add\n";
>> close(SUBMIT_TEMPLATE);
>> }
>> `p4 submit -i < /tmp/submitform_1`;
>>}
>>
>>sub loop_through_all_revisions
>>{
>> for($i = 2; ;$i++)
>> {
>> if ($number_of_files_checked_in == 0)
>> {
>> last;
>> {
>> $number_of_files_checked_in = p4checkin_and_submit_files($i);
>> }
>>}
>>
>>sub p4checkin_and_submit_files
>>{
>> my($count);
>> $rev = $_[0];
>> $count = 0;
>> `cp /tmp/main_template /tmp/submitform.$rev`;
>> foreach $key (keys (%files))
>> {
>> if ($files{$key} < $rev)
>> {
>> delete $files{$key};
>> next;
>> }
>> else
>> {
>> $count++;
>> $sccs_rev = "1.$rev";
>> #change directory to proper location
>> `p4 edit basename($key)`;
>> `sccs get -r$sccs_rev basename($key)`;
>> open(SUBFORM ">>/tmp/submitform.$rev");
>> print SUBFORM "\t//depot/<something>/$key edit\n";
>> close(SUBFORM);
>> }
>> }
>> `p4 submit -i < /tmp/submitform.$rev`;
>> return($count); # if $count is still zero, then there are no
>> # more files with top revision greater than
>> # greater than or equal to $rev, so we're done!
>>}
>>
>>This way, we check in all #1 revisions of the files, then #2, then #3, and
>>so on until we check in the highest revision from SCCS. There's one more
>>thing, which is to check in the working version, if you want to do that.
>>
>>Hope that helps!
>>
>>EDEW
>>
>>Raju Subbanna X4832 wrote:
>>
>>>Hi,
>>>Anyone who has done SCCS to Perforce migration, please share your
>>>experience.
>>>Thank You
>>>Raju
>>>
>>>
>>>_______________________________________________
>>>perforce-user mailing list - perforce-user at perforce.com
>>>http://maillist.perforce.com/mailman/listinfo/perforce-user
>>>
>
>
More information about the perforce-user
mailing list