bin/vendors
author ymh <ymh.work@gmail.com>
Sat, 24 Sep 2011 15:40:41 +0200
changeset 0 7f95f8617b0b
permissions -rwxr-xr-x
first commit
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
#!/usr/bin/env php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
<?php
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
/*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * This file is part of the Symfony Standard Edition.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 * (c) Fabien Potencier <fabien@symfony.com>
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 *
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 * For the full copyright and license information, please view the LICENSE
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * file that was distributed with this source code.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
$rootDir = dirname(__DIR__);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
$vendorDir = $rootDir.'/vendor';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
array_shift($argv);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
if (!isset($argv[0])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
    exit(<<<EOF
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
Symfony2 vendors script management.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
Specify a command to run:
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
 install: install vendors as specified in deps or deps.lock (recommended)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
 update:  update vendors to their latest versions (as specified in deps)
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
EOF
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
    );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
if (!in_array($command = array_shift($argv), array('install', 'update'))) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
    exit(sprintf("Command \"%s\" does not exist.\n", $command));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
/*
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
 * Check wether this project is based on the Standard Edition that was
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
 * shipped with vendors or not.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
 */
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
if (is_dir($vendorDir.'/symfony') && !is_dir($vendorDir.'/symfony/.git') && !in_array('--reinstall', $argv)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
    exit(<<<EOF
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
Your project seems to be based on a Standard Edition that includes vendors.
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
Try to run ./bin/vendors install --reinstall
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
EOF
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    );
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
if (!is_dir($vendorDir)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
    mkdir($vendorDir, 0777, true);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
// versions
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
$versions = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
if ('install' === $command && file_exists($rootDir.'/deps.lock')) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
    foreach (file($rootDir.'/deps.lock', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
        $parts = array_values(array_filter(explode(' ', $line)));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
        if (2 !== count($parts)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
            exit(sprintf('The deps version file is not valid (near "%s")', $line));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
        $versions[$parts[0]] = $parts[1];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
$newversions = array();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
$deps = parse_ini_file($rootDir.'/deps', true, INI_SCANNER_RAW);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
if (false === $deps) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    exit("The deps file is not valid ini syntax. Perhaps missing a trailing newline?\n");
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
foreach ($deps as $name => $dep) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
    $dep = array_map('trim', $dep);
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
    // revision
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
    if (isset($versions[$name])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        $rev = $versions[$name];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
    } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
        $rev = isset($dep['version']) ? $dep['version'] : 'origin/HEAD';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
    // install dir
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
    $installDir = isset($dep['target']) ? $vendorDir.'/'.$dep['target'] : $vendorDir.'/'.$name;
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
    if (in_array('--reinstall', $argv)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
        if (PHP_OS == 'WINNT') {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
            system(sprintf('rmdir /S /Q %s', escapeshellarg(realpath($installDir))));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
        } else {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
            system(sprintf('rm -rf %s', escapeshellarg($installDir)));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
        }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
    echo "> Installing/Updating $name\n";
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
    // url
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    if (!isset($dep['git'])) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
        exit(sprintf('The "git" value for the "%s" dependency must be set.', $name));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
    $url = $dep['git'];
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
    if (!is_dir($installDir)) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
        system(sprintf('git clone %s %s', escapeshellarg($url), escapeshellarg($installDir)));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
    system(sprintf('cd %s && git fetch origin && git reset --hard %s', escapeshellarg($installDir), escapeshellarg($rev)));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
    if ('update' === $command) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
        ob_start();
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
        system(sprintf('cd %s && git log -n 1 --format=%%H', escapeshellarg($installDir)));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
        $newversions[] = trim($name.' '.ob_get_clean());
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
    }
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
// update?
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
if ('update' === $command) {
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
    file_put_contents($rootDir.'/deps.lock', implode("\n", $newversions));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
}
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
// php on windows can't use the shebang line from system()
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
$interpreter = PHP_OS == 'WINNT' ? 'php.exe' : '';
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
// Update the bootstrap files
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
system(sprintf('%s %s', $interpreter, escapeshellarg($rootDir.'/vendor/bundles/Sensio/Bundle/DistributionBundle/Resources/bin/build_bootstrap.php')));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
// Update assets
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
system(sprintf('%s %s assets:install %s', $interpreter, escapeshellarg($rootDir.'/app/console'), escapeshellarg($rootDir.'/web/')));
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
// Remove the cache
7f95f8617b0b first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
system(sprintf('%s %s cache:clear --no-warmup', $interpreter, escapeshellarg($rootDir.'/app/console')));