_getDepPackageDownloadUrl() public method

public _getDepPackageDownloadUrl ( $dep, $parr )
Esempio n. 1
0
 function _detect1($deps, $pname, $options, $params)
 {
     $this->_downloadDeps = array();
     $skipnames = array();
     foreach ($deps as $dep) {
         $nodownload = false;
         if ($dep['type'] == 'pkg') {
             $dep['channel'] = 'pear.php.net';
             $dep['package'] = $dep['name'];
             switch ($dep['rel']) {
                 case 'not':
                     continue 2;
                 case 'ge':
                 case 'eq':
                 case 'gt':
                 case 'has':
                     $group = !isset($dep['optional']) || $dep['optional'] == 'no' ? 'required' : 'optional';
                     if (PEAR_Downloader_Package::willDownload($dep, $params)) {
                         $this->_downloader->log(2, $this->getShortName() . ': Skipping ' . $group . ' dependency "' . $this->_registry->parsedPackageNameToString($dep, true) . '", will be installed');
                         continue 2;
                     }
                     $fakedp = new PEAR_PackageFile_v1();
                     $fakedp->setPackage($dep['name']);
                     // skip internet check if we are not upgrading (bug #5810)
                     if (!isset($options['upgrade']) && $this->isInstalled($fakedp, $dep['rel'])) {
                         $this->_downloader->log(2, $this->getShortName() . ': Skipping ' . $group . ' dependency "' . $this->_registry->parsedPackageNameToString($dep, true) . '", is already installed');
                         continue 2;
                     }
             }
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
             if ($this->_explicitState) {
                 $pname['state'] = $this->_explicitState;
             }
             $url = $this->_downloader->_getDepPackageDownloadUrl($dep, $pname);
             $chan = 'pear.php.net';
             if (PEAR::isError($url)) {
                 // check to see if this is a pecl package that has jumped
                 // from pear.php.net to pecl.php.net channel
                 if (!class_exists('PEAR_Dependency2')) {
                     require_once 'PEAR/Dependency2.php';
                 }
                 $newdep = PEAR_Dependency2::normalizeDep($dep);
                 $newdep = $newdep[0];
                 $newdep['channel'] = 'pecl.php.net';
                 $chan = 'pecl.php.net';
                 $url = $this->_downloader->_getDepPackageDownloadUrl($newdep, $pname);
                 $obj =& $this->_registry->getPackage($dep['name']);
                 if (PEAR::isError($url)) {
                     PEAR::popErrorHandling();
                     if ($obj !== null && $this->isInstalled($obj, $dep['rel'])) {
                         $group = !isset($dep['optional']) || $dep['optional'] == 'no' ? 'required' : 'optional';
                         $dep['package'] = $dep['name'];
                         if (!isset($options['soft'])) {
                             $this->_downloader->log(3, $this->getShortName() . ': Skipping ' . $group . ' dependency "' . $this->_registry->parsedPackageNameToString($dep, true) . '", already installed as version ' . $obj->getVersion());
                         }
                         if (@$skipnames[count($skipnames) - 1] == $this->_registry->parsedPackageNameToString($dep, true)) {
                             array_pop($skipnames);
                         }
                         continue;
                     } else {
                         if (isset($dep['optional']) && $dep['optional'] == 'yes') {
                             $this->_downloader->log(2, $this->getShortName() . ': Skipping ' . $group . ' dependency "' . $this->_registry->parsedPackageNameToString($dep, true) . '", no releases exist');
                             continue;
                         } else {
                             return $url;
                         }
                     }
                 }
             }
             PEAR::popErrorHandling();
             if (!isset($options['alldeps'])) {
                 if (isset($dep['optional']) && $dep['optional'] == 'yes') {
                     if (!isset($options['soft'])) {
                         $this->_downloader->log(3, 'Notice: package "' . $this->getShortName() . '" optional dependency "' . $this->_registry->parsedPackageNameToString(array('channel' => $chan, 'package' => $dep['name']), true) . '" will not be automatically downloaded');
                     }
                     $skipnames[] = $this->_registry->parsedPackageNameToString(array('channel' => $chan, 'package' => $dep['name']), true);
                     $nodownload = true;
                 }
             }
             if (!isset($options['alldeps']) && !isset($options['onlyreqdeps'])) {
                 if (!isset($dep['optional']) || $dep['optional'] == 'no') {
                     if (!isset($options['soft'])) {
                         $this->_downloader->log(3, 'Notice: package "' . $this->getShortName() . '" required dependency "' . $this->_registry->parsedPackageNameToString(array('channel' => $chan, 'package' => $dep['name']), true) . '" will not be automatically downloaded');
                     }
                     $skipnames[] = $this->_registry->parsedPackageNameToString(array('channel' => $chan, 'package' => $dep['name']), true);
                     $nodownload = true;
                 }
             }
             // check to see if a dep is already installed
             // do not try to move this before getDepPackageDownloadURL
             // we can't determine whether upgrade is necessary until we know what
             // version would be downloaded
             if (!isset($options['force']) && $this->isInstalled($url, $dep['rel'])) {
                 $group = !isset($dep['optional']) || $dep['optional'] == 'no' ? 'required' : 'optional';
                 $dep['package'] = $dep['name'];
                 if (isset($newdep)) {
                     $version = $this->_registry->packageInfo($newdep['name'], 'version', $newdep['channel']);
                 } else {
                     $version = $this->_registry->packageInfo($dep['name'], 'version');
                 }
                 $dep['version'] = $url['version'];
                 if (!isset($options['soft'])) {
                     $this->_downloader->log(3, $this->getShortName() . ': Skipping ' . $group . ' dependency "' . $this->_registry->parsedPackageNameToString($dep, true) . '", already installed as version ' . $version);
                 }
                 if (@$skipnames[count($skipnames) - 1] == $this->_registry->parsedPackageNameToString($dep, true)) {
                     array_pop($skipnames);
                 }
                 continue;
             }
             if ($nodownload) {
                 continue;
             }
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
             if (isset($newdep)) {
                 $dep = $newdep;
             }
             $dep['package'] = $dep['name'];
             $ret = $this->_analyzeDownloadURL($url, 'dependency', $dep, $params, isset($dep['optional']) && $dep['optional'] == 'yes' && !isset($options['alldeps']));
             PEAR::popErrorHandling();
             if (PEAR::isError($ret)) {
                 if (!isset($options['soft'])) {
                     $this->_downloader->log(0, $ret->getMessage());
                 }
                 continue;
             }
             $this->_downloadDeps[] = $ret;
         }
     }
     if (count($skipnames)) {
         if (!isset($options['soft'])) {
             $this->_downloader->log(1, 'Did not download dependencies: ' . implode(', ', $skipnames) . ', use --alldeps or --onlyreqdeps to download automatically');
         }
     }
 }
Esempio n. 2
0
 function _detect1($deps, $pname, $options, $params)
 {
     $skipnames = array();
     foreach ($deps as $dep) {
         $nodownload = false;
         if ($dep['type'] == 'pkg') {
             $dep['channel'] = 'pear.php.net';
             $dep['package'] = $dep['name'];
             switch ($dep['rel']) {
                 case 'not':
                     continue 2;
                 case 'ge':
                 case 'eq':
                 case 'gt':
                 case 'has':
                     if (PEAR_Downloader_Package::willDownload($dep, $params)) {
                         $group = !isset($dep['optional']) || $dep['optional'] == 'no' ? 'required' : 'optional';
                         $this->_downloader->log(2, 'Skipping ' . $group . ' dependency "' . $this->_registry->parsedPackageNameToString($dep, true) . '", will be installed');
                         continue 2;
                     }
             }
             if (!isset($options['alldeps'])) {
                 if (isset($dep['optional']) && $dep['optional'] == 'yes') {
                     if (!isset($options['soft'])) {
                         $this->_downloader->log(3, 'Notice: package "' . $this->_registry->parsedPackageNameToString(array('channel' => 'pear.php.net', 'package' => $this->getPackage()), true) . '" optional dependency "' . $this->_registry->parsedPackageNameToString(array('channel' => 'pear.php.net', 'package' => $dep['name']), true) . '" will not be automatically downloaded');
                     }
                     $skipnames[] = $this->_registry->parsedPackageNameToString(array('channel' => 'pear.php.net', 'package' => $dep['name']), true);
                     $nodownload = true;
                 }
             }
             if (!isset($options['alldeps']) && !isset($options['onlyreqdeps'])) {
                 if (!isset($dep['optional']) || $dep['optional'] == 'no') {
                     if (!isset($options['soft'])) {
                         $this->_downloader->log(3, 'Notice: package "' . $this->_registry->parsedPackageNameToString(array('channel' => 'pear.php.net', 'package' => $this->getPackage()), true) . '" required dependency "' . $this->_registry->parsedPackageNameToString(array('channel' => 'pear.php.net', 'package' => $dep['name']), true) . '" will not be automatically downloaded');
                     }
                     $skipnames[] = $this->_registry->parsedPackageNameToString(array('channel' => 'pear.php.net', 'package' => $dep['name']), true);
                     $nodownload = true;
                 }
             }
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
             if ($this->_explicitState) {
                 $pname['state'] = $this->_explicitState;
             }
             $url = $this->_downloader->_getDepPackageDownloadUrl($dep, $pname);
             if (PEAR::isError($url)) {
                 PEAR::popErrorHandling();
                 return $url;
             }
             PEAR::popErrorHandling();
             // check to see if a dep is already installed
             // do not try to move this before getDepPackageDownloadURL
             // we can't determine whether upgrade is necessary until we know what
             // version would be downloaded
             if (!isset($options['force']) && $this->isInstalled($url, $dep['rel'])) {
                 $group = !isset($dep['optional']) || $dep['optional'] == 'no' ? 'required' : 'optional';
                 $dep['package'] = $dep['name'];
                 $version = $this->_registry->packageInfo($dep['name'], 'version');
                 $dep['version'] = $url['version'];
                 if (!isset($options['soft'])) {
                     $this->_downloader->log(3, 'Skipping ' . $group . ' dependency "' . $this->_registry->parsedPackageNameToString($dep, true) . '", already installed as version ' . $version);
                 }
                 if (@$skipnames[count($skipnames) - 1] == $this->_registry->parsedPackageNameToString(array('channel' => 'pear.php.net', 'package' => $dep['name']), true)) {
                     array_pop($skipnames);
                 }
                 continue;
             }
             if ($nodownload) {
                 continue;
             }
             PEAR::pushErrorHandling(PEAR_ERROR_RETURN);
             $dep['package'] = $dep['name'];
             $ret = $this->_analyzeDownloadURL($url, 'dependency', $dep, $params);
             PEAR::popErrorHandling();
             if (PEAR::isError($ret)) {
                 if (!isset($options['soft'])) {
                     $this->_downloader->log(0, $ret->getMessage());
                 }
                 continue;
             }
             $this->_downloadDeps[] = $ret;
         }
     }
     if (count($skipnames)) {
         if (!isset($options['soft'])) {
             $this->_downloader->log(1, 'Did not download dependencies: ' . implode(', ', $skipnames) . ', use --alldeps or --onlyreqdeps to download automatically');
         }
     }
 }