eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' & eval 'exec perl -S $0 $argv:q' if 0; # THE PRECEEDING STUFF EXECS perl via $PATH # -*-Fundamental-*- require 5.000; # $Id: //guest/perforce_software/utils/cvs2p4/test/runtest#11 $ # # Richard Geiger # sub dirname { local($dir) = @_; $dir =~ s%^$%.%; $dir = "$dir/"; if ($dir =~ m%^/[^/]*//*$%) { return "/"; } if ($dir =~ m%^.*[^/]//*[^/][^/]*//*$%) { $dir =~ s%^(.*[^/])//*[^/][^/]*//*$%$1%; { return $dir; } } return "."; } sub start_p4d { my $pid = fork(); if ($pid) { sleep 1; return $pid; } my $P4PORTNUM = $P4PORT; $P4PORTNUM =~ s/^.*://; my $cmd = "$P4D -r $P4ROOT -p $P4PORTNUM -q"; print "$Myname> $cmd\n"; exec $cmd; print "$Myname: exec \"$cmd\" failed: $!.\n"; exit 1; } sub stop_p4d { if (&s("$P4 -p $P4PORT admin stop")) { print "$Myname: *** \"$P4 -p $P4PORT admin stop\" failed\n"; &bail(1); } sleep 2; } use Carp; # ...or flounder. $| = 1; ($Myname = $0) =~ s%^.*/%%; $Mydir = &dirname($0); $Here = `/bin/pwd`; chop $Here; if ($Mydir ne ".") { chdir "$Mydir" || die "$Myname: can't chdir \"$Mydir\": $!"; } chdir ".." || die "$Myname: can't chdir \"..\": $!"; $Mydir = `/bin/pwd`; chop $Mydir; chdir $Here || die "$Myname: can't chdir \"$Here\": $!"; require "$Mydir/lib/util.pl"; $Usage = <<LIT; $Myname: usage: $Myname LIT sub usage { print STDERR $Usage; exit 1; } sub help { print STDERR <<LIT; $Usage $Myname is... LIT exit 1; } $Valopt = "default"; $Gengood = 0; $Savegood = 0; while ($#ARGV >= 0) { if ($ARGV[0] eq "-gengood") { $Gengood = 1; shift; next; } elsif ($ARGV[0] eq "-savegood") { $Savegood = 1; shift; next; } elsif ($ARGV[0] eq "-valopt") { shift; if ($ARGV[0] < 0) { &usage; } $Valopt = $ARGV[0]; shift; next; } elsif ($ARGV[0] eq "-help") { &help; } elsif ($ARGV[0] =~ /^-/) { &usage; } if ($Args ne "") { $Args .= " "; } push(@Args, $ARGV[0]); shift; } $Convdir = "$Mydir/test_conv_dir"; $Testdir = "$Mydir/test"; ### Setup # if ( &s("rm -rf $Convdir") || &s("mkdir $Convdir") || &s("cp $Testdir/config.test $Convdir/config") || &s("cp $Testdir/brmap.pl $Convdir") || &s("cp $Testdir/exclude_branches $Convdir") || &s("cp $Testdir/exclude_tags $Convdir")) { print "$Myname: *** setup failed\n"; exit 1; } # Make some files with nonprintables in the file names... # sub printnp { my ($s) = @_; my $o = ""; my $l = length($s); for (my $i = 0; $i <= $l; $i++) { my $c = substr($s, $i, 1); if ($c =~ /[\000-\037\177-\377]/) { $o .= sprintf("\\%03o", ord($c)); } else { $o .= "$c"; } } return $o; } @bads = ( "\002", "x\001y", "bad\177\377\324\003\004\005dab" ); foreach $bad (@bads) { my $path = "$Testdir/$bad,v"; printf "$Myname: create bad filename \"%s\"\n", &printnp($bad); open(BF, ">$path") || printf "$Myname: can't create: \"%s\": $!.\n", &printnp($path); print BF "$path\n"; close BF; } sub bail { my ($st) = @_; foreach $bad (@bads) { my $path = "$Testdir/$bad,v"; if (-e "$path") { &s("rm -f $path"); } } if (! $st) { print "$Myname: ok\n"; } exit ($st); } require "$Convdir/config"; print "$Myname > chdir $Mydir\n"; if (! chdir "$Mydir") { print "$Myname: ** can't \"chdir $Mydir\": $!\n"; &bail(1); } ### genmetadata # if (&s("bin/genmetadata test_conv_dir")) { print "$Myname: *** genmetadata failed\n"; &bail(1); } if (! $Gengood && (&s("diff $Testdir/lines.good $Convdir/lines") || &s("diff $Testdir/metadata.good $Convdir/metadata"))) { print "$Myname: *** genmetadata bad results\n"; &bail(1); } ### genchanges # if (&s("bin/genchanges test_conv_dir")) { print "$Myname: *** genchanges failed\n"; &bail(1); } if (! $Gengood && &s("diff $Testdir/changes.good $Convdir/changes")) { print "$Myname: *** genchanges bad results\n"; &bail(1); } ### dochanges # # Interlock to set up server here TBD # $P4 = "$P4 -p $P4PORT -c cvs2p4 -u $P4USER"; my ($P4PORTNUM) = $P4PORT; $P4PORTNUM =~ s/^.*://; if (&s("bin/dochanges test_conv_dir")) { print "$Myname: *** dochanges failed\n"; &bail(1); } my $p4d_pid = &start_p4d; my $p4d_vers = `$P4D -V | grep '^Rev'`; $p4d_vers =~ m/\/(\d{4})\.(\d+)(\.BETA)?\//; $p4d_vers_year = $1; $p4d_vers_minor = $2; if ($p4d_vers_year >= 2003 || ($p4d_vers_year == 2002 && $p4d_vers_minor > 1)) { $P4_DESCRIBE = "p4_describe-new"; } else { $P4_DESCRIBE = "p4_describe"; } $P4_DESCRIBE_GOOD = "$P4_DESCRIBE.good"; if (&s("$P4 changes -l | $Testdir/norm > $Convdir/p4_changes_-l 2>&1") || &s("$P4 describe 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ". "21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 2>&1". "| $Testdir/norm > $Convdir/$P4_DESCRIBE")) { print "$Myname: *** dochanges testing failed\n"; &stop_p4d; &bail(1); } &stop_p4d; if (! $Gengood && (&s("diff $Testdir/p4_changes_-l.good $Convdir/p4_changes_-l") || &s("diff $Testdir/$P4_DESCRIBE_GOOD $Convdir/$P4_DESCRIBE"))) { print "$Myname: *** dochanges bad results\n"; &bail(1); } ### dolabels # if (&s("bin/dolabels test_conv_dir")) { print "$Myname: *** dolabels failed\n"; &bail(1); } print "$Myname: *** Note: the \"WARNING: no reverse rev map entry ...\" above is expected. ***\n"; my $p4d_pid = &start_p4d; if (&s("$P4 labels | $Testdir/norm > $Convdir/p4_labels 2>&1") || &s("$P4 files //...\@testlabel > $Convdir/p4_filesat") || &s("$P4 files //...\@rtag >> $Convdir/p4_filesat")) { print "$Myname: *** dolabels testing failed\n"; &bail(1); } if (! $Gengood && (&s("diff $Testdir/p4_labels.good $Convdir/p4_labels") || &s("diff $Testdir/p4_filesat.good $Convdir/p4_filesat"))) { print "$Myname: *** dolabels bad results\n"; &stop_p4d; &bail(1); } if ($Savegood) { &s("p4 edit $Testdir/\*.good"); foreach $f (split(/\n/, `p4 opened $Testdir/\*.good | sed -e 's/#.*//' -e 's/^.*\\///' -e 's/\\.good\$//'`)) { if (-f "$Convdir/$f") { &s("cp $Convdir/$f $Testdir/$f.good"); } } &s("p4 revert -a $Testdir/\*.good"); } &stop_p4d; &bail(0);
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#14 | 8160 | michael |
Archive obsolete CVS to Perforce converter. See the Perforce KB and website for an updated CVS to Perforce converter. |
||
#13 | 7274 | Richard Geiger | Integrate dev changes to become 3.1 | ||
#12 | 5606 | Richard Geiger | Final 3.0b1 tweaks prior to publishing. | ||
#11 | 5601 | Richard Geiger | Integrate 3.0 changes, preparing to publish. | ||
#10 | 4274 | Richard Geiger | Publish 2.3.8 | ||
#9 | 3711 | Richard Geiger | release 2.3.7 | ||
#8 | 3600 | Richard Geiger | publish 2.3.5. | ||
#7 | 1786 | rmg | Publish 2.0 | ||
#6 | 1187 | Richard Geiger |
1.3. Mainly, support for labels! |
||
#5 | 796 | Richard Geiger | Release 1.2.16 update | ||
#4 | 400 | Richard Geiger | Publish 1.2.11 | ||
#3 | 256 | james | push cvs2p4 1.2.6 to public area | ||
#2 | 242 | james |
Pull cvs2p4 into //public so latest version (1.2.5) gets synced onto the Perforce FTP area. Note the cvs2p4-latest.tar symlink - I'll update loadsupp to point to that. |
||
#1 | 152 | Laura Wingerd | cvs2p4 goes public. | ||
//guest/richard_geiger/utils/cvs2p4/test/runtest | |||||
#1 | 130 | Richard Geiger |
CVS-to-Perforce converter. This is release 1.2.2 (first submit to the Perforce Public Depot) |