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

Contents of /trunk/dehs_pg.php

Parent Directory Parent Directory | Revision Log Revision Log


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

Properties

Name Value
svn:executable *

  ViewVC Help
Powered by ViewVC 1.1.5