# | Line 1 | Line 1 | |
---|---|---|
1 | #!/usr/bin/perl -w | |
2 | ||
3 | < | # TODO: remove tables, and use CSS instead |
4 | < | |
5 | < | use CGI; |
3 | > | use CGI qw/:standard/; |
4 | $query=new CGI; | |
5 | my($period)=$query->param('period'); | |
6 | $period = "today" unless defined $period; | |
# | Line 50 | Line 48 | my($cvs2clargs) = "--stdout --no-wrap --no-common-dir | |
48 | my($updatecmd) = "/home/iscream/bin/fullcvsupdate.sh $modulelist"; | |
49 | my($logcmd) = "cd /tmp/i-scream/cvstmp && $cvs2clpath $cvs2clargs"; | |
50 | ||
51 | < | my ($menu) = "../nwww/menu.inc" ; |
54 | < | my ($header) = "../nwww/header.inc"; |
55 | < | my ($footer) = "../nwww/footer.inc"; |
56 | < | my ($style) = "../nwww/style.inc"; |
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-static.inc" ; |
59 | + | |
60 | + | # Section markers |
61 | + | my ($secwho) = 1; |
62 | + | my ($secfiles) = 2; |
63 | + | my ($seclog) = 3; |
64 | + | |
65 | + | # This should be application/xhtml+xml |
66 | print "Content-type: text/html\n\n"; | |
67 | ||
68 | + | &print_html($doctype); |
69 | + | |
70 | print <<"END"; | |
61 | – | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" |
62 | – | "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> |
71 | ||
72 | < | <html> |
73 | < | |
74 | < | <head> |
75 | < | <title>i-scream CVS Commit Logs</title> |
72 | > | <head> |
73 | > | <title> |
74 | > | i-scream CVS Commit Logs |
75 | > | </title> |
76 | END | |
77 | ||
78 | &print_html($style); | |
79 | ||
80 | print <<"END"; | |
73 | – | </head> |
81 | ||
82 | < | <body> |
83 | < | |
84 | < | <div id="container"> |
85 | < | |
79 | < | <div id="main"> |
82 | > | </head> |
83 | > | <body> |
84 | > | <div id="container"> |
85 | > | <div id="main"> |
86 | END | |
87 | ||
88 | &print_html($header); | |
89 | ||
90 | print <<"END"; | |
85 | – | <div id="contents"> |
86 | – | <h1 class="top">i-scream CVS Commit Logs</h1> |
91 | ||
92 | < | <h2>$heading</h2> |
92 | > | <div id="contents"> |
93 | > | <h1 class="top"> |
94 | > | i-scream CVS Commit Logs |
95 | > | </h1> |
96 | > | <h2> |
97 | > | $heading |
98 | > | </h2> |
99 | > | <div id="cvslog"> |
100 | END | |
101 | ||
102 | print `$updatecmd >/dev/null 2>&1`; | |
# | Line 93 | Line 104 | print `$updatecmd >/dev/null 2>&1`; | |
104 | my(@modules) = split (/\s+/, $modulelist); | |
105 | ||
106 | foreach my $module (@modules) { | |
107 | + | my($firstentry) = 1; |
108 | + | my($sec) = 0; |
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 | ||
97 | – | print "<table border=\"0\" bgcolor=\"#000066\" cellpadding=\"5\" width=\"100%\">\n\n"; |
98 | – | print "<tr><td>\n<font size=\"4\"><b><a href=\"http://cvs.i-scream.org/$module/\" style=\"color: white\">$module module</a></b></font>\n</td></tr>\n\n"; |
99 | – | print "<tr><td bgcolor=\"white\">\n"; |
100 | – | |
116 | my(@lines) = `$logcmd $module 2>&1`; | |
117 | if(@lines == 0) { | |
118 | < | print "There have been no commits in this module during this period.\n"; |
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 | < | print "\n<font color=\"blue\">\n<b>"; |
130 | < | print HTML_encode($1); |
131 | < | print "</b>\n<i>"; |
132 | < | print " committed by <a href=\"mailto:$3\" style=\"text-decoration: none;\">"; |
133 | < | print HTML_encode("$2"); |
134 | < | print "</a></i>\n</font>\n" |
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 escapeHTML("$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 | } | |
116 | – | elsif ($line =~ /^([0-9]{4}-[0-9]{2}-[0-9]{2}.*?)\s+([^\s]+)$/) { |
117 | – | print "\n<font color=\"blue\">\n<b>"; |
118 | – | print HTML_encode($1); |
119 | – | print "</b>\n<i>"; |
120 | – | print " committed by "; |
121 | – | print HTML_encode("$2"); |
122 | – | print "</i>\n</font>\n" |
123 | – | } |
181 | elsif($line =~ /([^\s]+) (\([^,^\)]+(,[^\)]+)?\))([,:])/) { | |
182 | my ($file, $rev, $tags, $ext) = ($1, $2, $3, $4); | |
183 | < | print "<code>"; |
184 | < | print "<a href=\"http://cvs.i-scream.org/$file\" style=\"text-decoration: none;\">"; |
185 | < | print HTML_encode($file); |
186 | < | print "</a> "; |
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; | |
# | Line 143 | Line 207 | foreach my $module (@modules) { | |
207 | chop $oldrev; | |
208 | } | |
209 | if(defined $oldrev) { | |
210 | < | my $diff = ".diff?r1=$oldrev&r2=$newrev"; |
211 | < | print "(<a href=\"http://cvs.i-scream.org/$file$diff\" style=\"text-decoration: none;\">"; |
212 | < | print HTML_encode("$start.$end"); |
213 | < | print "</a>"; |
214 | < | print HTML_encode("$other)"); |
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 | < | print HTML_encode($rev); |
219 | > | $rev = escapeHTML($rev); |
220 | > | print <<"END"; |
221 | > | $rev$ext |
222 | > | END |
223 | } | |
224 | } | |
225 | else { | |
226 | < | print HTML_encode($rev); |
226 | > | $rev = escapeHTML($rev); |
227 | > | print <<"END"; |
228 | > | $rev$ext |
229 | > | END |
230 | } | |
231 | < | print HTML_encode($ext); |
232 | < | print "</code><br/>\n" |
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 | < | print "<code>"; |
165 | < | print HTML_encode($line); |
166 | < | print "</code><br/>\n" |
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 escapeHTML("$logline\n"); |
255 | + | } |
256 | + | @log = (); |
257 | + | print <<"END"; |
258 | + | </pre> |
259 | + | </div> |
260 | + | END |
261 | + | } |
262 | } | |
263 | < | print "</td></tr>\n"; |
264 | < | |
265 | < | print "</table><p>\n\n"; |
263 | > | print <<"END"; |
264 | > | </div> |
265 | > | END |
266 | } | |
267 | ||
268 | < | print "</div>"; |
268 | > | print <<"END"; |
269 | > | </div> |
270 | > | </div> |
271 | > | END |
272 | ||
273 | &print_html($footer); | |
274 | ||
275 | < | print "</div>"; |
275 | > | print <<"END"; |
276 | ||
277 | + | </div> |
278 | + | END |
279 | + | |
280 | &print_html($menu); | |
281 | ||
282 | print <<"END"; | |
184 | – | </div> |
283 | ||
284 | < | </body> |
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) = @_; |
200 | < | $encoded =~ s/&/&/g; |
201 | < | $encoded =~ s/"/"/g; |
202 | < | $encoded =~ s/</</g; |
203 | < | $encoded =~ s/>/>/g; |
204 | < | 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 | < | # Print a file without escaping HTML: - |
302 | < | sub print_html ($) { |
303 | < | my ($filename) = @_; |
304 | < | print `cat $filename 2>&1`; |
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 |