ScriptHandler.php 1.37 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
<?php

/**
 * @file
 * Contains \Robo\composer\ScriptHandler.
 */

namespace Robo\composer;

use Composer\Script\Event;
use Symfony\Component\Filesystem\Filesystem;

class ScriptHandler
{

    /**
     * Run prior to `composer installl` when a composer.lock is present.
     * @param Event $event
     */
    public static function checkDependencies(Event $event)
    {
        if (version_compare(PHP_VERSION, '5.6.0') < 0) {
            static::checkDependenciesFor55();
        }
    }

    /**
     * Check to see if the dependencies in composer.lock are compatible
     * with php 5.5.
     */
    protected static function checkDependenciesFor55()
    {
        $fs = new Filesystem();
        if (!$fs->exists('composer.lock')) {
            return;
        }

        $composerLockContents = file_get_contents('composer.lock');
        if (preg_match('#"php":.*(5\.6)#', $composerLockContents)) {
            static::fixDependenciesFor55();
        }
    }

    protected static function fixDependenciesFor55()
    {
        $fs = new Filesystem();
        $status = 0;

        $fs->remove('composer.lock');

        // Composer has already read our composer.json file, so we will
        // need to run in a new process to fix things up.
        passthru('composer install --ansi', $status);

        // Don't continue with the initial 'composer install' command
        exit($status);
    }
}