[206] | 1 | #!/usr/bin/perl
|
---|
| 2 | require"timelocal.pl";
|
---|
| 3 |
|
---|
| 4 | #
|
---|
| 5 | # usage scancvslog.pl logfile starttime tag
|
---|
| 6 | #
|
---|
| 7 | # this will extract all entries from the specified cvs log file
|
---|
| 8 | # that have a date later than or equal to starttime and a tag
|
---|
| 9 | # value of tag. If starttime is not specified, all entries are
|
---|
| 10 | # extracted. If tag is not specified then entries for all
|
---|
| 11 | # branches are extracted. starttime must be specified as
|
---|
| 12 | # "monthname day, year"
|
---|
| 13 | #
|
---|
| 14 | # Example to extract all entries for SAMBA_2_2 branch from the
|
---|
| 15 | # log file named cvs.log
|
---|
| 16 | #
|
---|
| 17 | # scancvslog.pl cvs.log "" SAMBA_2_2
|
---|
| 18 | #
|
---|
| 19 | #
|
---|
| 20 | # To extract all log entries after Jan 10, 1999 (Note month name
|
---|
| 21 | # must be spelled out completely).
|
---|
| 22 | #
|
---|
| 23 | # scancvslog.pl cvs.log "January 10, 1999"
|
---|
| 24 | #
|
---|
| 25 |
|
---|
| 26 | open(INFILE,@ARGV[0]) || die "Unable to open @ARGV[0]\n";
|
---|
| 27 |
|
---|
| 28 | %Monthnum = (
|
---|
| 29 | "January", 0,
|
---|
| 30 | "February", 1,
|
---|
| 31 | "March", 2,
|
---|
| 32 | "April", 3,
|
---|
| 33 | "May", 4,
|
---|
| 34 | "June", 5,
|
---|
| 35 | "July", 6,
|
---|
| 36 | "August", 7,
|
---|
| 37 | "September", 8,
|
---|
| 38 | "October", 9,
|
---|
| 39 | "November", 10,
|
---|
| 40 | "December", 11,
|
---|
| 41 | "Jan", 0,
|
---|
| 42 | "Feb", 1,
|
---|
| 43 | "Mar", 2,
|
---|
| 44 | "Apr", 3,
|
---|
| 45 | "May", 4,
|
---|
| 46 | "Jun", 5,
|
---|
| 47 | "Jul", 6,
|
---|
| 48 | "Aug", 7,
|
---|
| 49 | "Sep", 8,
|
---|
| 50 | "Oct", 9,
|
---|
| 51 | "Nov", 10,
|
---|
| 52 | "Dec", 11
|
---|
| 53 | );
|
---|
| 54 |
|
---|
| 55 | $Starttime = (@ARGV[1]) ? &make_time(@ARGV[1]) : 0;
|
---|
| 56 | $Tagvalue = @ARGV[2];
|
---|
| 57 |
|
---|
| 58 | while (&get_entry) {
|
---|
| 59 | $_=$Entry[0];
|
---|
| 60 | # get rid of extra white space
|
---|
| 61 | s/\s+/ /g;
|
---|
| 62 | # get rid of any time string in date
|
---|
| 63 | s/ \d\d:\d\d:\d\d/,/;
|
---|
| 64 | s/^Date:\s*\w*\s*(\w*)\s*(\w*),\s*(\w*).*/$1 $2 $3/;
|
---|
| 65 | $Testtime = &make_time($_);
|
---|
| 66 | $Testtag = &get_tag;
|
---|
| 67 | if (($Testtime >= $Starttime) && ($Tagvalue eq $Testtag)) {
|
---|
| 68 | print join("\n",@Entry),"\n";
|
---|
| 69 | }
|
---|
| 70 | }
|
---|
| 71 | close(INFILE);
|
---|
| 72 |
|
---|
| 73 | sub make_time {
|
---|
| 74 | $_ = @_[0];
|
---|
| 75 | s/,//;
|
---|
| 76 | ($month, $day, $year) = split(" ",$_);
|
---|
| 77 | if (($year < 1900)||($day < 1)||($day > 31)||not length($Monthnum{$month})) {
|
---|
| 78 | print "Bad date format @_[0]\n";
|
---|
| 79 | print "Date needs to be specified as \"Monthname day, year\"\n";
|
---|
| 80 | print "eg: \"January 10, 1999\"\n";
|
---|
| 81 | exit 1;
|
---|
| 82 | }
|
---|
| 83 | $year = ($year == 19100) ? 2000 : $year;
|
---|
| 84 | $month = $Monthnum{$month};
|
---|
| 85 | $Mytime=&timelocal((0,0,0,$day,$month,$year));
|
---|
| 86 | }
|
---|
| 87 |
|
---|
| 88 | sub get_tag {
|
---|
| 89 | @Mytag = grep (/Tag:/,@Entry);
|
---|
| 90 | $_ = @Mytag[0];
|
---|
| 91 | s/^.*Tag:\s*(\w*).*/$1/;
|
---|
| 92 | return $_;
|
---|
| 93 | }
|
---|
| 94 |
|
---|
| 95 | sub get_entry {
|
---|
| 96 | @Entry=();
|
---|
| 97 | if (not eof(INFILE)) {
|
---|
| 98 | while (not eof(INFILE)) {
|
---|
| 99 | $_ = <INFILE>;
|
---|
| 100 | chomp $_;
|
---|
| 101 | next if (not ($_));
|
---|
| 102 | if (/^\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*\*/) {
|
---|
| 103 | next if ($#Entry == -1);
|
---|
| 104 | push(Entry,$_);
|
---|
| 105 | return @Entry;
|
---|
| 106 | } else {
|
---|
| 107 | push(Entry,$_);
|
---|
| 108 | }
|
---|
| 109 | }
|
---|
| 110 | }
|
---|
| 111 | return @Entry;
|
---|
| 112 | }
|
---|