$archives = array( array('wheezy-backports', 'main', 'amd64'), array('wheezy-backports', 'main', 'i386'), array('wheezy-custom', 'main', 'amd64'), array('wheezy-custom', 'main', 'i386'), //array('wheezy-experimental', 'main', 'amd64'), //array('wheezy-experimental', 'main', 'i386'), ); $root = '/home/grendelman/www/debian.dev-zero.nl/debian/dists'; $pkgdb = array(); function trim_el (&$el, $k) { $el = trim($el); } function parse_list($list) { $el = explode(',', $list); array_walk($el, 'trim_el'); return $el; } function parse_packages($file, $archive) { global $pkgdb; if ($pkg = file($file)) { $curpkg = ''; $curvrs = ''; $curarch = ''; $curdesc = ''; $curlong = ''; $curdep = array(); $cursug = array(); $currec = array(); $curcon = array(); $curpro = array(); foreach ($pkg as $line) { // Package name $n = preg_match('/^Package: (.*)$/', $line, $matches); if ($n == 1) { $curpkg = $matches[1]; } // Version $n = preg_match('/^Version: (.*)$/', $line, $matches); if ($n == 1) { $curvrs = $matches[1]; } // Depends $n = preg_match('/^Depends: (.*)$/', $line, $matches); if ($n == 1) { $curdep = parse_list($matches[1]); } // Recommends $n = preg_match('/^Recommends: (.*)$/', $line, $matches); if ($n == 1) { $currec = parse_list($matches[1]); } // Suggests $n = preg_match('/^Suggests: (.*)$/', $line, $matches); if ($n == 1) { $cursug = parse_list($matches[1]); } // Conflicts $n = preg_match('/^Conflicts: (.*)$/', $line, $matches); if ($n == 1) { $curcon = parse_list($matches[1]); } // Provides $n = preg_match('/^Provides: (.*)$/', $line, $matches); if ($n == 1) { $curpro = parse_list($matches[1]); } // Architecture $n = preg_match('/^Architecture: (.*)$/', $line, $matches); if ($n == 1) { $curarch = $matches[1]; } // Description $n = preg_match('/^Description: (.*)$/', $line, $matches); if ($n == 1) { $curdesc = $matches[1]; } // Long description (line starts with space) $n = preg_match('/^ (.*)$/', $line, $matches); if ($n == 1) { $curlong .= preg_replace('/^\.$/', '', $matches[1])."\n"; } // Empty line: next package if (trim($line) == '') { if (!isset($pkgdb[$curpkg])) { $pkgdb[$curpkg] = array(); $pkgdb[$curpkg]['name'] = $curpkg; $pkgdb[$curpkg]['archive'] = $archive; } if (!isset($pkgdb[$curpkg]['arch'][$curarch]['version'])) $pkgdb[$curpkg]['arch'][$curarch]['version'] = $curvrs; if (!isset($pkgdb[$curpkg]['description'])) $pkgdb[$curpkg]['description'] = $curdesc; if ($curlong && !isset($pkgdb[$curpkg]['longdesc'])) { $pkgdb[$curpkg]['longdesc'] = $curlong; } if (count($curdep) && !isset($pkgdb[$curpkg]['depends'])) { $pkgdb[$curpkg]['depends'] = $curdep; } if (count($cursug) && !isset($pkgdb[$curpkg]['suggests'])) { $pkgdb[$curpkg]['suggests'] = $cursug; } if (count($currec) && !isset($pkgdb[$curpkg]['recommends'])) { $pkgdb[$curpkg]['recommends'] = $currec; } if (count($curcon) && !isset($pkgdb[$curpkg]['conflicts'])) { $pkgdb[$curpkg]['conflicts'] = $curcon; } if (count($curpro) && !isset($pkgdb[$curpkg]['provides'])) { $pkgdb[$curpkg]['provides'] = $curpro; } // reset $curpkg = ''; $curvrs = ''; $curarch = ''; $curdesc = ''; $curlong = ''; $curdep = array(); $cursug = array(); $currec = array(); $curcon = array(); $curpro = array(); } } ksort($pkgdb); } else return false; } function build_db() { global $archives, $root, $pkgdb; foreach ($archives as $a) { $filename = "$root/".$a[0]."/".$a[1]."/binary-".$a[2]."/Packages"; parse_packages($filename, $a[0]); } } ?>
$k | ". "".$v['description']." | ". "".$v['archive']." | ". "$vtxt | ". "