[p4] SCCS to perforce Migration

Eric Dew ericd at resilience.com
Tue Jan 15 00:32:14 PST 2002


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