manager = $manager; parent::__construct(); } /** * {@inheritdoc} */ protected function configure() { $this ->setDescription('Manually bump the application version') ->addArgument('version', InputArgument::OPTIONAL, 'Version to set, should be compatible with Semantic versioning 2.0.0', null) ->addOption('dry-run', 'd', InputOption::VALUE_NONE, 'Dry run, does not update VERSION file') ->addOption('major', null, InputOption::VALUE_OPTIONAL, 'Bump MAJOR version by given number', 0) ->addOption('minor', null, InputOption::VALUE_OPTIONAL, 'Bump MINOR version by given number', 0) ->addOption('patch', null, InputOption::VALUE_OPTIONAL, 'Bump PATCH version by given number', 0) ->addOption('prerelease', null, InputOption::VALUE_IS_ARRAY | InputOption::VALUE_OPTIONAL, 'Add PRERELEASE to version', array()) ->addOption('build', null, InputOption::VALUE_IS_ARRAY | InputOption::VALUE_OPTIONAL, 'Add BUILD to version', array()); } /** * Manually bump the application version */ protected function execute(InputInterface $input, OutputInterface $output) { if ($input->getArgument('version') === null) { $version = $this->manager->getVersionFromProvider(); $output->writeln(sprintf('Provider: %s', get_class($this->manager->getActiveProvider()))); $formatter = $this->manager->getFormatter(); if ($formatter instanceof FormatterInterface) { $output->writeln(sprintf('Formatter: %s', get_class($formatter))); } else { $output->writeln(sprintf('Formatter: %s', 'None')); } } else { $version = Version::fromString($input->getArgument('version')); $output->writeln(sprintf('Provider: %s', 'Symfony command')); $output->writeln(sprintf('Formatter: %s', 'Not available')); } // Used for BC compatibility with nikolaposa/version 2.2 $isNikolaposaVersion2 = method_exists($version, 'withMajorIncremented'); $incrementMajor = (int) $input->getOption('major'); if ($incrementMajor > 0) { for ($i = 0; $i < $incrementMajor; $i++) { $version = $isNikolaposaVersion2 ? $version->withMajorIncremented() : $version->incrementMajor(); } } $incrementMinor = (int) $input->getOption('minor'); if ($incrementMinor > 0) { for ($i = 0; $i < $incrementMinor; $i++) { $version = $isNikolaposaVersion2 ? $version->withMinorIncremented() : $version->incrementMinor(); } } $incrementPatch = (int) $input->getOption('patch'); if ($incrementPatch > 0) { for ($i = 0; $i < $incrementPatch; $i++) { $version = $isNikolaposaVersion2 ? $version->withPatchIncremented() : $version->incrementPatch(); } } $preRelease = $input->getOption('prerelease'); if (!empty($preRelease)) { if (in_array(null, $preRelease, true)) { $preRelease = $isNikolaposaVersion2 ? array() : null; } else { $preRelease = implode('.', $preRelease); } $version = $version->withPreRelease($preRelease); } $build = $input->getOption('build'); if (!empty($build)) { if (in_array(null, $build, true)) { $build = $isNikolaposaVersion2 ? array() : null; } else { $build = implode('.', $build); } $version = $version->withBuild($build); } $currentVersion = $this->manager->getVersion(); if ((string) $currentVersion === (string) $version) { $version = $isNikolaposaVersion2 ? $version->withPatchIncremented() : $version->incrementPatch(); } $output->writeln(sprintf('Current version: %s', $currentVersion)); $output->writeln(sprintf('New version: %s', $version)); if ($input->getOption('dry-run')) { $output->writeln(sprintf('%s', 'Dry run, skipping version bump')); } else { $this->manager->writeVersion($version); } return 0; } }