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-*- # $Id: //guest/richard_geiger/utils/cvs2p4/bin/genmetadata#14 $ # # Richard Geiger # require 5.000; sub dirname { local($dir) = @_; $dir =~ s%^$%.%; $dir = "$dir/"; if ($dir =~ m%^/[^/]*//*$%) { return "/"; } if ($dir =~ m%^.*[^/]//*[^/][^/]*//*$%) { $dir =~ s%^(.*[^/])//*[^/][^/]*//*$%$1%; { return $dir; } } return "."; } use Carp; # ...or flounder. (This will fail unless 'perl' is a perl5!) $| = 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 = <) { if (/^error: /) { print; $ok = 0; } } if (! $ok) { print STDERR "$Myname: \"$P4 label -o $label | $P4 -s label -i\" failed.\n"; exit 1; } if (! open(LABELSYNC, ">$Convdir/labelsync")) { print STDERR "$Myname: can't open \"$Convdir/labelsync\": $!.\n"; exit 1; } foreach my $rev (@Revs) { print LABELSYNC "$rev\n"; } close LABELSYNC; if (! open(P4, "$P4 -s -x - labelsync -l $label < $Convdir/labelsync |")) { print STDERR "$Myname: can't open \"$P4 labelsync -l $label < $Convdir/revs.$label |\": $!.\n"; } $ok = 1; while () { print; if (/^error: /) { if (/ - label in sync.$/) { next; } $ok = 0; } } if (! $ok) { print STDERR "$Myname: \"$P4 -s -x - labelsync -l $label < $Convdir/labelsync\" failed.\n"; exit 1; } unlink "$Convdir/labelsync"; } # option switch variables get defaults here... $Convdir = ""; $Boolopt = 0; $Valopt = 0; while ($#ARGV >= 0) { if ($ARGV[0] eq "-boolopt") { $Boolopt = 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; } if ($#Args ne 0) { &usage; } $Convdir = $Args[0]; $Metadata = "$Convdir/metadata"; $Labels = "$Convdir/labels"; $Rrevmap = "$Convdir/rrevmap"; require "$Convdir/config"; # Path the the p4 client command # if (! defined($P4)) { $P4 = "/usr/local/bin/p4"; } if (! -x ($P4)) { print "$Myname: No executable \"p4\" command at \"$P4\".\n"; exit 1; } $P4 = "$P4 -p $P4PORT -c $P4CLIENT -u $P4USER"; if (! dbmopen(RREVMAP, $Rrevmap, 0444)) { print "$Myname: can't dbmopen \"$Rrevmap\": $!\n"; exit 1; } if (! open(LABELS, "<$Labels")) { print "$Myname: can't open \">$Labels\": $!\n"; exit 1; } @Revs = (); while () { if (/^([^\s]+)/) { if ($#Revs >= 0) { &mklabel($label, @Revs); } $label = $1; @Revs = (); } elsif (/^ (.*)/) { if ($rev = $RREVMAP{$1}) { push (@Revs, $rev); } } } if ($#Revs >= 0) { &mklabel($label, @Revs); } close LABELS; dbmclose RREVMAP; exit 0;