#!C:\perl\bin\perl.exe # use warnings; use strict; use FileHandle; sub headRevision() { my $fh = shift; my $cl = shift; my @arrText = qw/head access symbols locks/; printf($fh "%-10s1.%-1s;\n",$arrText[0],$cl); printf($fh "%-10s;\n",$arrText[1]); printf($fh "%-10s;\n",$arrText[2]); printf($fh "%-10s;comment @@;\n\n\n",$arrText[3]); return $cl; } sub subRevision() { my $fh = shift; my $maxCount = shift; my $count = shift; my $regTokenRef = shift; my @arrText = qw/date author p4 state Exp branches next/; if($count >= 2) { printf($fh "%-10s1.%-1s;\n\n",$arrText[6],$regTokenRef->[2]); } printf($fh "1.%-1s\n",$regTokenRef->[2]); printf($fh "%-10s%-1s.%-1s.%-1s.",$arrText[0],$regTokenRef->[4], $regTokenRef->[5],$regTokenRef->[6]); printf($fh "%-1s.%-1s.%-1s; %-1s %-1s; %-1s %-1s;\n", $regTokenRef->[7],$regTokenRef->[8],$regTokenRef->[9],$arrText[1], $arrText[2],$arrText[3],$arrText[4]); printf($fh "%-10s;\n",$arrText[5]); if($maxCount == $count) { printf($fh "%-10s;\n",$arrText[6]); } } sub revisionContent() { my $fh = shift; my $maxCount = shift; my $type = shift; my $revRef = shift; printf($fh "\n\ndesc\n@@\n\n\n"); for(0..$maxCount-1) { printf($fh "1.%-1s\nlog\n@@\n%-1s\n@@\n\n\n",$revRef->[$_], $type); } } sub main() { my $argc = @ARGV; if($argc != 1) { die "Usage: genLibrFile.pl \n"; } my $p4 = "p4 -u smoon -p localhost:20101 -c smoon_ws"; # For example: # ... #5 change 1017 edit on 2010/08/04 by smoon@smoon_ws (text) 'fifth revision' my $prefix = qr/^\.\.\. \#(\d+) change (\d+) (\w+) on/; my $date = qr/(\d{4})\/(\d{2})\/(\d{2})/; my $time = qr/(\d{2}):(\d{2}):(\d{2})/; my $cluser = qr/(\w+)\@(\w+)/; my $ftype = qr/\((\w+)\)/; my $description = qr/'(.*)'/; my @regTokens = (); my @revArray = (); my $count = 0; my $prevRev = 0; my $maxCount = 0; my $fh = new FileHandle; $fh->open(">$ARGV[0],v") or die "Unable to open $ARGV[0],v\n"; foreach my $eachRev (`$p4 filelog -t $ARGV[0]`) { if($eachRev =~ /$prefix $date $time by $cluser $ftype $description.*$/) { $count += 1; for(1..13) { $regTokens[$_] = eval("\$$_"); #converts $1..$13 to matched tokens } push(@revArray,$regTokens[2]); if($count == 1) { &headRevision($fh,$regTokens[2]); &subRevision($fh,$maxCount,$count,\@regTokens); $maxCount = $regTokens[1]; } else{ &subRevision($fh,$maxCount,$count,\@regTokens); } } } &revisionContent($fh,$maxCount,$regTokens[12],\@revArray); close($fh); } #end of main &main();