Minor dependency updates
[yaffs-website] / vendor / sebastian / version / src / Version.php
1 <?php
2 /*
3  * This file is part of the Version package.
4  *
5  * (c) Sebastian Bergmann <sebastian@phpunit.de>
6  *
7  * For the full copyright and license information, please view the LICENSE
8  * file that was distributed with this source code.
9  */
10
11 namespace SebastianBergmann;
12
13 /**
14  * @since Class available since Release 1.0.0
15  */
16 class Version
17 {
18     private $path;
19     private $release;
20     private $version;
21
22     /**
23      * @param string $release
24      * @param string $path
25      */
26     public function __construct($release, $path)
27     {
28         $this->release = $release;
29         $this->path    = $path;
30     }
31
32     /**
33      * @return string
34      */
35     public function getVersion()
36     {
37         if ($this->version === null) {
38             if (count(explode('.', $this->release)) == 3) {
39                 $this->version = $this->release;
40             } else {
41                 $this->version = $this->release . '-dev';
42             }
43
44             $git = $this->getGitInformation($this->path);
45
46             if ($git) {
47                 if (count(explode('.', $this->release)) == 3) {
48                     $this->version = $git;
49                 } else {
50                     $git = explode('-', $git);
51
52                     $this->version = $this->release . '-' . end($git);
53                 }
54             }
55         }
56
57         return $this->version;
58     }
59
60     /**
61      * @param  string      $path
62      * @return bool|string
63      */
64     private function getGitInformation($path)
65     {
66         if (!is_dir($path . DIRECTORY_SEPARATOR . '.git')) {
67             return false;
68         }
69
70         $dir = getcwd();
71         chdir($path);
72         $returnCode = 1;
73         $result     = @exec('git describe --tags 2>&1', $output, $returnCode);
74         chdir($dir);
75
76         if ($returnCode !== 0) {
77             return false;
78         }
79
80         return $result;
81     }
82 }