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