# | Line 1 | Line 1 | |
---|---|---|
1 | < | #!/usr/bin/perl |
1 | > | #!/usr/bin/perl -w |
2 | ||
3 | + | use CGI qw/:standard/; |
4 | + | $query=new CGI; |
5 | + | my($period)=$query->param('period'); |
6 | + | $period = "today" unless defined $period; |
7 | + | my($modulelist)=$query->param('module'); |
8 | + | my $moduleext=""; $moduleext=":$modulelist" if defined $modulelist; |
9 | + | |
10 | + | my($firstdate); |
11 | + | if($period eq "days") { |
12 | + | my($days)=$query->param('days'); |
13 | + | $days = 1 unless defined $days; |
14 | + | if ($days < 1) {$days = 1}; |
15 | + | $heading = "i-scream CVS$moduleext commits in the past $days day(s)"; |
16 | + | $days--; |
17 | + | $firstdate = ">" . `/bin/date -v-${days}d +%Y/%m/%d`; |
18 | + | } |
19 | + | elsif($period eq "date") { |
20 | + | my($date)=$query->param('date'); |
21 | + | $date = `/bin/date +%Y/%m/%d` unless defined $date; |
22 | + | $heading = "i-scream CVS$moduleext commits on $date"; |
23 | + | $firstdate = "$date 00:00<$date 23:59" |
24 | + | } |
25 | + | elsif($period eq "since") { |
26 | + | my($date)=$query->param('date'); |
27 | + | $date = `/bin/date +%Y/%m/%d` unless defined $date; |
28 | + | $heading = "i-scream CVS$moduleext commits since $date"; |
29 | + | $firstdate = ">$date"; |
30 | + | } |
31 | + | elsif($period eq "thisweek") { |
32 | + | $firstdate = ">last Sunday"; |
33 | + | $heading = "i-scream CVS$moduleext commits this week"; |
34 | + | } |
35 | + | else { |
36 | + | # default to "today only" |
37 | + | $firstdate = ">" . `/bin/date +%Y/%m/%d`; |
38 | + | $heading = "Today's i-scream CVS$moduleext commits"; |
39 | + | } |
40 | + | |
41 | + | my($cvsroot) = "/cvs/i-scream"; |
42 | + | |
43 | + | $modulelist = `ls $cvsroot` unless defined $modulelist; |
44 | + | $modulelist =~ s/[\r\n]/ /gm; |
45 | + | |
46 | + | my($cvs2clpath) = "/usr/local/bin/cvs2cl"; |
47 | + | my($cvs2clargs) = "--stdout --no-wrap --no-common-dir -r -t -w -S -U $cvsroot/CVSROOT/users -l \"-d'$firstdate'\" -g \"-d$cvsroot\" -g \"-Q\""; |
48 | + | my($updatecmd) = "/home/iscream/bin/fullcvsupdate.sh $modulelist"; |
49 | + | my($logcmd) = "cd /tmp/i-scream/cvstmp && $cvs2clpath $cvs2clargs"; |
50 | + | |
51 | + | my ($incdir) = "../nwww"; |
52 | + | |
53 | + | # Include files |
54 | + | my ($doctype) = "$incdir/doctype.inc"; |
55 | + | my ($style) = "$incdir/style.inc"; |
56 | + | my ($header) = "$incdir/header.inc"; |
57 | + | my ($footer) = "$incdir/footer.inc"; |
58 | + | my ($menu) = "$incdir/menu.inc" ; |
59 | + | |
60 | + | # Section markers |
61 | + | my ($sec) = 0; |
62 | + | my ($secwho) = 1; |
63 | + | my ($secfiles) = 2; |
64 | + | my ($seclog) = 3; |
65 | + | |
66 | + | # This should be application/xhtml+xml |
67 | print "Content-type: text/html\n\n"; | |
68 | ||
69 | < | my($today) = `date \"+%Y/%m/%d\"`; |
6 | < | my($cvs) = "/home/cut/tdb1/bin/cvs"; |
7 | < | my($cvs2clpath) = "/home/cut/tdb1/bin/cvs2cl"; |
8 | < | my($cvsroot) = "/usr/local/proj/co600_10/cvs"; |
9 | < | my($cvs2clargs) = "--stdout -r -b -t -w -U $cvsroot/CVSROOT/users -l \"-d'\>$today'\" -g \"-d$cvsroot\" -g \"-Q\""; |
10 | < | my($cmd) = "cd /home/cut/tdb1/cvsscripttemp && $cvs -d $cvsroot -Q update -d && $cvs2clpath $cvs2clargs *"; |
69 | > | &print_html($doctype); |
70 | ||
71 | < | my(@lines) = `$cmd 2>&1`; |
71 | > | print <<"END"; |
72 | ||
73 | + | <head> |
74 | + | <title> |
75 | + | i-scream CVS Commit Logs |
76 | + | </title> |
77 | + | END |
78 | + | |
79 | + | &print_html($style); |
80 | + | |
81 | print <<"END"; | |
15 | – | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
82 | ||
83 | < | <html> |
83 | > | </head> |
84 | > | <body> |
85 | > | <div id="container"> |
86 | > | <div id="main"> |
87 | > | END |
88 | ||
89 | < | <head> |
20 | < | <title>The i-scream Project Daily Commit Log</title> |
21 | < | <meta name="description" content="The i-scream Project is a central |
22 | < | monitoring system for Unix, Linux and NT servers."> |
23 | < | <meta name="keywords" content="i-scream, project, central monitoring |
24 | < | system, unix, linux, nt, server, alert"> |
25 | < | <meta name="generator" content="notepad on acid, aye."> |
26 | < | </head> |
89 | > | &print_html($header); |
90 | ||
91 | < | <body bgcolor="#ffffff" link="#0000ff" alink="#3333cc" vlink="#3333cc" |
29 | < | text="#000066"> |
91 | > | print <<"END"; |
92 | ||
93 | < | <a href="http://www.i-scream.org.uk"><img border="0" src="../i-scream.gif"></a> |
93 | > | <div id="contents"> |
94 | > | <h1 class="top"> |
95 | > | i-scream CVS Commit Logs |
96 | > | </h1> |
97 | > | <h2> |
98 | > | $heading |
99 | > | </h2> |
100 | > | <div id="cvslog"> |
101 | > | END |
102 | ||
103 | < | <h3>Today's i-scream CVS commits</h3> |
103 | > | print `$updatecmd >/dev/null 2>&1`; |
104 | ||
105 | < | <a href="viewcvs.cgi">Browse i-scream CVS repository</a> |
105 | > | my(@modules) = split (/\s+/, $modulelist); |
106 | ||
107 | < | <pre> |
107 | > | foreach my $module (@modules) { |
108 | > | my($firstentry) = 1; |
109 | > | print <<"END"; |
110 | > | <div> |
111 | > | <h3> |
112 | > | <a href="http://cvs.i-scream.org/$module/" class="cvsloghead">$module module</a> |
113 | > | </h3> |
114 | END | |
115 | ||
116 | < | foreach my $line (@lines) { |
117 | < | print HTML_encode($line); |
116 | > | my(@lines) = `$logcmd $module 2>&1`; |
117 | > | if(@lines == 0) { |
118 | > | print <<"END"; |
119 | > | <p> |
120 | > | There have been no commits in this module during this period. |
121 | > | </p> |
122 | > | END |
123 | > | } |
124 | > | else { |
125 | > | my(@log) = (); |
126 | > | foreach my $line (@lines) { |
127 | > | |
128 | > | if ($line =~ /^([0-9]{4}-[0-9]{2}-[0-9]{2}.*?)\s+([^\s]+)(\s+<([^\s]+)>)?$/) { |
129 | > | my($datetime) = escapeHTML($1); |
130 | > | my($committer) = escapeHTML($2); |
131 | > | my($email) = $4; |
132 | > | |
133 | > | if($sec != $secwho) { |
134 | > | if($sec == $seclog) { |
135 | > | @log = &trim_array(@log); |
136 | > | foreach my $logline (@log) { |
137 | > | $logline =~ s/^\t//; |
138 | > | print "$logline\n"; |
139 | > | } |
140 | > | @log = (); |
141 | > | print <<"END"; |
142 | > | </pre> |
143 | > | </div> |
144 | > | END |
145 | > | } |
146 | > | if($firstentry) { |
147 | > | $firstentry = 0; |
148 | > | print <<"END"; |
149 | > | <div class="logitemfirst"> |
150 | > | END |
151 | > | } |
152 | > | else { |
153 | > | print <<"END"; |
154 | > | <div class="logitem"> |
155 | > | END |
156 | > | } |
157 | > | $sec = $secwho; |
158 | > | } |
159 | > | |
160 | > | print <<"END"; |
161 | > | <p> |
162 | > | <b> |
163 | > | $datetime |
164 | > | </b> |
165 | > | committed by |
166 | > | END |
167 | > | if(defined $email) { |
168 | > | print <<"END"; |
169 | > | <a href="mailto:$email">$committer</a> |
170 | > | END |
171 | > | } |
172 | > | else { |
173 | > | print <<"END"; |
174 | > | $committer |
175 | > | END |
176 | > | } |
177 | > | print <<"END"; |
178 | > | </p> |
179 | > | END |
180 | > | } |
181 | > | elsif($line =~ /([^\s]+) (\([^,^\)]+(,[^\)]+)?\))([,:])/) { |
182 | > | my ($file, $rev, $tags, $ext) = ($1, $2, $3, $4); |
183 | > | $ext = escapeHTML($ext); |
184 | > | if($sec != $secfiles) { |
185 | > | $sec = $secfiles; |
186 | > | print <<"END"; |
187 | > | <p> |
188 | > | END |
189 | > | } |
190 | > | $file = escapeHTML($file); |
191 | > | print <<"END"; |
192 | > | <a href="http://cvs.i-scream.org/$file">$file</a> |
193 | > | END |
194 | > | if($rev =~ /\(([^\s]+)\.(\d+)(.*)\)/) { |
195 | > | my $start = $1; |
196 | > | my $end = $2; |
197 | > | my $other = $3; |
198 | > | my $newrev = "$start.$end"; |
199 | > | my $oldrev; |
200 | > | if($end != 1) { |
201 | > | my $oldminver = $end-1; |
202 | > | $oldrev = "$start.$oldminver"; |
203 | > | } |
204 | > | elsif($start =~ /^((\d+\.)+)(\d+)$/) { |
205 | > | $oldrev = $1; |
206 | > | # take trailing . off old revision |
207 | > | chop $oldrev; |
208 | > | } |
209 | > | if(defined $oldrev) { |
210 | > | my $diff = ".diff?r1=$oldrev&r2=$newrev"; |
211 | > | my $startend = escapeHTML("$start.$end"); |
212 | > | $other = escapeHTML($other); |
213 | > | chomp $other; |
214 | > | print <<"END"; |
215 | > | (<a href="http://cvs.i-scream.org/$file$diff">$startend</a>$other)$ext |
216 | > | END |
217 | > | } |
218 | > | else { |
219 | > | $rev = escapeHTML($rev); |
220 | > | print <<"END"; |
221 | > | $rev$ext |
222 | > | END |
223 | > | } |
224 | > | } |
225 | > | else { |
226 | > | $rev = escapeHTML($rev); |
227 | > | print <<"END"; |
228 | > | $rev$ext |
229 | > | END |
230 | > | } |
231 | > | if($ext !~ /:$/) { |
232 | > | print <<"END"; |
233 | > | <br /> |
234 | > | END |
235 | > | } |
236 | > | } |
237 | > | else { |
238 | > | next if $sec == $secwho; # not done secfiles yet |
239 | > | if($sec != $seclog) { |
240 | > | $sec = $seclog; |
241 | > | print <<"END"; |
242 | > | </p> |
243 | > | <pre> |
244 | > | END |
245 | > | } |
246 | > | chomp $line; |
247 | > | push(@log, $line); |
248 | > | } |
249 | > | } |
250 | > | if($sec == $seclog) { |
251 | > | @log = &trim_array(@log); |
252 | > | foreach my $logline (@log) { |
253 | > | $logline =~ s/^\t//; |
254 | > | print "$logline\n"; |
255 | > | } |
256 | > | @log = (); |
257 | > | print <<"END"; |
258 | > | </pre> |
259 | > | </div> |
260 | > | END |
261 | > | } |
262 | > | } |
263 | > | print <<"END"; |
264 | > | </div> |
265 | > | END |
266 | } | |
267 | ||
268 | print <<"END"; | |
269 | < | </pre> |
270 | < | </body> |
269 | > | </div> |
270 | > | </div> |
271 | > | END |
272 | ||
273 | + | &print_html($footer); |
274 | + | |
275 | + | print <<"END"; |
276 | + | |
277 | + | </div> |
278 | + | END |
279 | + | |
280 | + | &print_html($menu); |
281 | + | |
282 | + | print <<"END"; |
283 | + | |
284 | + | </div> |
285 | + | </body> |
286 | </html> | |
287 | END | |
288 | ||
289 | exit 0; | |
290 | ||
291 | < | #------------------------------------------------------ |
292 | < | # sub HTML_encode |
293 | < | # |
294 | < | # escape HTML characters that may cause problems when |
295 | < | # shown either in the <body> or within text fields. |
296 | < | #------------------------------------------------------ |
297 | < | sub HTML_encode ($){ |
298 | < | my ($encoded) = @_; |
61 | < | $encoded =~ s/&/&/g; |
62 | < | $encoded =~ s/"/"/g; |
63 | < | $encoded =~ s/</</g; |
64 | < | $encoded =~ s/>/>/g; |
65 | < | return $encoded; |
291 | > | # Print the contents of a file containing html |
292 | > | sub print_html { |
293 | > | my ($filename) = @_; |
294 | > | open(FILE, $filename); |
295 | > | while(<FILE>) { |
296 | > | print; |
297 | > | } |
298 | > | close FILE; |
299 | } | |
300 | ||
301 | + | # Trim an array (remove beginning and end emptry entries) |
302 | + | sub trim_array { |
303 | + | my (@array) = @_; |
304 | + | for(my $i = 0; $i < scalar @array; $i++) { |
305 | + | if($array[$i] ne "") { |
306 | + | splice @array, 0, $i; |
307 | + | last; |
308 | + | } |
309 | + | } |
310 | + | for(my $i = scalar @array - 1; $i >= 0; $i--) { |
311 | + | if($array[$i] ne "") { |
312 | + | splice @array, $i+1; |
313 | + | last; |
314 | + | } |
315 | + | } |
316 | + | return @array; |
317 | + | } |
– | Removed lines |
+ | Added lines |
< | Changed lines |
> | Changed lines |