define('STYLE_SUCCESS', 32);
if (flagIsSet('packages-path')) {
    define('FLOW_PATH_PACKAGES', getFlagValue('packages-path'));
} else {
    define('FLOW_PATH_PACKAGES', FLOW_PATH_ROOT . 'Packages/');
}
if (\Neos\Flow\Core\Migrations\Git::isGitAvailable() === false) {
    outputLine('No executable git binary found, exiting.');
    exit(255);
}
$migrationsManager = new Manager();
$packageKey = getFlagValue('package-key');
$versionNumber = null;
if (flagIsSet('version')) {
    if (preg_match('/[0-9]{12,14}/', getFlagValue('version'), $matches) !== 1) {
        outputLine('EXCEPTION: invalid version "%s" specified, please provide the 12 or 14 digit timestamp of the version you want to target.', array(getFlagValue('version')), 0, STYLE_ERROR);
        exit(255);
    }
    $versionNumber = $matches[0];
    // see https://jira.neos.io/browse/FLOW-110
    if (strlen($versionNumber) === 12) {
        $versionNumber .= '00';
    }
}
$verbose = flagIsSet('verbose');
if (flagIsSet('status')) {
    outputLine('Fetching migration status...');
    try {
        $status = $migrationsManager->getStatus($packageKey, $versionNumber);
    } catch (\Exception $exception) {
        outputLine('EXCEPTION: %s', array($exception->getMessage()), 0, STYLE_ERROR);
}
$migrationsManager = new \TYPO3\Flow\Core\Migrations\Manager();
if (flagIsSet('status')) {
    $status = $migrationsManager->getStatus();
    $output = PHP_EOL . ' == Migration status' . PHP_EOL;
    foreach ($status as $packageKey => $migrations) {
        $output .= PHP_EOL . ' ==  for ' . $packageKey . PHP_EOL;
        foreach ($migrations as $versionNumber => $migration) {
            $status = $migration['state'] === \TYPO3\Flow\Core\Migrations\Manager::STATE_MIGRATED ? 'migrated' : 'not migrated';
            $output .= '    >> ' . formatVersion($versionNumber) . ' (' . $migration['source'] . ')' . str_repeat(' ', 30 - strlen($status)) . $status . PHP_EOL;
        }
    }
    echo $output;
    exit(0);
}
$migrationsManager->migrate(getFlagValue('package-key'));
/**
 * Check if the given flag is in $GLOBALS['argv'].
 *
 * @param string $flag
 * @return boolean
 */
function flagIsSet($flag)
{
    return in_array('--' . $flag, $GLOBALS['argv']);
}
/**
 * Get the value of the given flag from $GLOBALS['argv'].
 *
 * @param $flag
 * @return mixed