<?php

/**
 * This file allows for tests to be skipped.
 * For now conditions are simple.
 * We check if changes in the source with respect to the configured branch are limited to framework files,
 * if that is the case and the current framework isn't one with changed files then we skip it.
 */
$branch ="2.5";


function stderr($message)
{
    fwrite(STDERR, $message . "\n");
}

$currentFramework = getenv('FRAMEWORK');

if ($currentFramework === 'Codeception') {
    stderr('Codeception tests are always executed');
    die();
}
$files = [];
// Workaround for travis #4806
passthru("git fetch origin $branch:$branch --depth 1", $return);
if ($return !== 0) {
    stderr("Git fetch failed");
    die($return);
}

exec("git diff --name-only $branch --", $files, $return);
if ($return !== 0) {
    stderr("Git diff failed");
    die($return);
}
// Regexes for frameworks:
$regexes = [
    'Yii2' => '/.*Yii2.*/',
    'Lumen' => '/.*(Lumen|LaravelCommon).*/',
    'Laravel' => '/.*Laravel.*/',
    'Phalcon' => '/.*Phalcon.*/',
    'Symfony' => '/.*Symfony.*/',
    'Yii1' => '/.*Yii1.*/',
    'ZendExpressive' => '/.*ZendExpressive.*/',
    'Zend1' => '/.*ZF1.*/',
    'Zend2' => '/.*ZF2.*/',
];

// First check if changes include files that are not framework files.
$frameworkOnly = true;
$frameworks = [];
foreach ($files as $file) {
    $match = false;
    foreach ($regexes as $framework => $regex) {
        if (preg_match($regex, $file)) {
            $match = true;
            $frameworks[$framework] = $framework;
            break;
        }
    }
    if (!$match) {
        $frameworkOnly = false;
        break;
    }
}

if ($frameworkOnly) {
    stderr('Changes limited to frameworks: ' . implode(', ', $frameworks));
    if (!isset($frameworks[$currentFramework])) {
        stderr("Skipping test for framework: $currentFramework");
        echo "export FRAMEWORK=\n";
        echo "export PECL=\n";
        echo "export FXP=\n";
        echo "export CI_USER_TOKEN=\n";
    }
}
