s4-dns: dlz_bind9: Fix ipv6 updates
[samba.git] / source3 / script / scancvslog.pl
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 }