| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 | 
							- #!/usr/bin/env php
 
- <?php
 
- namespace vierbergenlars\SemVer\Application\UpdateVersions;
 
- if (file_exists(__DIR__ . '/../vendor/autoload.php')) {
 
-     require_once __DIR__ . '/../vendor/autoload.php';
 
- } else {
 
-     if (file_exists(__DIR__ . '/../../../autoload.php')) {
 
-         require_once __DIR__ . '/../../../autoload.php';
 
-     }
 
- }
 
- use vierbergenlars\SemVer\version;
 
- use vierbergenlars\SemVer\expression;
 
- use vierbergenlars\SemVer\SemVerException;
 
- //Defaults
 
- /**
 
-  * Input file containing the version
 
-  * @var string
 
-  */
 
- $input = 'composer.json';
 
- /**
 
-  * Array of paths to write to
 
-  * @var array
 
-  */
 
- $writeto = array();
 
- /**
 
-  * Root directory
 
-  * @var string
 
-  */
 
- $root = '.';
 
- /**
 
-  * Do not do anything
 
-  * @var bool
 
-  */
 
- $dry_run = false;
 
- /**
 
-  * Shell command to execute for each updated file
 
-  * @var string
 
-  */
 
- $shell = NULL;
 
- // Get all arguments
 
- while (\count($argv) > 0) {
 
-     $arg = \array_shift($argv);
 
-     switch ($arg) {
 
-         case '-p':
 
-         case '--package':
 
-             $input = \array_shift($argv);
 
-             break;
 
-         case '-s':
 
-         case '--source':
 
-             $writeto[] = \array_shift($argv);
 
-             break;
 
-         case '-b':
 
-         case '--base':
 
-             $root = \array_shift($argv);
 
-             break;
 
-         case '--dry-run':
 
-             $dry_run = true;
 
-             break;
 
-         case '--shell':
 
-             $shell = \array_shift($argv);
 
-             break;
 
-         case '-h':
 
-         case '--help':
 
-             help();
 
-     }
 
- }
 
- //Defaults writeto
 
- if ($writeto === array()) {
 
-     $writeto = array('src', 'bin');
 
- }
 
- //Add root paths
 
- $input = $root . '/' . $input;
 
- foreach ($writeto as &$write) {
 
-     $write = $root . '/' . $write;
 
- }
 
- //Read those JSON files
 
- if (!\file_exists($input))
 
-     fail('Package file does not exist');
 
- $input = \json_decode(\file_get_contents($input), true);
 
- if (!$input) {
 
-     fail('Invalid JSON file!');
 
- }
 
- //Initialize the version from package file
 
- try {
 
-     $version = new version($input['version']);
 
- } catch (SemVerException $e) {
 
-     fail($e->getMessage());
 
- }
 
- $version = $version->getString();
 
- foreach ($writeto as $output) {
 
-     $dir = new \RecursiveIteratorIterator(new \RecursiveDirectoryIterator($output));
 
-     foreach ($dir as $file) {
 
-         if (\preg_match('/[\\\\\\/]\\./', $file))
 
-             continue; //Ignore . directories
 
-         $contents1 = \file_get_contents($file);
 
-         $contents2 = \str_replace(array('2.0.0--', '{{{' . 'version}}}'), $version, $contents1);
 
-         if ($contents1 != $contents2) {
 
-             fwrite(\STDOUT, 'Writing version information to file ' . $file . \PHP_EOL);
 
-             if ($shell !== null) {
 
-                 \system($shell . ' "' . $file . '"', $exit_code);
 
-                 if ($exit_code != 0)
 
-                     fail('Subshell exited ' . $exit_code);
 
-             }
 
-             if ($dry_run) {
 
-                 \fwrite(\STDOUT, '\\_Not writing to disk' . \PHP_EOL);
 
-             } else {
 
-                 \file_put_contents($file, $contents2);
 
-             }
 
-         }
 
-     }
 
- }
 
- function help() {
 
-     $e = array(
 
-         'Usage: update-versions [options]'
 
-         , ''
 
-         , '  -p <composerfile>          Use this file as composer.json file'
 
-         , '  --package <composerfile>'
 
-         , '  -s <dir>                   Add directory to sources to scan. May be repeated.'
 
-         , '  --source <dir>'
 
-         , '  -b <dir>                   Use this directory as base directory.'
 
-         , '  --base <dir>'
 
-         , '  --shell <command>          Execute <command> for each changed file.'
 
-         , '  --dry-run                  Do not write files.'
 
-         , ''
 
-         , 'This program exits 0 on success or 1 on failure.'
 
-         , 'Defaults to "--package composer.json --source src --source bin --base ."'
 
-     );
 
-     echo \implode(PHP_EOL, $e);
 
-     exit;
 
- }
 
- function fail($message = '') {
 
-     \fwrite(\STDERR, $message . \PHP_EOL);
 
-     exit(1);
 
- }
 
 
  |