/[dehs]/trunk/dehs_pg.php
ViewVC logotype

Contents of /trunk/dehs_pg.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 93 - (show annotations) (download)
Fri Jan 4 22:52:31 2008 UTC (5 years, 4 months ago) by atomo64-guest
File size: 46779 byte(s)
Fixed the popcon data parser so pop_inst really gets the pop inst value and not pop vote
1 #!/usr/bin/php4 -q
2 <?php
3 /*
4
5 Originally written by Stefano Fabri <bluefuture@nospam@email.it>
6 Copyright 2004, Stefano Fabri
7 Copyright 2007 by Raphael Geissert <atomo64@gmail.com>
8
9 This program is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2 of the License, or
12 (at your option) any later version.
13
14 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 */
23
24 // stabilire una connessione
25 #ini_set ( "error_reporting", "E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR");
26 ini_set ("html_errors", "off");
27 set_time_limit(0);
28 ini_set ( "memory_limit", "40M");
29 #print_R($_SERVER);
30 require "dehs.config.inc";
31 dir_ctrl($dirs);
32 if (!function_exists('file_get_contents')) {
33 function file_get_contents($filename) {
34 if (!($file = fopen($filename,"rb"))) return false;
35 else {
36 $contents = "";
37 do {
38 $data = fread($file, 4096);
39 if (strlen($data) == 0) {
40 break;
41 }
42 $contents .= $data;
43 } while (true);
44 fclose($file);
45 return $contents;
46 }
47 }
48 }
49
50 if (!function_exists('file_put_contents')) {
51 function file_put_contents($filename, $content, $flags = 0) {
52 if (!($file = fopen($filename,$flags))) return false;
53 else {
54 $n = fwrite($file, $content);
55 fclose($file);
56 return true;
57 }
58 }
59 }
60
61 if (in_array("-db_add",$argv)) db_add((!empty($argv[2])?$argv[2]:''), false);
62 elseif (in_array("-db_query",$argv)) db_query($argv[2],(!empty($argv[3])?$argv[3]:'%') );
63 elseif (in_array("-dl_diffs",$argv) || in_array("-keep_diff",$argv)) dl_diffs($argv[2]);
64 elseif (in_array("-keep_sources",$argv) || in_array("-download_sources",$argv)) download_sources();
65 elseif (in_array("-db_popcon",$argv)) db_popcon($argv[2]);
66 elseif (in_array("-dl_popcon",$argv) || in_array("-keep_popcon",$argv)) dl_popcon($argv[2]);
67 elseif (in_array("-db_upstream",$argv)) db_upstream((!empty($argv[2])?$argv[2]:'%'));
68 elseif (in_array("-update_all",$argv)) update_all();
69 elseif (in_array("-update_new",$argv)) update_new();
70 elseif (in_array("-update_bogus",$argv)) update_bogus();
71 elseif (in_array("-check_db",$argv)) check_db();
72 elseif (in_array("-dehsqa_db",$argv)) dehsqa_db();
73 elseif (in_array("-clear_db",$argv)) clear_db();
74 elseif (in_array("-db_up_error",$argv)) db_up_error();
75 elseif (in_array("-up_changes",$argv)) up_changes((!empty($argv[2])?$argv[2]:'%'), true);
76 elseif (in_array("-watchf",$argv) || in_array("-wwiz",$argv)) watch_wizard((!empty($argv[2])?$argv[2]:'%'));
77 elseif (in_array("-kb_total",$argv)) print "Diff
78 #stat_up_error();
79 #stat_up_error();to download Kb => " . kb_total($argv[2]) . "\n" ;
80 elseif (in_array("-watch_stat",$argv)) watch_stat();
81 else print "Command $argv[1] not found\n";
82 #stat_up_error();
83 function dir_ctrl($dirs) {
84 foreach ($dirs as $dir) {
85 if (!is_dir($dir)) exec("mkdir -m 0740 -p " . escapeshellarg($dir), $output, $res);
86 if ($res != 0) die_status("Error creating basic dir: $dir\n");
87 }
88 }
89 function ext_watch ($file,$pkg,$version) {
90 if (!file_exists($file)) return "";
91 $zp=gzopen($file,"r") or die_status("Fail to open $file");
92 while (!gzeof($zp)) {
93 $line = gzgets ($zp,4096);
94 if (preg_match('/\+\+\+\s.+\/debian\/watch$/',$line)) {
95 $line = gzgets ($zp,4096);
96 preg_match ("/.+\+\d+\,(\d+)\s/",$line,$watch_lenght);
97 for ($i = 1; $i <= $watch_lenght[1]; $i++) {
98 $line=gzgets ($zp,4096);
99 $watch .=substr($line,1);
100 }
101 break;
102 }
103 }
104 if ($watch!=null) return $watch;
105 else return NULL;
106 }
107 function ftp_cn($login,$password,$ftp_server) {
108 $conn_id = @ftp_connect($ftp_server) or die_status("Error: Cannot contact ftp server $ftp_server\n");
109 // login con user name e password
110 ftp_pasv($conn_id,1);
111 $login_result = ftp_login($conn_id, "anonymous","bo@bo.org");
112 // controllo della connessione
113 if ((!$conn_id) || (!$login_result)) {
114 echo "Ftp connection failed!\n";
115 echo "Failed connection to $ftp_server\n";
116 die_status();
117 } else {
118 return $conn_id;
119 }
120 }
121 function dl_diffs($initial = '') {
122 global $dirs,$dbconn,$mirrors;
123 check_db();
124 $conn_normal=ftp_cn("anonymous","bo@bo.org",$mirrors['unstable']);
125 #$conn_non_us=ftp_cn("anonymous","bo@bo.org",$mirrors["non-US"]);
126 $db = pg_pconnect($dbconn) ;
127 $rsql=pg_exec($db, "SELECT * FROM pkgs WHERE name like '$initial%' AND (md5_diff!=md5_atsource or md5_diff is null)") OR die_status("Error in diff query\n");
128 $total=pg_numrows($rsql);
129 $btotal=byte_total($db,$initial);
130 print "Total Diff to downlaod Kb => " . number_format ($btotal/1024, 2, ",",".") . "\n";
131 while ($res_array=pg_fetch_array($rsql)) {
132 #if ($res_array['dist']=='non-US') $conn_id = $conn_non_us;
133 #else
134 $conn_id = $conn_normal;
135 if ($localfile=download_diffs($conn_id,$res_array[name],$res_array[version],$res_array['dir'],$res_array[md5_diff],$res_array[md5_atsource],$res_array[bytes],$res_array[dist])) {
136 $watch=ext_watch($localfile,$res_array[name],$res_array[version]);
137 unlink($localfile);
138 if ($watch!=NULL) {
139 $watch=iconv("ISO-8859-1","UTF-8",$watch);
140 $watch= pg_escape_string($watch);
141 pg_exec($db, "UPDATE pkgs SET watch='" . $watch . "', md5_diff='" . $res_array[md5_atsource] . "' where name='" . $res_array[name] . "' AND dist='" . $res_array[dist] ."'") or die_status("Query error");
142 }
143 else pg_exec($db, "UPDATE pkgs SET watch=NULL, md5_diff='" . $res_array[md5_atsource] . "' where name='" . $res_array[name] . "' AND dist='" . $res_array[dist] ."'") or die_status("Errore nella query");
144 }
145 $btotal=$btotal-$res_array['bytes'];
146 number_format ($btotal/1024, 2, ",",".");
147 print "\rDiffs left => " . $total-- . " Bytes left => " . number_format ($btotal/1024, 2, ",",".") . " - " . $res_array[name];
148 }
149 ftp_quit($conn_normal);
150 pg_close($db);
151 return "Fatto\n";
152 }
153 function download_diffs(&$conn_id,$pkg,$version,$directory,$md5_diff,$md5_atsource,$diff_kb,$dist) {
154 global $dirs,$mirrors;
155 $localfile=$dirs[diffs_dir] . "/$pkg" . "_" . "$version.diff.gz";
156 #if ($dist=="non-US") $remotefile="/debian-non-US/$directory/$pkg" . "_" . "$version.diff.gz";
157 #else
158 $remotefile="/debian/$directory/$pkg" . "_" . "$version.diff.gz";
159 #print "$localfile - $remotefile\n";
160 if (ftp_get($conn_id,$localfile,$remotefile,FTP_BINARY)) {
161 # print "$pkg Diff.gz => Downloaded\n";
162 if(md5_of_file($localfile)==$md5_atsource) {
163 #print "MD5 => OK\n";
164 #unlink($localfile);
165 return $localfile;
166 }
167 }
168 print "Download Diff.gz of package $pkg => Fallito\n";
169 return false;
170 }
171 function db_add($initial='', $clear_db = true) {
172 global $dirs,$dists,$dbconn;
173 check_db();
174 download_sources();
175
176 $db = pg_pconnect($dbconn) or die_status(pg_last_error($db));
177 pg_exec($db, "CREATE TEMP TABLE pkgs_atsrc (name text,dist text)") or die_status('Error creating temp table pkgs_atsrc');
178 pg_exec($db, "CREATE UNIQUE INDEX idxdis on pkgs_atsrc (name,dist)") or die_status('Error creating index on temp table');
179 pg_exec($db, "CREATE TEMP TABLE bin_atsrc (name text,bin_name text, dist text)") or die_status('Error creating temp table pkgs_atsrc');
180 pg_exec($db, "CREATE UNIQUE INDEX idxbis on bin_atsrc (name,bin_name,dist)") or die_status('Error creating index on temp table bin_atsrc');
181
182 foreach ($dists as $dist=>$sections) {
183 foreach ($sections as $section) {
184 $filename=$dirs['sources_dir'] . "/$dist/$section/Sources.gz";
185 print "\nI'm parsing $dist/$section => Sources.gz\n";
186 # 1 Pacchetto - 2 versione - 3 np - 4 Directory - 5 md5
187 $regexp="/Package:\s($initial.*)[^a]Binary:\s(.+)[^a]Version:\s(\d+:)?(.+)[^a]Priority.+Maintainer:.+<([^>]+)>[^a].+Directory:\s(.+)[^a]Files:.+\s(\S+)\s(\d+)\s" . '\1\S+' . "\.diff\.gz[^a](Uploaders:\s(.+)[^a])?/Ssi";
188 $zp = gzopen($filename, "r") or die_status("Could not open $filename");
189 $extracted=tempnam("/tmp/", "$dist_$section_Sources");
190 exec("gzip -c -d $filename > $extracted");
191 $sourcesize=filesize($extracted);
192 unlink($extracted);
193 if(filesize($filename)>20) {
194 while (!gzeof($zp)) {
195 $line='';
196 while ($line!="\n") {
197 $line = gzgets ($zp,4096) ;
198 $buff1 .= $line;
199 }
200 if (preg_match($regexp,$buff1,$matches)) {
201 if ($matches[5]) {
202 $matches[5]=iconv("ISO-8859-1","UTF-8",$matches[5]);
203 $matches[5]=pg_escape_string($matches[5]);
204 }
205 if ($matches[10]) {
206 $matches[10]=iconv("ISO-8859-1","UTF-8",$matches[10]);
207 $matches[10]=pg_escape_string($matches[10]);
208 }
209 @pg_exec($db,"INSERT INTO pkgs_atsrc (name,dist) VALUES ('$matches[1]','$dist')") OR die_status("Temp table pkgs_atsrc query error");
210 $rst=@pg_exec($db, "INSERT INTO pkgs (name,version,dversionmangled,maint,dir,md5_atsource,bytes,dist,section,uploaders) VALUES ('$matches[1]','$matches[4]','$matches[4]','$matches[5]','$matches[6]','$matches[7]','$matches[8]','$dist','$section','$matches[10]')") ;
211 if (!$rst) {
212 $rsql=pg_exec($db, "SELECT pkgs.version FROM pkgs WHERE name='$matches[1]' AND dist='$dist';");
213 $version = $matches[4]; // just for safety
214 while ($res_array=pg_fetch_array($rsql)) {
215 $version = $res_array['version'];
216 }
217 $extra = '';
218 if ($version != $matches[4]) {
219 // only update the dversionmangled field if the versions differ
220 $extra = ",dversionmangled='$matches[4]'";
221 }
222 $rst=@pg_exec($db, "UPDATE pkgs SET name='$matches[1]',version='$matches[4]'$extra,maint='$matches[5]',dir='$matches[6]',md5_atsource='$matches[7]',bytes='$matches[8]',dist='$dist',section='$section',uploaders='$matches[10]' WHERE name='$matches[1]' AND dist='$dist'") OR die_status("\nDb adding error =>" . pg_last_error() . "\n");
223 }
224 $bin_names=split(",", $matches[2]);
225 foreach ($bin_names as $bin_name) {
226 pg_exec($db,"INSERT INTO bin_atsrc (name,bin_name,dist) VALUES ('$matches[1]','" . trim($bin_name) . "','$dist')") OR die_status("Temp table pkgs_atsrc query error");
227 $rst=@pg_exec($db, "INSERT INTO binpkgs (name,bin_name,dist) VALUES ('$matches[1]','" . trim($bin_name) . "','$dist')") ;
228 }
229 }
230 else {
231 preg_match("/Package:\s(.+)[^a]Binary/im",$buff1,$matches);
232 if(strncmp($initial,$matches[1],strlen($initial))<0) break;
233 }
234 $left=$sourcesize-gztell($zp);
235 print "\rSource file Left => $left";
236 $buff1="";
237 unset($matches);
238 }
239 }
240 gzclose($zp) ;
241 }
242 }
243 clear_db($db, $clear_db);
244 pg_close($db);
245 }
246 function db_query($pkg,$dist='%') {
247 global $dirs,$dbconn;
248 $db = pg_pconnect($dbconn ) or die_status(pg_last_error($db));
249 $rsql=pg_exec($db, "SELECT pkgs.* ,mpop_inst FROM (SELECT name,MAX(binpkgs.pop_inst) AS mpop_inst FROM binpkgs GROUP BY name)
250 AS binpkgs INNER JOIN pkgs ON pkgs.name=binpkgs.name
251 WHERE pkgs.name='$pkg' AND dist='$dist';");
252 while ($res_array=pg_fetch_array($rsql)) {
253 print "Package=> " . $res_array['name'] . "\n";
254 print "Version => " . $res_array['version'] . "\n";
255 print "Mangled version => " . $res_array['dversionmangled'] . "\n";
256 print "Diff MD5 Downloaded => " . $res_array['md5_diff'] . "\n";
257 print "Diff MD5 at Sources => " . $res_array['md5_atsource'] . "\n";
258 print "Distribution => " . $res_array['dist'] . "\n";
259 print "Section => " . $res_array['section'] . "\n";
260 print "KBytes => " . number_format ( $res_array['bytes']/1024, 2, ",",".") . "\n";
261 print "Pop Inst=>" . $res_array['mpop_inst'] . "\n";
262 if ($res_array['watch']) {
263 $uscan_res=uscan_foo($res_array['name'] ,$res_array['version'],$res_array['watch']);
264 print "Version Upstream => " . $uscan_res[0] . "\n";
265 print "Watch => " . trim($res_array['watch'])."\n";
266 print "Watch Warnings => " . $uscan_res[1];
267 }
268 else print "Watch => Not present" . "\n";
269 if ($res_array['wwiz_type']) {
270 $uscan_res=uscan_foo($res_array['name'] ,$res_array['version'],$res_array['wwiz']);
271 print "WWiz Upstream => " . $uscan_res[0] . "\n";
272 print "WWiz => " . $res_array['wwiz']."\n";
273 print "WWiz Warings => " . $uscan_res[1];
274 }
275 print "\n";
276 }
277 if (pg_numrows($rsql)==0) echo "Package=> " . $pkg . "\nNot found\n!!";
278 pg_close($db);
279 }
280 function byte_total(&$db,$initial) {
281 global $dirs;
282 $rsql=pg_exec ($db,"Select sum(bytes) as totbytes FROM pkgs WHERE name like '$initial%' AND (md5_diff!=md5_atsource or md5_diff is null)");
283 $res_array=pg_fetch_array($rsql);
284 return $res_array[totbytes] ;
285 }
286 function download_sources () {
287 global $dirs,$dists,$mirrors;
288 foreach ($dists as $dist=>$sections) {
289 $server=$mirrors[$dist];
290 $conn_id = ftp_cn("anonymous","bo@bo.org",$server);
291 foreach ($sections as $section) {
292 $localfile=$dirs[sources_dir] . "/$dist/$section/Sources.gz";
293 $remotefile=remote_dist_dir($dist) . "/$dist/$section/source/Sources.gz";
294 $sources_info=md5_source($section,$dist);
295 if (!file_exists ($dirs[sources_dir] . "/$dist/")) mkdir ( $dirs[sources_dir] . "/$dist",0740);
296 if (!file_exists ($dirs[sources_dir] . "/$dist/$section")) mkdir ($dirs[sources_dir] . "/$dist/$section",0740);
297 if (!file_exists($localfile) OR md5_of_file($localfile)!=$sources_info[md5]) {
298 print "Downloading $remotefile Bytes $sources_info[bytes]=> ";
299 if (ftp_get($conn_id,$localfile,$remotefile,FTP_BINARY)) {
300 print "Done\n";
301 if(md5_of_file($localfile)==$sources_info[md5]) print "MD5 => OK\n";
302 else print "MD5 => no match\n";
303 }
304 else {
305 unlink($localfile);
306 print "Fail\n";
307 die_status ("Error in source file");
308 }
309 }
310 }
311 ftp_quit($conn_id);
312 }
313 }
314 function md5_source($section,$dist) {
315 global $mirrors;
316 $relase=file_get_contents ("ftp://$mirrors[$dist]" . remote_dist_dir($dist) . "/$dist/Release") or die_status("Failed to check MD5 of sources");
317 preg_match ("/\s([^\s]+)\s+(\d+)\s$section\/source\/Sources\.gz/i", $relase,$matches);
318 return array("md5"=>$matches[1],"bytes"=>$matches[2]);
319 # 183dea9ca3c2e35ffd6cf5eee9501c21 2941637 main/binary-i386/Packages.gz
320 }
321
322 function vers_conv($debvers) {
323 // Strip off the epoch
324 $pos = strpos($debvers, ':');
325 if ( $pos !== FALSE) {
326 $debvers = substr($debvers, $pos+1);
327 }
328
329 // strip off the Debian revision (look from the back of the string)
330 $pos = strrpos($debvers, '-');
331 if ( $pos !== FALSE) {
332 $debvers = substr($debvers, 0, $pos);
333 }
334
335 // strip off repacking indicators
336 $debvers = preg_replace("/[-.+~]?(ds|dfsg|debian)(.*)/i", "", $debvers);
337 return $debvers;
338 }
339 function check_db() {
340 global $dirs,$dbconn;
341 $db = pg_pconnect($dbconn) or die_status(1/*pg_last_notice($db)*/);
342 if (!pg_table_exists($db,"pkgs")){
343 pg_exec($db, "CREATE TABLE pkgs (id serial PRIMARY KEY,name text,version text, dversionmangled text,maint text, uploaders text, dir text,watch text,md5_diff text,md5_atsource text,bytes numeric,dist text,section text,up_version text,up_changes text, up_url text,watch_warn text,updated bool, keep_changes bool, wwiz text,wwiz_version text, wwiz_type text)") or die_status('Error creating table pkgs\n');
344 pg_exec($db, "CREATE UNIQUE INDEX idxname on pkgs (name,dist)") or die_status('Errore creating index - ' . pg_last_error($db));
345 $sw=true;
346 }
347 if (!pg_table_exists($db,"binpkgs")){
348 pg_exec($db, "CREATE TABLE binpkgs (id serial PRIMARY KEY, name text,bin_name text,dist text, pop_inst numeric,pop_vote numeric, up_error numeric,avg_error_date numeric)") or die_status('Error creating table binpkgs\n');
349 pg_exec($db, "CREATE UNIQUE INDEX idxbin on binpkgs (name,bin_name,dist)") or die_status('Errore creating index - ' . pg_last_error($db));
350 $sw=true;
351 }
352 /*if (!pg_table_exists($db,"events")){
353 pg_exec($db, "CREATE TABLE events (id serial PRIMARY KEY, name text,type text, dist text)") or die_status('Error creating table binpkgs\n');
354 pg_exec($db, "CREATE UNIQUE INDEX idxevents on events (name,dist)") or die_status('Errore creating index - ' . pg_last_error($db));
355 $sw=true;
356 }*/
357 #if (!pg_table_exists($db,"upstream")){
358 # pg_exec($db, "CREATE TABLE upstream (name text,dist text,up_version text,watch_warn text,updated bool)") or die_status('Errore nel creare la tabella');
359 # pg_exec($db, "CREATE UNIQUE INDEX idxupstrm on upstream (name,dist)") or die_status('Errore nel creare gli indici ' . pg_last_error($db));
360 # $sw=true;
361 #}
362 pg_close($db);
363 if($sw) return $sw;
364 else return false;
365 }
366 function pg_table_exists (&$dblink, $table) {
367 $sql = "SELECT relname as tbl FROM pg_class WHERE relname = '$table'";
368 if ($res = pg_exec ($dblink, $sql)) {
369 return pg_numrows($res) > 0;
370 } else {
371 return false; // or throw exception
372 }
373 }
374
375
376 function watch_stat() {
377 global $dirs,$dbconn;
378 $db = pg_pconnect($dbconn) or die_status(pg_last_error($db));
379 $rsql=pg_exec ($db,"Select count(name) as totwatch FROM pkgs WHERE watch!=''");
380 $tot_watch=pg_fetch_array($rsql);
381 print "Total packages with Watch =>$tot_watch[0]\n";
382 $rsql=pg_exec ($db,"Select count(name) as totwatch FROM pkgs WHERE watch IS NULL");
383 $tot_nowatch=pg_fetch_array($rsql);
384 pg_close($db);
385 print "Totale packages without Watch => $tot_nowatch[0]\n";
386 print "Watch presence rate => " . number_format ($tot_watch[0]/($tot_nowatch[0]+$tot_watch[0])*100, 2, ",",".") . "%\n";
387 }
388 function remote_dist_dir($dist) {
389 #if ($dist=="non-US") return "/debian-non-US/dists/unstable";
390 #else
391 return "/debian/dists";
392 }
393 function clear_db(&$db, $fullClean = true) {
394 #global $dbconn;
395 #if (check_db()) die_status("Il Database era vuoto\n");
396 #download_sources();
397 #$db = pg_pconnect($dbconn) or die_status(pg_result_error($db));
398 $sql1= "Delete from binpkgs where id NOT IN
399 (select id FROM binpkgs INNER JOIN bin_atsrc USING (name,bin_name,dist))" ;
400 $sql2= "Delete from pkgs where id NOT IN (select id FROM pkgs INNER JOIN pkgs_atsrc USING (name,dist))" ;
401 $sql3= "UPDATE pkgs SET wwiz=NULL, wwiz_type=NULL, wwiz_version=NULL WHERE watch IS NOT NULL or watch!=''" ;
402 $sql4= "UPDATE pkgs SET up_changes=NULL WHERE wwiz_version=up_version OR up_version=version" ;
403 if(pg_exec($db,$sql1) && pg_exec($db,$sql2) && (!$fullClean || (pg_exec($db,$sql3) && pg_exec($db,$sql4)))) {
404 print "Db clear complete\n";
405 }
406 }
407 function db_popcon($initial='') {
408 global $dirs,$dbconn;
409 $db = pg_pconnect($dbconn) or die_status(pg_last_error($db));
410 $filename=$dirs[popcon_dir] . "/all-popcon-results.txt.gz";
411 /* package name vote old recent nofiles*/
412 $regexp="/Package:\s($initial\S*)\s+(\d+)\s+(\d+)\s+(\d+)\s+(\d+)/iS";
413 $zp = gzopen($filename, "r") or die_status("Could not open $filename");
414 $tin=time();
415 if(filesize($filename)>20) {
416 #pg_exec($db, "BEGIN TRANSACTION") OR die_status("Impossibile iniziare la transazione");
417 while (!gzeof($zp)) {
418 $line = gzgets ($zp,4096) ;
419 if (preg_match($regexp,$line,$matches)) {
420 $pop_inst = $matches[2] + $matches[3] + $matches[4] + $matches[5];
421 #print "\rName => $matches[1] Install => $matches[2] Vote => $matches[3]";
422 @pg_exec($db, "UPDATE binpkgs SET pop_inst='$pop_inst',pop_vote='$matches[2]' WHERE bin_name='$matches[1]'");
423 /*$processed++;
424 $elapsed_time=time()-$tin;
425 if (($elapsed_time % 20)==0 AND $updtime!=$elapsed_time) {
426 $updtime=$elapsed_time;
427 $wprocessed=$processed-$wprocessed;
428 $avg_time=$wprocessed/20;
429 $wprocessed=$processed;
430 $countdown=(34701- $processed)/$avg_time;
431 $last_time=time();
432 }
433 print "\rProcessing Popcon: " . date("i:s",$countdown=$countdown-(time()-$last_time)) . " =>" . (34701-$processed) . " Media $avg_time";
434 $last_time=time();*/
435 }
436 }
437 #pg_exec($db, "COMMIT") OR die_status("Impossibile commsionare la transazione");
438 }
439 @pg_close($db);
440 }
441 function dl_popcon() {
442 global $dirs,$dbconn;
443 $localfile=$dirs[popcon_dir] . "/all-popcon-results.txt.gz";
444 $remotefile="http://popcon.debian.org/all-popcon-results.txt.gz";
445 @file_put_contents($localfile,file_get_contents($remotefile),'w') or die_status("Errore nello scaricare il file popcon\n");
446 }
447 function is_updated ($up_vers,$debian_vers) {
448 if ($up_vers=='') return 0;
449 passthru("dpkg --compare-versions '".escapeshellarg($up_vers)."' le '" . escapeshellarg(vers_conv($debian_vers)) . "'",$great);
450 if ($great!=0) return 1;
451 else return 0;
452 }
453 function db_upstream($initial='%') {
454 global $dirs,$dbconn;
455 check_db();
456 $db = pg_pconnect($dbconn) ;
457 $rsql=pg_exec($db, "SELECT id, pkgs.name,pkgs.dist,up_version,version,watch FROM pkgs WHERE watch is not null AND name LIKE '$initial' ORDER BY name DESC");
458 $tot=pg_numrows($rsql);
459 while ($res_array=pg_fetch_array($rsql)) {
460 $uscan_res=uscan_foo($res_array['name'],$res_array['version'],$res_array['watch']);
461 #print $uscan_res[0] . "\n Name => $res_array[name]\n";
462 $version=$res_array[version];
463 $dversionmangled=$res_array['version'];
464 print "\rVersion=>" . $uscan_res[3];
465 if ($uscan_res[3]!=null) $version=$uscan_res[3];
466 if ($uscan_res[5]!=null && $uscan_res[5] != vers_conv($res_array['version'])) $dversionmangled=$uscan_res[5];
467 $updated=$uscan_res[4];
468 if ($updated) {
469 $updated=is_updated($uscan_res[0],$dversionmangled);
470 }
471
472 if (!$updated) {
473 events::newVersion($res_array['name'], $res_array['version'], $uscan_res[0], $res_array['dist']);
474 }
475
476 if ($uscan_res[0]!=$res_array[up_version]) ($keep_changes=1);
477 else $keep_changes=0;
478 $up_url=iconv("ISO-8859-1","UTF-8",$uscan_res[2]);
479 $up_version=iconv("ISO-8859-1","UTF-8",$uscan_res[0]);
480 $watch_warn='';
481 if($uscan_res[1] != null) {
482 $watch_warn=pg_escape_string(iconv("ISO-8859-1","UTF-8",$uscan_res[1]));
483 }
484 pg_exec($db, "UPDATE pkgs SET up_version='" . pg_escape_string($up_version) . "', dversionmangled='".pg_escape_string($dversionmangled)."',up_url='" . pg_escape_string($up_url) . "', watch_warn='" . $watch_warn . "',keep_changes='$keep_changes', wwiz_version=NULL, wwiz_type=NULL, wwiz=NULL, updated='$updated' WHERE id=$res_array[id]") or die_status("Error in update pkgs upstream");
485 #print "\rUpdated " . $res_array['name'] . " => $updated Up Version => ". $uscan_res[0];
486 print "\t Upstream left => " . $tot --;
487 # }
488 # else print "Added ". $res_array['name'] ."\n";
489 # if ($great==0) {
490
491 # print "Package=> " . $res_array['name'] . "\n";
492 # print "Version => " . $res_array['version'] . "\n";
493 # print "Upstream Ver=> " . $uscan_res[0] . "\n";
494 #print "Watch warings=> " . $uscan_res[1] . "\n";
495 # }
496 }
497 print "\n";
498 pg_close($db);
499 }
500 function check_url ($url) {
501 $url_p = parse_url ($url);
502 if (isset ($url_p["host"])) $host = $url_p["host"];
503 else return false;
504 preg_match("/(http|ftp)/",$host,$matches);
505 if ($matches[1]=='http') $fp = fsockopen ($host, 80, $errno, $errstr, 5);
506 elseif ($matches[1]=='ftp') $fp2 = fsockopen ($host, 21, $errno, $errstr, 5);
507 if (!$fp AND !$fp2) return false;
508 else return true;
509 }
510 function keep_remote ($localfile,$remotefile) {
511 if (!check_url($remotefile)) return false;
512 # $rfp = @fopen ($remotefile, "r");
513 # if (!$rfp) {
514 # return false;
515 # }
516 # fclose($rfp);
517 # $lfp = fopen ($localfile, "w");
518 # stream_set_blocking($rfp,0);
519 # ini_set ( "memory_limit", "100M");
520 # while (!feof($rfp)) {
521 # $data = fread($rfp, 8192);
522 # $bytes+=8192;
523 # print "Downlaoding $remotefile: $bytes\r";
524 # fwrite($lfp, $data);
525 # } while (true);
526 # ini_set ( "memory_limit", "15M");
527
528 if (!copy($remotefile, $localfile)) {
529 echo "Copia di $file non riuscita ...\n";
530 return false;
531 }
532 # fclose($lfp);
533 # fclose($rfp);
534
535 return true;
536 }
537 function up_changes($src_name='%', $force = false) {
538 global $dbconn, $fetchUpstreamChanges;
539
540 if (!$fetchUpstreamChanges && !$force) {
541 print "\nSkipping download of upstream sources to grab changelogs\n";
542 return;
543 }
544
545 $changes_files=array("CHANGES","NEWS","Changelog","ChangeLog","changelog");
546 $db = pg_pconnect($dbconn) ;
547 $rsql=pg_exec($db, "SELECT id,up_url FROM pkgs WHERE up_url!='' AND keep_changes='t' AND name LIKE '$src_name'");
548 $tot=pg_numrows($rsql);
549 while ($res_array=pg_fetch_array($rsql)) {
550 $localfile=tempnam("/tmp/", "dehs-" . $res_array[id] . ".tar.gz");
551 print "I'm downloading $res_array[up_url]\r";
552 $res=keep_remote($localfile,$res_array['up_url']);
553 print "UPDATE pkgs SET up_changes='', keep_changes='f' WHERE id=$res_array[id]";
554 if (!$res) {
555 pg_exec($db, "UPDATE pkgs SET up_changes='', keep_changes='f' WHERE id=$res_array[id]");
556 $notdown++;
557 $tot--;
558 print "Packages Left: " . $tot-- . " Found: $found Not found: $notfound Not Down: $notdown\r";
559 #print "\n Not Downlaoded: $res_array[up_url]\n";
560 unlink($localfile);
561 continue;
562 }
563 foreach($changes_files as $filename) {
564 $command="tar --wildcards -zxOf " . $localfile . " *$filename 2>/dev/null";
565 exec($command,$up_changes,$cmdres);
566 $up_changes=rtrim(implode("\n",$up_changes));
567 if ($cmdres==0 AND strlen($up_changes)>20) {
568 $sw=true;
569 $conv_res=iconv("ISO-8859-1","UTF-8",$up_changes);
570 if ($conv_res) $up_changes=$conv_res;
571 $up_changes=pg_escape_string($up_changes);
572 $up_changes_sql="UPDATE pkgs SET up_changes='$up_changes', keep_changes='f' WHERE id=$res_array[id]";
573 pg_exec($db,$up_changes_sql);
574 #print "\nFound $filename on $res_array[up_url]\n";
575 $found++;
576 break;
577 }
578 }
579 if (!$sw) {
580 pg_exec($db, "UPDATE pkgs SET up_changes='', keep_changes='f' WHERE id=$res_array[id]");
581 #print "\n Not Found any on $res_array[up_url]\n";
582 $notfound++;
583 }
584 unlink($localfile);
585 print "Packages Left: " . $tot-- . " Found: $found Not found: $notfound Not Down: $notdown\r";
586 }
587 pg_close($db);
588 }
589 function uscan_foo($name,$version,$watch){
590 global $base, $uscan;
591
592 $tmpnam=tempnam('/tmp/', $name.'_watch');
593 $fw=fopen($tmpnam,"w");
594 fwrite($fw,$watch);
595 fclose($fw);
596
597 $uscan_res=shell_exec("$uscan --dehs --package $name --upstream-version " . escapeshellarg(vers_conv($version)) . " --watchfile $tmpnam 2>/dev/null 2>&1");
598
599 unlink($tmpnam);
600
601 $p = xml_parser_create();
602 xml_parse_into_struct($p, $uscan_res, $vals, $index);
603 xml_parser_free($p);
604
605 $upstream=$vals[$index['UPSTREAM-VERSION'][0]][value];
606 $up_url=$vals[$index['UPSTREAM-URL'][0]][value];
607 $deb_vers=$vals[$index['DEBIAN-UVERSION'][0]][value];
608 $deb_mangled_vers=$vals[$index['DEBIAN-MANGLED-UVERSION'][0]][value];
609 $warnings=$vals[$index['WARNINGS'][0]][value];
610 $updated=$vals[$index['STATUS'][0]][value];
611
612 if ($updated=="up to date") $updated=0;
613 else $updated=1;
614
615 if ($upstream=='') $upstream=null;
616 if ($up_url=='') $up_url=null;
617 if ($deb_vers=='') $deb_vers=null;
618 if ($warnings=='') $warnings=null;
619 if ($deb_mangled_vers=='') $deb_mangled_vers=null;
620
621 return array($upstream, $warnings, $up_url, $deb_vers, $updated, $deb_mangled_vers);
622 }
623 function db_up_error() {
624 global $dbconn;
625 check_db();
626 $db = pg_pconnect($dbconn) ;
627 $bugurl="http://bugs.debian.org/cgi-bin/pkgreport.cgi?which=tag&data=upstream&archive=no&show_list_header=no&pend-exc=done";
628 print "\nDownloading bugs list =>";
629 $ferrors=file_get_contents($bugurl) or die_status ("I can't keep error page from bugs.debian.org");
630 print "Done\n";
631 $ferrors=explode("<li>",$ferrors);
632 $totline=count($ferrors);
633 #$errors[]=array();
634 #array_pop($errors);
635 print "Total lines => $totline\n";
636 foreach ($ferrors as $line) {
637 # print $line . "\n";
638 if (preg_match("/Package:.+?>([^<]+)<\/a>.+<strong>((\d+)\syear\sand\s|)(\d+)\sdays/sS",$line,$matches)) {
639 $errors[$matches[1]][err_tot]++;
640 $errors[$matches[1]][days]+=$matches[3]*365+$matches[4];
641 #if ($matches[3]) print "Anni $matches[3]";
642 #print "Giorni $matches[4]\n";
643 }
644 print "\rLines left => " . $totline--;
645 }
646 #arsort($errors);
647 $total=count($errors);
648 foreach ($errors as $pkg_name=>$value) {
649 pg_exec($db, "UPDATE binpkgs SET up_error=" . $value[err_tot] . ",avg_error_date=" . $value[days]/$value[err_tot] . " WHERE bin_name='$pkg_name'") or die_status("Error in upstream bug query");
650 #print "Pkg: $error Errori: $value[err_tot] Average Days: " . $value[days]/$value[err_tot] . "\n";
651 print "\rBugs left => " . $total--;
652 }
653 pg_close($db);
654 }
655 function watch_wizard($src_name='%'){
656 global $dirs,$dbconn,$sfIgnore,$watchFileExts,$watchFileDversionMangle,$watchFormat;
657 $db = pg_pconnect($dbconn) or die_status ("Db error");
658 $checked=$errors=$notfound=$verok=$notmatch=0;
659
660 // prepare some stuff that needs to be done once per run
661 $opts = array();
662 $exts = '';
663 $dvmanglers = '';
664
665 foreach ($watchFileExts as $ext) {
666 $exts .= $ext . '|';
667 }
668 unset($ext);
669
670 if ($exts != '') {
671 $opts[] = 'uversionmangle=s/\.(' . substr($exts, 0, -1) . ')$//i';
672 $exts = '(' . $exts . ')';
673 }
674
675 foreach ($watchFileDversionMangle as $dvmangler) {
676 $dvmanglers .= $dvmangler . '|';
677 }
678 unset($dvmangler);
679
680 if ($dvmanglers != '') {
681 $opts[] = 'dversionmangle=s/[-.+~]?(' . substr($dvmanglers, 0, -1) . ')(.*)$//i';
682 }
683
684 $opts[] = 'pasv';
685
686 if (is_array($opts)) {
687 $_opts = '';
688 foreach ($opts as $opt) {
689 $_opts .= $opt . ',';
690 }
691 $opts = '';
692 if ($_opts != ',') {
693 $opts = 'opts=' . substr($_opts, 0, -1) . ' \\';
694 }
695 }
696
697 $sqlstring="SELECT mpop_inst,name,pkgs.version,pkgs.dversionmangled,pkgs.section,pkgs.dist,tot_up_error, tot_avg_error_date, wwiz_version FROM pkgs INNER JOIN
698 (Select max(pop_inst) as mpop_inst,SUM(up_error) as tot_up_error,AVG(avg_error_date) as tot_avg_error_date,name,dist FROM binpkgs GROUP BY name,dist HAVING max(pop_inst) IS NOT NULL) as binpkgs using(name,dist)
699 WHERE (watch IS NULL OR watch='') AND name LIKE '$src_name' ORDER BY mpop_inst DESC";
700 $rsql=pg_exec($db, $sqlstring);
701
702 while ($res_array=pg_fetch_array($rsql)) {
703
704 if (substr($res_array["name"],0,3)=='lib')
705 $initial=substr($res_array["name"],0,4);
706 else
707 $initial=substr($res_array["name"],0,1);
708
709 $url="http://packages.debian.org/changelogs/pool/" .
710 $res_array["section"] . "/" .
711 $initial . "/" .
712 $res_array["name"] ."/" .
713 $res_array["name"] . "_" .
714 $res_array["version"] . "/copyright";
715 $contents=@file_get_contents($url) or '';
716 $generatedWatches = array();
717
718 if (!$contents) {
719 $url="http://packages.debian.org/changelogs/pool/" .
720 $res_array["section"] . "/" .
721 $initial . "/" .
722 $res_array["name"] ."/" .
723 $res_array["name"] . "_" .
724 $res_array["version"] . "/" . $res_array["name"] . ".copyright";
725 $contents=@file_get_contents($url) or '';
726 }
727
728 if (!$contents) {
729 $url="http://packages.debian.org/changelogs/pool/" .
730 $res_array["section"] . "/" .
731 $initial . "/" .
732 $res_array["name"] ."/" .
733 "current/copyright";
734 $contents=@file_get_contents($url) or '';
735 }
736
737 if ($contents) {
738
739 if (preg_match ('/(sf\.net|sourceforge\.net)/i', $contents, $matches) ||
740 (preg_match ('/([\w\-]+)\.(sf\.net|sourceforge\.net)/i', $contents, $matches)
741 && !in_array($matches[1], $sfIgnore))) {
742 preg_match("/([^\d]+)/",$res_array['name'],$dmatches);
743 $depured_debian_name=$dmatches[1];
744 /*$matches[1]="ftp://download.sf.net/pub/sourceforge/" . substr($depured_debian_name,0,1) . "/" . substr($depured_debian_name,0,2) . "/" . $depured_debian_name . "/";*/
745 $generatedWatches[]=array('url'=>"http://sf.net/" . $depured_debian_name . "/");
746 $generatedWatches[]=array('url'=>"http://sf.net/" . $depured_debian_name . "/",'name'=>$depured_debian_name);
747
748 }
749
750 if (preg_match ('#((ftp://|http://|https://)\S+(html|htm|/(?(?=.+(tar|tgz|zip|gz|bz2))|[^>\s\)\a]+)))#i',$contents,$matches)) {
751 $final=substr($matches[1],-1);
752 if ($final=='.') {
753 $matches[1]=substr($matches[1],0,-1);
754 $final=substr($matches[1],-1);
755 }
756 if ($matches[2]=="http://" || $matches[2]=="https://") {
757 $space=' ' . "(?:.*/)?";
758 } elseif ($final!='/') {
759 $matches[1].='/';
760 }
761 $generatedWatches[]=array('url' => preg_replace("#((http|https|ftp)://.+):(.*)#i",'$1' . '$3', $matches[1],1), 'space' => $space);
762 }
763
764 if (preg_match ('#((ftp|http)\.\S+(html|htm|/(?(?=.+(tar|tgz|zip|gz|bz2))|[^>\s\)\a]+)))#i',$contents,$matches)) {
765 $final=substr($matches[1],-1);
766 if ($final=='.') {
767 $matches[1]=substr($matches[1],0,-1);
768 $final=substr($matches[1],-1);
769 }
770 $space = '';
771 if ($matches[2]=="http") {
772 $space=' ' . "(?:.*/)?";
773 } elseif ($final!='/') {
774 $matches[1].='/';
775 }
776 $generatedWatches[]=array('url'=>preg_replace('#(http|ftp)\.(.+)#i','$1://$0', $matches[1],1), 'space'=>$space);
777 }
778
779 if (empty($generatedWatches)) {
780 $notmatch++;
781 $contents=iconv("ISO-8859-1","UTF-8",$contents);
782 pg_exec($db, "UPDATE pkgs SET wwiz_version=NULL, wwiz='" . pg_escape_string($contents) . "', wwiz_type='notmatch', up_url='', up_changes='',keep_changes='f' where name='" . pg_escape_string($res_array[name]) . "' AND dist='" . $res_array[dist] ."'");
783
784 } else {
785
786 $defs = array('name' => $res_array['name'], 'url' => '', 'space' => '');
787
788 foreach ($generatedWatches as $tWatch) {
789
790 if (!is_array($tWatch)) {
791 $tWatch = array($tWatch);
792 }
793
794 $tWatch = array_merge($defs, $tWatch);
795
796 $watch = sprintf($watchFormat, $tWatch['url'], $tWatch['space'], $tWatch['name'], $exts, $opts);
797
798 $uscan_res=uscan_foo($res_array['name'] ,$res_array['version'],$watch);
799
800 if ($uscan_res[0] && levenshtein($uscan_res[0], $res_array['version']) < strlen($res_array['version'])) {
801 break;
802 }
803 }
804
805 if ($uscan_res[1] && !$uscan_res[0]) {
806 pg_exec($db, "UPDATE pkgs SET wwiz_version=NULL, wwiz='" . pg_escape_string($uscan_res[1]) . "', wwiz_type='error', up_url='', up_changes='', keep_changes='f' where name='" . pg_escape_string($res_array[name]) . "' AND dist='" . $res_array[dist] ."'");
807 $errors++;
808 } else {
809 $verok++;
810 if ($uscan_res[0] != $res_array['wwiz_version']) {
811 $keep_changes = 1;
812 } else {
813 $keep_changes = 0;
814 }
815
816 $dversionmangled = $res_array[version];
817 if ($uscan_res[5]!=null && $uscan_res[5] != vers_conv($res_array['version'])) $dversionmangled=$uscan_res[5];
818
819 $updated=$uscan_res[4];
820 if ($updated) {
821 $updated=is_updated($uscan_res[0],$dversionmangled);
822 }
823
824 /*if (!$updated) {
825 events::newVersion($res_array['name'], $res_array['version'], $uscan_res[0], $res_array['dist']);
826 }*/
827
828 pg_exec($db, "UPDATE pkgs SET wwiz='" . pg_escape_string($watch) ."', wwiz_type='watch', wwiz_version='" . pg_escape_string($uscan_res[0]) . "',dversionmangled='".pg_escape_string($dversionmangled)."', up_url='" . pg_escape_string($uscan_res[2]) . "', keep_changes='$keep_changes', updated='$updated' where name='" . pg_escape_string($res_array[name]) . "' AND dist='" . $res_array[dist] ."'");
829 }
830 }
831 } else {
832 $notfound++;
833 pg_exec($db, "UPDATE pkgs SET wwiz_version=NULL, wwiz_type='no_cright' where name='" . pg_escape_string($res_array['name']) . "' AND dist='" . $res_array['dist'] ."'");
834 }
835 print "Package checked: " . $checked++ .
836 " OK: $verok Error: $errors Not Matched: $notmatch\r";
837 }
838 print "\nCopyright files not found: $notfound\n";
839 print "Automatic generated watch file failures: $errors\n";
840 pg_close($db);
841 }
842 function dbqa_conn ($dbname,$mode) {
843 $id = dba_open($dbname, $mode, "db4");
844 if (!$id) {
845 die_status("dba_open failed\n");
846 }
847 return $id;
848 }
849 function dehsqa_db () {
850 global $dirs,$dbconn;
851 $dir1='/org/alioth.debian.org/chroot/home/groups/dehs/htdocs/';
852 $dir2="/org/qa.debian.org/data/dehs/";
853 $dists=array("unstable","experimental");
854 foreach ($dists as $dist) {
855 $id=dbqa_conn($dir1 . "dehs_qa_" . $dist . ".db",'n');
856 $db = pg_pconnect($dbconn) or die_status ("Db error");
857 $sql="SELECT name, id, up_version, wwiz_version, watch, wwiz_type, watch_warn, version, dversionmangled FROM pkgs WHERE dist='$dist'";
858 $rsql=pg_exec($db, $sql);
859 while($res_array=pg_fetch_array($rsql)) {
860
861 if (!$res_array[watch]) { if ($res_array['wwiz_type']==null) $version="N/A"; else $version='-';}
862 elseif (!$res_array[up_version]) $version="Error";
863 else $version=$res_array[up_version];
864
865 if ($res_array['wwiz_type']=="watch") $wwiz=$res_array['wwiz_version'];
866 else $wwiz=$res_array[wwiz_type];
867
868 $xml="<data><id>$res_array[id]</id>" .
869 "<up_version>$version</up_version>" .
870 "<dversion>$res_array[version]</dversion>" .
871 "<dversionmangled>$res_array[dversionmangled]</dversionmangled>" .
872 "<wwiz>$wwiz</wwiz>" .
873 "</data>";
874 $value=addslashes($xml);
875 dba_replace($res_array[name],$xml,$id);
876 }
877 dba_optimize($id);
878 dba_close($id);
879 pg_close($db);
880 }
881 }
882 function md5_of_file($inFile) {
883 if (file_exists($inFile)) {
884 return md5_file($inFile);
885 } else {
886 return false;
887 }
888 }
889 function update_all() {
890 global $email;
891 $intime=gmdate('D, d M Y H:i:s \C\E\S\T',time()+3600*2);
892 echo __FUNCTION__ . ' started the ' . $intime . "\n";
893 db_add();
894 dl_popcon();
895 db_popcon();
896 dl_diffs();
897 db_up_error();
898 db_upstream();
899 watch_wizard();
900 up_changes();
901 dehsqa_db();
902 $endtime=gmdate('D, d M Y H:i:s \C\E\S\T',time()+3600*2);
903 $messaggio="Dehs executed successful\nBegin: $intime\nEnd: $endtime";
904 mail($email, "DEHS report", $messaggio,
905 "From: dehs-noreply@{$_SERVER['SERVER_NAME']}\r\n" .
906 "Reply-To: dehs-noreply@{$_SERVER['SERVER_NAME']}\r\n" .
907 "X-Mailer: PHP/" . phpversion());
908 }
909 function update_new() {
910 global $email_all;
911 $intime=gmdate('D, d M Y H:i:s \C\E\S\T',time()+3600*2);
912 echo __FUNCTION__ . ' started the ' . $intime . "\n";
913 db_add('',false);
914 dl_popcon();
915 db_popcon();
916
917 global $dbconn;
918 check_db();
919 $db = pg_pconnect($dbconn);
920 $sql="SELECT name FROM pkgs WHERE (md5_diff!=md5_atsource or md5_diff is null)";
921 $rsql=pg_exec($db, $sql);
922 $res_array=pg_fetch_all($rsql);
923 pg_close($db);
924
925 dl_diffs();
926 db_up_error();
927 if ($res_array !== false) {
928 foreach ($res_array as $entry) {
929 db_upstream($entry['name']);
930 up_changes($entry['name']);
931 watch_wizard($entry['name']);
932 }
933 dehsqa_db();
934 }
935 $endtime=gmdate('D, d M Y H:i:s \C\E\S\T',time()+3600*2);
936 $messaggio="Dehs executed successful\nBegin: $intime\nPackages processed: ".((!is_array($res_array))?'none':count($res_array))."\nEnd: $endtime";
937 mail($email_all, "DEHS update_new report", $messaggio,
938 "From: dehs-noreply@{$_SERVER['SERVER_NAME']}\r\n" .
939 "Reply-To: dehs-noreply@{$_SERVER['SERVER_NAME']}\r\n" .
940 "X-Mailer: PHP/" . phpversion());
941 }
942 function update_bogus() {
943 global $email_all,$dbconn;
944 $intime=gmdate('D, d M Y H:i:s \C\E\S\T',time()+3600*2);
945 echo __FUNCTION__ . ' started the ' . $intime . "\n";
946 check_db();
947 $db = pg_pconnect($dbconn);
948 $sql="SELECT name FROM pkgs WHERE up_version='' AND watch!=''";
949 $rsql=pg_exec($db, $sql);
950 $res_array=pg_fetch_all($rsql);
951 $orig_count = ((!is_array($res_array))?0:count($res_array));
952 if ($res_array !== false) {
953 foreach ($res_array as $entry) {
954 db_upstream($entry['name']);
955 up_changes($entry['name']);
956 }
957 dehsqa_db();
958 }
959 $sql="SELECT COUNT(name) FROM pkgs WHERE up_version='' AND watch!=''";
960 $rsql=pg_exec($db, $sql);
961 $res_array=pg_fetch_array($rsql);
962 $new_count = (int)$res_array[0];
963 pg_close($db);
964 $endtime=gmdate('D, d M Y H:i:s \C\E\S\T',time()+3600*2);
965 $messaggio="Dehs executed successful\nBegin: $intime\n".
966 "Packages processed: $orig_count\n" .
967 "New bogus watches count: $new_count\nEnd: $endtime";
968 mail($email_all, "DEHS update_bogus report", $messaggio,
969 "From: dehs-noreply@{$_SERVER['SERVER_NAME']}\r\n" .
970 "Reply-To: dehs-noreply@{$_SERVER['SERVER_NAME']}\r\n" .
971 "X-Mailer: PHP/" . phpversion());
972 }
973 function die_status($msg = '', $status = 1) {
974 if (empty($msg)) {
975 die($status);
976 } else if (is_int($msg) && $status == 1 /* default */) {
977 die($msg);
978 } else {
979 echo $msg;
980 die($status);
981 }
982 }
983
984 class events
985 {
986 function newVersion($sourcePackage, $currentVersion, $newVersion, $distribution, $downloadLink = '')
987 {
988 global $base, $sendNotifications;
989
990 if (!$sendNotifications) {
991 return null;
992 }
993
994 $tpl = file_get_contents($base . '/tpls/new_version.mail.tpl');
995
996 $search = array();
997 $replace = array();
998
999 $search [] = '#PACKAGE#';
1000 $replace[] = $sourcePackage;
1001 $search [] = '#DVERSION#';
1002 $replace[] = $currentVersion;
1003 $search [] = '#UVERSION#';
1004 $replace[] = $newVersion;
1005 $search [] = '#DISTRO#';
1006 $replace[] = $distribution;
1007
1008 $message = str_replace($search, $replace, $tpl);
1009 $subject = events::_extractHeader('subject', $message);
1010 $to = events::_extractHeader('to', $message);
1011
1012 $extraHeaders = events::_getTefaultExtraHeaders();
1013 $extraHeaders[] = 'X-DEHS-UVERSION: ' . $newVersion;
1014
1015 return mail($to, $subject, $message, implode("\r\n", $extraHeaders));
1016 }
1017
1018 function _extractHeader($header, &$message)
1019 {
1020 $regex = '/^' . preg_quote($header, '/') . ':([ \t]*)(.*)$/i';
1021
1022 $matches = array();
1023
1024 if (preg_match($regex, $message, $matches)) {
1025
1026 $spacer = $matches[1];
1027 $value = $matches[2];
1028
1029 $message = ltrim(preg_replace($regex, '', $message));
1030
1031 return $value;
1032
1033 }
1034 return false;
1035 }
1036
1037 function _getTefaultExtraHeaders()
1038 {
1039 global $notificationsMailFrom;
1040 $headers = array();
1041
1042 $headers[] = 'From: ' . $notificationsMailFrom;
1043 $headers[] = 'X-PTS-Approved: sure';
1044 $headers[] = 'X-BY-DEHS: sure';
1045
1046 return $headers;
1047 }
1048
1049 }
1050
1051 ?>

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.5