function doSign($command, $options, $params) { // should move most of this code into PEAR_Packager // so it'll be easy to implement "pear package --sign" if (sizeof($params) != 1) { return $this->raiseError("bad parameter(s), try \"help {$command}\""); } if (!file_exists($params[0])) { return $this->raiseError("file does not exist: {$params['0']}"); } $obj = new PEAR_Common(); $info = $obj->infoFromTgzFile($params[0]); if (PEAR::isError($info)) { return $this->raiseError($info); } include_once "Archive/Tar.php"; include_once "System.php"; $tar = new Archive_Tar($params[0]); $tmpdir = System::mktemp('-d pearsign'); if (!$tar->extractList('package.xml package.sig', $tmpdir)) { return $this->raiseError("failed to extract tar file"); } if (file_exists("{$tmpdir}/package.sig")) { return $this->raiseError("package already signed"); } @unlink("{$tmpdir}/package.sig"); $input = $this->ui->userDialog($command, array('GnuPG Passphrase'), array('password')); $gpg = popen("gpg --batch --passphrase-fd 0 --armor --detach-sign --output {$tmpdir}/package.sig {$tmpdir}/package.xml 2>/dev/null", "w"); if (!$gpg) { return $this->raiseError("gpg command failed"); } fwrite($gpg, "{$input['0']}\r"); if (pclose($gpg) || !file_exists("{$tmpdir}/package.sig")) { return $this->raiseError("gpg sign failed"); } $tar->addModify("{$tmpdir}/package.sig", '', $tmpdir); return true; }
$rel_id2name = $dbh->getAssoc("SELECT r.id,concat_ws('-', p.name, r.version) FROM packages p, releases r WHERE r.package = p.id"); print "<h2>Deleting Existing Dependencies...</h2>\n"; $dbh->setOption("optimize", "portability"); $dbh->query("DELETE FROM deps"); $ar = $dbh->affectedRows(); $dbh->setOption("optimize", "performance"); print "{$ar} rows deleted<br />\n"; print "<h2>Inserting New Dependencies...</h2>\n"; $sth = $dbh->query("SELECT package, release, fullpath FROM files"); while ($sth->fetchInto($row)) { list($package, $release, $fullpath) = $row; printf("<h3>%s (package %d, release %d):</h3>\n", basename($fullpath), $package, $release); if (!@file_exists($fullpath)) { continue; } $pkginfo = $pc->infoFromTgzFile($fullpath); if (empty($pkginfo['release_deps'])) { printf("%s : no dependencies<br />\n", $rel_id2name[$release]); continue; } foreach ($pkginfo['release_deps'] as $dep) { if ($dep['rel']) { $dep['relation'] = $dep['rel']; unset($dep['rel']); } $i = 0; $fields = implode(',', array_keys($dep)); $values = array_values($dep); $phs = substr(str_repeat('?,', sizeof($values) + 2), 0, -1); $query = "INSERT INTO deps (package,release,{$fields}) VALUES({$phs})"; $pq = $dbh->prepare($query);