PEAR
[ class tree: PEAR ] [ index: PEAR ] [ all elements ]

Source for file Packager.php

Documentation is available at Packager.php

  1. <?php
  2. /**
  3.  * PEAR_Packager for generating releases
  4.  *
  5.  * PHP versions 4 and 5
  6.  *
  7.  * @category   pear
  8.  * @package    PEAR
  9.  * @author     Stig Bakken <ssb@php.net>
  10.  * @author     Tomas V. V. Cox <cox@idecnet.com>
  11.  * @author     Greg Beaver <cellog@php.net>
  12.  * @copyright  1997-2009 The Authors
  13.  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
  14.  * @version    CVS: $Id: Packager.php 313023 2011-07-06 19:17:11Z dufuz $
  15.  * @link       http://pear.php.net/package/PEAR
  16.  * @since      File available since Release 0.1
  17.  */
  18.  
  19. /**
  20.  * base class
  21.  */
  22. require_once 'PEAR/Common.php';
  23. require_once 'PEAR/PackageFile.php';
  24. require_once 'System.php';
  25.  
  26. /**
  27.  * Administration class used to make a PEAR release tarball.
  28.  *
  29.  * @category   pear
  30.  * @package    PEAR
  31.  * @author     Greg Beaver <cellog@php.net>
  32.  * @copyright  1997-2009 The Authors
  33.  * @license    http://opensource.org/licenses/bsd-license.php New BSD License
  34.  * @version    Release: 1.9.4
  35.  * @link       http://pear.php.net/package/PEAR
  36.  * @since      Class available since Release 0.1
  37.  */
  38. class PEAR_Packager extends PEAR_Common
  39. {
  40.     /**
  41.      * @var PEAR_Registry 
  42.      */
  43.     var $_registry;
  44.  
  45.     function package($pkgfile = null$compress = true$pkg2 = null)
  46.     {
  47.         // {{{ validate supplied package.xml file
  48.         if (empty($pkgfile)) {
  49.             $pkgfile 'package.xml';
  50.         }
  51.  
  52.         $pkg  &new PEAR_PackageFile($this->config$this->debug);
  53.         $pf   &$pkg->fromPackageFile($pkgfilePEAR_VALIDATE_NORMAL);
  54.         $main &$pf;
  55.         PEAR::staticPopErrorHandling();
  56.         if (PEAR::isError($pf)) {
  57.             if (is_array($pf->getUserInfo())) {
  58.                 foreach ($pf->getUserInfo(as $error{
  59.                     $this->log(0'Error: ' $error['message']);
  60.                 }
  61.             }
  62.  
  63.             $this->log(0$pf->getMessage());
  64.             return $this->raiseError("Cannot package, errors in package file");
  65.         }
  66.  
  67.         foreach ($pf->getValidationWarnings(as $warning{
  68.             $this->log(1'Warning: ' $warning['message']);
  69.         }
  70.  
  71.         // }}}
  72.         if ($pkg2{
  73.             $this->log(0'Attempting to process the second package file');
  74.             $pf2 &$pkg->fromPackageFile($pkg2PEAR_VALIDATE_NORMAL);
  75.             PEAR::staticPopErrorHandling();
  76.             if (PEAR::isError($pf2)) {
  77.                 if (is_array($pf2->getUserInfo())) {
  78.                     foreach ($pf2->getUserInfo(as $error{
  79.                         $this->log(0'Error: ' $error['message']);
  80.                     }
  81.                 }
  82.                 $this->log(0$pf2->getMessage());
  83.                 return $this->raiseError("Cannot package, errors in second package file");
  84.             }
  85.  
  86.             foreach ($pf2->getValidationWarnings(as $warning{
  87.                 $this->log(1'Warning: ' $warning['message']);
  88.             }
  89.  
  90.             if ($pf2->getPackagexmlVersion(== '2.0' ||
  91.                   $pf2->getPackagexmlVersion(== '2.1'
  92.             {
  93.                 $main  &$pf2;
  94.                 $other &$pf;
  95.             else {
  96.                 $main  &$pf;
  97.                 $other &$pf2;
  98.             }
  99.  
  100.             if ($main->getPackagexmlVersion(!= '2.0' &&
  101.                   $main->getPackagexmlVersion(!= '2.1'{
  102.                 return PEAR::raiseError('Error: cannot package two package.xml version 1.0, can ' .
  103.                     'only package together a package.xml 1.0 and package.xml 2.0');
  104.             }
  105.  
  106.             if ($other->getPackagexmlVersion(!= '1.0'{
  107.                 return PEAR::raiseError('Error: cannot package two package.xml version 2.0, can ' .
  108.                     'only package together a package.xml 1.0 and package.xml 2.0');
  109.             }
  110.         }
  111.  
  112.         $main->setLogger($this);
  113.         if (!$main->validate(PEAR_VALIDATE_PACKAGING)) {
  114.             foreach ($main->getValidationWarnings(as $warning{
  115.                 $this->log(0'Error: ' $warning['message']);
  116.             }
  117.             return $this->raiseError("Cannot package, errors in package");
  118.         }
  119.  
  120.         foreach ($main->getValidationWarnings(as $warning{
  121.             $this->log(1'Warning: ' $warning['message']);
  122.         }
  123.  
  124.         if ($pkg2{
  125.             $other->setLogger($this);
  126.             $a = false;
  127.             if (!$other->validate(PEAR_VALIDATE_NORMAL|| $a !$main->isEquivalent($other)) {
  128.                 foreach ($other->getValidationWarnings(as $warning{
  129.                     $this->log(0'Error: ' $warning['message']);
  130.                 }
  131.  
  132.                 foreach ($main->getValidationWarnings(as $warning{
  133.                     $this->log(0'Error: ' $warning['message']);
  134.                 }
  135.  
  136.                 if ($a{
  137.                     return $this->raiseError('The two package.xml files are not equivalent!');
  138.                 }
  139.  
  140.                 return $this->raiseError("Cannot package, errors in package");
  141.             }
  142.  
  143.             foreach ($other->getValidationWarnings(as $warning{
  144.                 $this->log(1'Warning: ' $warning['message']);
  145.             }
  146.  
  147.             $gen &$main->getDefaultGenerator();
  148.             $tgzfile $gen->toTgz2($this$other$compress);
  149.             if (PEAR::isError($tgzfile)) {
  150.                 return $tgzfile;
  151.             }
  152.  
  153.             $dest_package basename($tgzfile);
  154.             $pkgdir       dirname($pkgfile);
  155.  
  156.             // TAR the Package -------------------------------------------
  157.             $this->log(1"Package $dest_package done");
  158.             if (file_exists("$pkgdir/CVS/Root")) {
  159.                 $cvsversion preg_replace('/[^a-z0-9]/i''_'$pf->getVersion());
  160.                 $cvstag = "RELEASE_$cvsversion";
  161.                 $this->log(1'Tag the released code with "pear cvstag ' .
  162.                     $main->getPackageFile('"');
  163.                 $this->log(1"(or set the CVS tag $cvstag by hand)");
  164.             elseif (file_exists("$pkgdir/.svn")) {
  165.                 $svnversion preg_replace('/[^a-z0-9]/i''.'$pf->getVersion());
  166.                 $svntag $pf->getName(. "-$svnversion";
  167.                 $this->log(1'Tag the released code with "pear svntag ' .
  168.                     $main->getPackageFile('"');
  169.                 $this->log(1"(or set the SVN tag $svntag by hand)");
  170.             }
  171.         else // this branch is executed for single packagefile packaging
  172.             $gen &$pf->getDefaultGenerator();
  173.             $tgzfile $gen->toTgz($this$compress);
  174.             if (PEAR::isError($tgzfile)) {
  175.                 $this->log(0$tgzfile->getMessage());
  176.                 return $this->raiseError("Cannot package, errors in package");
  177.             }
  178.  
  179.             $dest_package basename($tgzfile);
  180.             $pkgdir       dirname($pkgfile);
  181.  
  182.             // TAR the Package -------------------------------------------
  183.             $this->log(1"Package $dest_package done");
  184.             if (file_exists("$pkgdir/CVS/Root")) {
  185.                 $cvsversion preg_replace('/[^a-z0-9]/i''_'$pf->getVersion());
  186.                 $cvstag = "RELEASE_$cvsversion";
  187.                 $this->log(1"Tag the released code with `pear cvstag $pkgfile'");
  188.                 $this->log(1"(or set the CVS tag $cvstag by hand)");
  189.             elseif (file_exists("$pkgdir/.svn")) {
  190.                 $svnversion preg_replace('/[^a-z0-9]/i''.'$pf->getVersion());
  191.                 $svntag $pf->getName(. "-$svnversion";
  192.                 $this->log(1"Tag the released code with `pear svntag $pkgfile'");
  193.                 $this->log(1"(or set the SVN tag $svntag by hand)");
  194.             }
  195.         }
  196.  
  197.         return $dest_package;
  198.     }
  199. }

Documentation generated on Wed, 06 Jul 2011 23:31:03 +0000 by phpDocumentor 1.4.3. PEAR Logo Copyright © PHP Group 2004.