123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217 |
- <?php
- require_once 'phing/Task.php';
- class VersionTask extends Task
- {
-
- private $releasetype;
-
- private $file;
-
- private $property;
-
- const RELEASETYPE_MAJOR = 'MAJOR';
- const RELEASETYPE_MINOR = 'MINOR';
- const RELEASETYPE_BUGFIX = 'BUGFIX';
-
- public function setReleasetype($releasetype)
- {
- $this->releasetype = strtoupper($releasetype);
- }
-
- public function setFile($file)
- {
- $this->file = $file;
- }
-
- public function setProperty($property)
- {
- $this->property = $property;
- }
-
- public function main()
- {
-
- $this->checkReleasetype();
- $this->checkFile();
- $this->checkProperty();
-
- $filecontent = file_get_contents($this->file);
-
- $newVersion = $this->getVersion($filecontent);
-
- file_put_contents($this->file, $newVersion);
-
- $this->project->setProperty($this->property, $newVersion);
- }
-
- private function getVersion($filecontent)
- {
-
- $newVersion = '';
-
- list($major, $minor, $bugfix) = explode(".", $filecontent);
-
- switch ($this->releasetype) {
- case self::RELEASETYPE_MAJOR:
- $newVersion = sprintf("%d.%d.%d", ++$major,
- 0,
- 0);
- break;
- case self::RELEASETYPE_MINOR:
- $newVersion = sprintf("%d.%d.%d", $major,
- ++$minor,
- 0);
- break;
- case self::RELEASETYPE_BUGFIX:
- $newVersion = sprintf("%d.%d.%d", $major,
- $minor,
- ++$bugfix);
- break;
- }
- return $newVersion;
- }
-
- private function checkReleasetype()
- {
-
- if (is_null($this->releasetype)) {
- throw new BuildException('releasetype attribute is required', $this->location);
- }
-
- $releaseTypes = array(
- self::RELEASETYPE_MAJOR,
- self::RELEASETYPE_MINOR,
- self::RELEASETYPE_BUGFIX
- );
- if (!in_array($this->releasetype, $releaseTypes)) {
- throw new BuildException(sprintf('Unknown Releasetype %s..Must be one of Major, Minor or Bugfix',
- $this->releasetype), $this->location);
- }
- }
-
- private function checkFile()
- {
-
- if ($this->file === null ||
- strlen($this->file) == 0) {
- throw new BuildException('You must specify a file containing the version number', $this->location);
- }
- $content = file_get_contents($this->file);
- if (strlen($content) == 0) {
- throw new BuildException(sprintf('Supplied file %s is empty', $this->file), $this->location);
- }
-
- $split = explode('.', $content);
- if (count($split) !== 3) {
- throw new BuildException('Unknown version number format', $this->location);
- }
- }
-
- private function checkProperty()
- {
- if (is_null($this->property) ||
- strlen($this->property) === 0) {
- throw new BuildException('Property for publishing version number is not set', $this->location);
- }
- }
- }
|