# | Line 1 | Line 1 | |
---|---|---|
1 | #!/usr/bin/perl -w | |
2 | ||
3 | < | use CGI; |
3 | > | use CGI qw/:standard/; |
4 | $query=new CGI; | |
5 | my($period)=$query->param('period'); | |
6 | $period = "today" unless defined $period; | |
# | Line 14 | Line 14 | if($period eq "days") { | |
14 | if ($days < 1) {$days = 1}; | |
15 | $heading = "i-scream CVS$moduleext commits in the past $days day(s)"; | |
16 | $days--; | |
17 | < | $firstdate = ">" . `date --date \"$days days ago\" \"+%Y/%m/%d\"`; |
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; |
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; |
27 | > | $date = `/bin/date +%Y/%m/%d` unless defined $date; |
28 | $heading = "i-scream CVS$moduleext commits since $date"; | |
29 | $firstdate = ">$date"; | |
30 | } | |
# | Line 34 | Line 34 | elsif($period eq "thisweek") { | |
34 | } | |
35 | else { | |
36 | # default to "today only" | |
37 | < | $firstdate = ">" . `/bin/date \"+%Y/%m/%d\"`; |
37 | > | $firstdate = ">" . `/bin/date +%Y/%m/%d`; |
38 | $heading = "Today's i-scream CVS$moduleext commits"; | |
39 | } | |
40 | ||
# | Line 43 | Line 43 | my($cvsroot) = "/cvs/i-scream"; | |
43 | $modulelist = `ls $cvsroot` unless defined $modulelist; | |
44 | $modulelist =~ s/[\r\n]/ /gm; | |
45 | ||
46 | < | my($cvs2clpath) = "/home/sites/www.i-scream.org.uk/bin/cvs2cl2.pl"; |
47 | < | #my($cvs2clargs) = "--stdout --no-wrap -r -b -t -w -S -U $cvsroot/CVSROOT/users -l \"-d'$firstdate'\" -g \"-d$cvsroot\" -g \"-Q\""; |
48 | < | my($cvs2clargs) = "--stdout --no-wrap -r -t -w -S -U $cvsroot/CVSROOT/users -l \"-d'$firstdate'\" -g \"-d$cvsroot\" -g \"-Q\""; |
49 | < | my($updatecmd) = "/home/sites/www.i-scream.org.uk/bin/fullcvsupdate.sh $modulelist"; |
50 | < | my($logcmd) = "cd /home/sites/www.i-scream.org.uk/cvsscripttemp && $cvs2clpath $cvs2clargs"; |
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 ($left) = "../left.inc" ; |
53 | < | my ($title) = "../title.inc"; |
54 | < | my ($bottom) = "../bottom.inc"; |
51 | > | my ($incdir) = "../htdocs"; |
52 | ||
53 | < | print "Content-type: text/html\n\n"; |
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 | < | print <<"END"; |
61 | < | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
60 | > | # Section markers |
61 | > | my ($secwho) = 1; |
62 | > | my ($secfiles) = 2; |
63 | > | my ($seclog) = 3; |
64 | ||
65 | < | <html> |
65 | > | # This should be application/xhtml+xml |
66 | > | print "Content-type: text/html\n\n"; |
67 | ||
68 | < | <head> |
64 | < | <title>The i-scream Project Commit Log</title> |
65 | < | </head> |
68 | > | &print_html($doctype); |
69 | ||
70 | < | <body bgcolor="#ffffff" link="#0000ff" alink="#3333cc" vlink="#3333cc" text="#000066"> |
70 | > | print <<"END"; |
71 | ||
72 | < | <table border="0" cellpadding="2" cellspacing="2"> |
73 | < | <tr> |
74 | < | <td valign="top"> |
72 | > | <head> |
73 | > | <title> |
74 | > | i-scream CVS Commit Logs |
75 | > | </title> |
76 | END | |
77 | ||
78 | < | &print_html($left); |
78 | > | &print_html($style); |
79 | ||
80 | print <<"END"; | |
81 | < | </td> |
82 | < | <td valign="top"> |
81 | > | |
82 | > | </head> |
83 | > | <body> |
84 | > | <div id="container"> |
85 | > | <div id="main"> |
86 | END | |
87 | ||
88 | < | &print_html($title); |
88 | > | &print_html($header); |
89 | ||
90 | print <<"END"; | |
91 | < | <h2>$heading</h2> |
91 | > | |
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 89 | 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 | ||
93 | – | print "<table border=\"0\" bgcolor=\"#000066\" cellpadding=\"5\" width=\"100%\">\n\n"; |
94 | – | print "<tr><td>\n<font size=\"4\"><b><a href=\"/cgi-bin/cvs/viewcvs.cgi/$module\" style=\"color: white\">$module module</a></b></font>\n</td></tr>\n\n"; |
95 | – | print "<tr><td bgcolor=\"white\">\n"; |
96 | – | |
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 " commited 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 | } | |
181 | < | elsif ($line =~ /^([0-9]{4}-[0-9]{2}-[0-9]{2}.*?)\s+([^\s]+)$/) { |
182 | < | print "\n<font color=\"blue\">\n<b>"; |
183 | < | print HTML_encode($1); |
184 | < | print "</b>\n<i>"; |
185 | < | print " commited by "; |
186 | < | print HTML_encode("$2"); |
187 | < | print "</i>\n</font>\n" |
188 | < | } |
189 | < | elsif($line =~ /(\S+) (\(\S+\))([,:])/ || $line =~ /(\S+) (\(\S+,\s+\S+\))([,:])/) { |
190 | < | #chop $line; |
191 | < | my ($file, $rest, $ext) = ($1, $2, $3); |
192 | < | print "<code>"; |
193 | < | print "<a href=\"/cgi-bin/cvs/viewcvs.cgi/$file\" style=\"text-decoration: none;\">"; |
194 | < | print HTML_encode($file); |
195 | < | print "</a> "; |
196 | < | if($rest =~ /\((\S+)\.(\d+)(.*)\)/) { |
197 | < | my $newrev = "$1.$2"; |
198 | < | my $oldminver = $2-1; |
199 | < | my $oldrev = "$1.$oldminver"; |
200 | < | if($2 != 1) { |
201 | < | my $diff = ".diff?r1=$oldrev&r2=$newrev"; |
202 | < | print "(<a href=\"/cgi-bin/cvs/viewcvs.cgi/$file$diff\" style=\"text-decoration: none;\">"; |
134 | < | print HTML_encode("$1.$2"); |
135 | < | print "</a>"; |
136 | < | print HTML_encode("$3)"); |
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 | < | print HTML_encode($rest); |
219 | > | $rev = escapeHTML($rev); |
220 | > | print <<"END"; |
221 | > | $rev$ext |
222 | > | END |
223 | } | |
224 | } | |
225 | else { | |
226 | < | print HTML_encode($rest); |
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 | < | chop $line; |
239 | < | print "<code>"; |
240 | < | print HTML_encode($line); |
241 | < | print "</code><br>\n" |
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 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_html($bottom); |
268 | > | print <<"END"; |
269 | > | </div> |
270 | > | </div> |
271 | > | END |
272 | ||
273 | + | &print_html($footer); |
274 | + | |
275 | print <<"END"; | |
276 | ||
277 | < | </td> |
278 | < | </tr> |
167 | < | </table> |
277 | > | </div> |
278 | > | END |
279 | ||
280 | < | </body> |
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) = @_; |
184 | < | $encoded =~ s/&/&/g; |
185 | < | $encoded =~ s/"/"/g; |
186 | < | $encoded =~ s/</</g; |
187 | < | $encoded =~ s/>/>/g; |
188 | < | 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 |