/**
  * @param PharAlias $alias
  *
  * @return ReleaseCollection
  */
 public function getReleases(PharAlias $alias)
 {
     $releases = new ReleaseCollection();
     $query = sprintf('//phive:phar[@name="%s"]/phive:release', $alias);
     foreach ($this->getXPath()->query($query) as $releaseNode) {
         /** @var \DOMElement $releaseNode */
         $releases->add(new Release(new Version($releaseNode->getAttribute('version')), new Url($releaseNode->getAttribute('url')), $this->getHash($releaseNode)));
     }
     return $releases;
 }
 /**
  * @param string $directory
  *
  * @return ReleaseCollection
  */
 public function collect($directory)
 {
     $releases = new ReleaseCollection();
     foreach (new \GlobIterator($directory . '/*.phar') as $file) {
         if (!$file->isLink() && stripos($file->getBasename(), 'alpha') === false && stripos($file->getBasename(), 'beta') === false) {
             $parts = explode('-', $file->getBasename('.phar'));
             $version = array_pop($parts);
             $versionSeries = implode('.', array_slice(explode('.', $version), 0, 2));
             $name = implode('-', $parts);
             $manifest = [];
             if (file_exists('phar://' . $file->getPathname() . '/manifest.txt')) {
                 $manifest = file('phar://' . $file->getPathname() . '/manifest.txt');
             } elseif (file_exists('phar://' . $file->getPathname() . '/phar/manifest.txt')) {
                 $manifest = file('phar://' . $file->getPathname() . '/phar/manifest.txt');
             } elseif (is_executable($file->getPathname()) && strpos(file_get_contents($file->getPathname()), '--manifest')) {
                 @exec($file->getPathname() . ' --manifest 2> /dev/null', $manifest);
             }
             $releases->add(new Release($name, $version, $versionSeries, $manifest, date(DATE_W3C, $file->getMTime()), $this->humanFilesize($file->getSize()), hash_file('sha256', $file->getPathname())));
         }
     }
     return $releases;
 }