示例#1
0
文件: CLI.php 项目: peopleplan/Pyrus
 public function process()
 {
     if ($_SERVER['argc'] < 2) {
         $this->printUsage();
         return false;
     }
     switch ($_SERVER['argv'][1]) {
         case 'update':
             $this->handleUpdate();
             break;
         case 'create':
             return $this->handleCreate();
         case 'add-maintainer':
             $scs = new PEAR2_SimpleChannelServer($this->channel, $this->dir);
             // is this even needed?
             break;
         case 'add-category':
             PEAR2_SimpleChannelServer_Categories::create($category, $description);
             break;
         case 'release':
             $this->handleRelease();
             break;
         default:
             echo 'Please use one of the following commands:' . PHP_EOL;
             $this->printUsage();
             break;
     }
 }
示例#2
0
 /**
  * Save package REST based on a release
  * 
  * @param \PEAR2\Pyrus\Package $new
  */
 function saveInfo(\PEAR2\Pyrus\Package $new)
 {
     $reader = new \PEAR2\Pyrus\XMLParser;
     $deprecated = false;
     if (file_exists($this->rest . DIRECTORY_SEPARATOR . 'p' . DIRECTORY_SEPARATOR .
           'info.xml')) {
         $oldinfo = $reader->parse($this->rest . DIRECTORY_SEPARATOR . 'p' .
             DIRECTORY_SEPARATOR . 'info.xml');
         if (isset($oldinfo['p']['dp'])) {
             $deprecated = array('dp' => $oldinfo['p']['dp'], 'dc' => $oldinfo['p']['dc']);
         }
     }
     $xml = array();
     $xml['n'] = $new->name;
     $xml['c'] = $this->channel;
     try {
         $category = PEAR2_SimpleChannelServer_Categories::getPackageCategory($new->name);
     } catch (PEAR2_SimpleChannelServer_Categories_Exception $e) {
         $categories = PEAR2_SimpleChannelServer_Categories::create('Default', 'This is the default category');
         $categories->linkPackageToCategory($new->name,'Default');
         $category = PEAR2_SimpleChannelServer_Categories::getPackageCategory($new->name);
     }
     $xml['ca'] = array(
         'attribs' => array('xlink:href' => $this->getCategoryRESTLink($category)),
         '_content' => $category,
         );
     $xml['l'] = $new->license['name'];
     $xml['s'] = $new->summary;
     $xml['d'] = $new->description;
     $xml['r'] = array('attribs' => 
         $this->getReleaseRESTLink(strtolower($new->name)));
     if ($a = $new->extends) {
         $xml['pa'] = array('attribs' =>
             array('xlink:href' => $this->getPackageRESTLink(strtolower($a) . '/info.xml')),
             '_content' => $a);
     }
     $xmlinf = $this->_getProlog('p', 'package');
     $xml['attribs'] = $xmlinf['p']['attribs'];
     $xml = array('p' => $xml);
     $this->savePackageREST(strtolower($new->name) . '/info.xml', $xml);
 }
示例#3
0
 /**
  * save rest.release2 release REST
  *
  * @param \PEAR2\Pyrus\Package $new      package to be saved
  * @param string              $releaser releasing maintainer's handle
  *
  * @return void
  */
 function saveInfo2(\PEAR2\Pyrus\Package $new, $releaser)
 {
     $xml            = $this->_getProlog('r', 'release2');
     $xml['r']['p']  = array(
             'attribs' => array(
             'xlink:href' =>
             $this->getPackageRESTLink(strtolower($new->name))
         ),
         '_content' => $new->name);
     $xml['r']['c']  = $this->channel;
     $category       = PEAR2_SimpleChannelServer_Categories::getPackageCategory($new->name);
     $xml['r']['v']  = $new->version['release'];
     $xml['r']['a']  = $new->version['api'];
     $xml['r']['mp'] = $new->dependencies['required']->php->min;
     $xml['r']['st'] = $new->stability['release'];
     $xml['r']['l']  = $new->license['name'];
     $xml['r']['m']  = $releaser;
     $xml['r']['s']  = $new->summary;
     $xml['r']['d']  = $new->description;
     $xml['r']['da'] = $new->date . ' ' . $new->time;
     $xml['r']['n']  = $new->notes;
     $xml['r']['f']  = filesize($new->archivefile);
     $xml['r']['g']  = 'http://' . $this->channel . '/get/' . $new->name .
         '-' . $new->version['release'];
     $xml['r']['x']  = array('attribs' => array(
         'xlink:href' => 'package.' . $new->version['release'] . '.xml'
     ));
     $this->saveReleaseREST(strtolower($new->name) . '/v2.' .
         $new->version['release'] . '.xml', $xml);
 }
示例#4
0
 /**
  * List all packages, or all packages in a category
  *
  * @param string|null $category null to list all packages
  *
  * @return array
  */
 function listPackages($category = null)
 {
     if ($category) {
         return PEAR2_SimpleChannelServer_Categories::packagesInCategory($category);
     }
     if (!file_exists($this->rest->getRESTPath('p', 'allpackages.xml'))) {
         return array();
     }
     try {
         $list = $reader->parse($this->rest->getRESTPath('p', 'allpackages.xml'));
     } catch (Exception $e) {
         throw new PEAR2_SimpleChannelServer_Exception('Unable to list packages', $e);
     }
     return $list['a']['p'];
 }
示例#5
0
    /**
     * Save packagesinfo.xml for a category
     *
     * @param string $category Category to update packages info for
     * 
     * @return void
     */
    function savePackagesInfo($category)
    {
        $xml  = array();
        $pdir = $this->rest . DIRECTORY_SEPARATOR . 'p';
        $rdir = $this->rest . DIRECTORY_SEPARATOR . 'r';

        $packages = PEAR2_SimpleChannelServer_Categories::packagesInCategory($category);
        $reader   = new \PEAR2\Pyrus\XMLParser;
        clearstatcache();
        $xml['pi'] = array();
        foreach ($packages as $package) {
            $next = array();
            if (!file_exists($pdir . DIRECTORY_SEPARATOR . strtolower($package['name']) .
                    DIRECTORY_SEPARATOR . 'info.xml')) {
                continue;
            }
            $f = $reader->parse($pdir . DIRECTORY_SEPARATOR . strtolower($package['name']) .
                    DIRECTORY_SEPARATOR . 'info.xml');
            unset($f['p']['attribs']);
            $next['p'] = $f['p'];
            if (file_exists($rdir . DIRECTORY_SEPARATOR . strtolower($package['name']) .
                    DIRECTORY_SEPARATOR . 'allreleases.xml')) {
                $r = $reader->parse($rdir . DIRECTORY_SEPARATOR .
                        strtolower($package['name']) . DIRECTORY_SEPARATOR .
                        'allreleases.xml');
                unset($r['a']['attribs']);
                unset($r['a']['p']);
                unset($r['a']['c']);
                $next['a'] = $r['a'];
                $dirhandle = opendir($rdir . DIRECTORY_SEPARATOR .
                    strtolower($package['name']));
                while (false !== ($entry = readdir($dirhandle))) {
                    if (strpos($entry, 'deps.') === 0) {
                        $version = str_replace(array('deps.', '.txt'), array('', ''), $entry);
                        
                        $next['deps']      = array();
                        $next['deps']['v'] = $version;
                        $next['deps']['d'] = file_get_contents($rdir . DIRECTORY_SEPARATOR .
                            strtolower($package['name']) . DIRECTORY_SEPARATOR .
                            $entry);
                    }
                }
            }
            $xml['pi'][] = $next;
        }
        $xmlinf        = $this->_getProlog('f', 'categorypackageinfo');
        $xmlinf['f'][] = $xml;
        $this->saveCategoryREST($category . DIRECTORY_SEPARATOR . 'packagesinfo.xml', $xmlinf);
    }
示例#6
0
 /**
  * called after serialized and woken up
  * 
  * @return void
  */
 function __wakeup()
 {
     self::$_category = $this;
 }