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 | }
|
---|