Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
<?php/*** PEAR_Packager for generating releases** PHP versions 4 and 5** LICENSE: This source file is subject to version 3.0 of the PHP license* that is available through the world-wide-web at the following URI:* http://www.php.net/license/3_0.txt. If you did not receive a copy of* the PHP License and are unable to obtain it through the web, please* send a note to license@php.net so we can mail you a copy immediately.** @category pear* @package PEAR* @author Stig Bakken <ssb@php.net>* @author Tomas V. V. Cox <cox@idecnet.com>* @author Greg Beaver <cellog@php.net>* @copyright 1997-2006 The PHP Group* @license http://www.php.net/license/3_0.txt PHP License 3.0* @version CVS: $Id: Packager.php,v 1.70 2006/09/25 05:12:21 cellog Exp $* @link http://pear.php.net/package/PEAR* @since File available since Release 0.1*//*** base class*/require_once 'PEAR/Common.php';require_once 'PEAR/PackageFile.php';require_once 'System.php';/*** Administration class used to make a PEAR release tarball.** @category pear* @package PEAR* @author Greg Beaver <cellog@php.net>* @copyright 1997-2006 The PHP Group* @license http://www.php.net/license/3_0.txt PHP License 3.0* @version Release: 1.5.1* @link http://pear.php.net/package/PEAR* @since Class available since Release 0.1*/class PEAR_Packager extends PEAR_Common{/*** @var PEAR_Registry*/var $_registry;// {{{ package()function package($pkgfile = null, $compress = true, $pkg2 = null){// {{{ validate supplied package.xml fileif (empty($pkgfile)) {$pkgfile = 'package.xml';}PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);$pkg = &new PEAR_PackageFile($this->config, $this->debug);$pf = &$pkg->fromPackageFile($pkgfile, PEAR_VALIDATE_NORMAL);$main = &$pf;PEAR::staticPopErrorHandling();if (PEAR::isError($pf)) {if (is_array($pf->getUserInfo())) {foreach ($pf->getUserInfo() as $error) {$this->log(0, 'Error: ' . $error['message']);}}$this->log(0, $pf->getMessage());return $this->raiseError("Cannot package, errors in package file");} else {foreach ($pf->getValidationWarnings() as $warning) {$this->log(1, 'Warning: ' . $warning['message']);}}// }}}if ($pkg2) {$this->log(0, 'Attempting to process the second package file');PEAR::staticPushErrorHandling(PEAR_ERROR_RETURN);$pf2 = &$pkg->fromPackageFile($pkg2, PEAR_VALIDATE_NORMAL);PEAR::staticPopErrorHandling();if (PEAR::isError($pf2)) {if (is_array($pf2->getUserInfo())) {foreach ($pf2->getUserInfo() as $error) {$this->log(0, 'Error: ' . $error['message']);}}$this->log(0, $pf2->getMessage());return $this->raiseError("Cannot package, errors in second package file");} else {foreach ($pf2->getValidationWarnings() as $warning) {$this->log(1, 'Warning: ' . $warning['message']);}}if ($pf2->getPackagexmlVersion() == '2.0' ||$pf2->getPackagexmlVersion() == '2.1') {$main = &$pf2;$other = &$pf;} else {$main = &$pf;$other = &$pf2;}if ($main->getPackagexmlVersion() != '2.0' &&$main->getPackagexmlVersion() != '2.1') {return PEAR::raiseError('Error: cannot package two package.xml version 1.0, can ' .'only package together a package.xml 1.0 and package.xml 2.0');}if ($other->getPackagexmlVersion() != '1.0') {return PEAR::raiseError('Error: cannot package two package.xml version 2.0, can ' .'only package together a package.xml 1.0 and package.xml 2.0');}}$main->setLogger($this);if (!$main->validate(PEAR_VALIDATE_PACKAGING)) {foreach ($main->getValidationWarnings() as $warning) {$this->log(0, 'Error: ' . $warning['message']);}return $this->raiseError("Cannot package, errors in package");} else {foreach ($main->getValidationWarnings() as $warning) {$this->log(1, 'Warning: ' . $warning['message']);}}if ($pkg2) {$other->setLogger($this);$a = false;if (!$other->validate(PEAR_VALIDATE_NORMAL) || $a = !$main->isEquivalent($other)) {foreach ($other->getValidationWarnings() as $warning) {$this->log(0, 'Error: ' . $warning['message']);}foreach ($main->getValidationWarnings() as $warning) {$this->log(0, 'Error: ' . $warning['message']);}if ($a) {return $this->raiseError('The two package.xml files are not equivalent!');}return $this->raiseError("Cannot package, errors in package");} else {foreach ($other->getValidationWarnings() as $warning) {$this->log(1, 'Warning: ' . $warning['message']);}}$gen = &$main->getDefaultGenerator();$tgzfile = $gen->toTgz2($this, $other, $compress);if (PEAR::isError($tgzfile)) {return $tgzfile;}$dest_package = basename($tgzfile);$pkgdir = dirname($pkgfile);// TAR the Package -------------------------------------------$this->log(1, "Package $dest_package done");if (file_exists("$pkgdir/CVS/Root")) {$cvsversion = preg_replace('/[^a-z0-9]/i', '_', $pf->getVersion());$cvstag = "RELEASE_$cvsversion";$this->log(1, 'Tag the released code with "pear cvstag ' .$main->getPackageFile() . '"');$this->log(1, "(or set the CVS tag $cvstag by hand)");}} else { // this branch is executed for single packagefile packaging$gen = &$pf->getDefaultGenerator();$tgzfile = $gen->toTgz($this, $compress);if (PEAR::isError($tgzfile)) {$this->log(0, $tgzfile->getMessage());return $this->raiseError("Cannot package, errors in package");}$dest_package = basename($tgzfile);$pkgdir = dirname($pkgfile);// TAR the Package -------------------------------------------$this->log(1, "Package $dest_package done");if (file_exists("$pkgdir/CVS/Root")) {$cvsversion = preg_replace('/[^a-z0-9]/i', '_', $pf->getVersion());$cvstag = "RELEASE_$cvsversion";$this->log(1, "Tag the released code with `pear cvstag $pkgfile'");$this->log(1, "(or set the CVS tag $cvstag by hand)");}}return $dest_package;}// }}}}// {{{ md5_file() utility functionif (!function_exists('md5_file')) {function md5_file($file) {if (!$fd = @fopen($file, 'r')) {return false;}fclose($fd);$md5 = md5(file_get_contents($file));return $md5;}}// }}}?>