| 
<?php/*
 * This file is part of the Version package.
 *
 * (c) Sebastian Bergmann <[email protected]>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */
 
 namespace SebastianBergmann;
 
 /**
 * @since Class available since Release 1.0.0
 */
 class Version
 {
 /**
 * @var string
 */
 private $path;
 
 /**
 * @var string
 */
 private $release;
 
 /**
 * @var string
 */
 private $version;
 
 /**
 * @param string $release
 * @param string $path
 */
 public function __construct($release, $path)
 {
 $this->release = $release;
 $this->path    = $path;
 }
 
 /**
 * @return string
 */
 public function getVersion()
 {
 if ($this->version === null) {
 if (count(explode('.', $this->release)) == 3) {
 $this->version = $this->release;
 } else {
 $this->version = $this->release . '-dev';
 }
 
 $git = $this->getGitInformation($this->path);
 
 if ($git) {
 if (count(explode('.', $this->release)) == 3) {
 $this->version = $git;
 } else {
 $git = explode('-', $git);
 
 $this->version = $this->release . '-' . end($git);
 }
 }
 }
 
 return $this->version;
 }
 
 /**
 * @param string $path
 *
 * @return bool|string
 */
 private function getGitInformation($path)
 {
 if (!is_dir($path . DIRECTORY_SEPARATOR . '.git')) {
 return false;
 }
 
 $process = proc_open(
 'git describe --tags',
 [
 1 => ['pipe', 'w'],
 2 => ['pipe', 'w'],
 ],
 $pipes,
 $path
 );
 
 if (!is_resource($process)) {
 return false;
 }
 
 $result = trim(stream_get_contents($pipes[1]));
 
 fclose($pipes[1]);
 fclose($pipes[2]);
 
 $returnCode = proc_close($process);
 
 if ($returnCode !== 0) {
 return false;
 }
 
 return $result;
 }
 }
 
 |