[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