protected function execute(InputInterface $input, OutputInterface $output)
{
$verbose = $output->getVerbosity();
$path = $input->getArgument('path');
$dryRun = $input->getOption('dry-run');
$fileFinder = new FileFinder();
$configLoader = new ConfigLoader();
$configFinder = new ConfigFinder();
/**
* This section is just for finding the right values to work with in
* this execution.
*
* $options array will have, after this block, all these values
*/
$configPath = rtrim($input->getOption('config'), DIRECTORY_SEPARATOR);
$header = $configLoader->loadConfigValue(self::COMMAND_NAME, $configFinder->findConfigFile($configPath));
if (empty($header)) {
throw new Exception('Header definition must be defined in .formatter.yml file under header');
}
/**
* Building the real directory or file to work in.
*/
$filesystem = new Filesystem();
if (!$filesystem->isAbsolutePath($path)) {
$path = getcwd() . DIRECTORY_SEPARATOR . $path;
}
if (!is_file($path) && !is_dir($path)) {
throw new Exception('Directory or file "' . $path . '" does not exist');
}
/*
* Dry-run message
*/
if ($dryRun && $verbose >= OutputInterface::VERBOSITY_VERBOSE) {
$output->writeln('# This process has been executed in mode dry-run');
}
if ($verbose >= OutputInterface::VERBOSITY_VERBOSE) {
$output->writeln('# Executing process in ' . $path);
}
/**
* Creates the new HeaderFixer.
*/
$headerFixer = new HeaderFixer($header);
$files = $fileFinder->findPHPFilesByPath($path);
/*
* If verbose level is higher or equal than -vv, we print the config
* file data, if is not empty.
*/
if ($verbose >= OutputInterface::VERBOSITY_VERBOSE) {
$output->writeln("# Header used:\n\n" . $header);
}
$output->writeln('#');
/*
* Each found php file is processed
*/
foreach ($files as $file) {
$data = $file->getContents();
$result = $headerFixer->fix($data);
if ($result === false || $data === $result) {
continue;
}
if ($verbose >= OutputInterface::VERBOSITY_NORMAL) {
$output->writeln('# ' . $file);
}
if (!$dryRun) {
file_put_contents($file->getRealPath(), $result);
}
}
}