Empty Symfony install with no vendors and the Acme Bundle deleted Signed-off-by: Gergely POLONKAI (W00d5t0ck) <polesz@w00d5t0ck.info>
		
			
				
	
	
		
			155 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			155 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
	
	
| #!/usr/bin/env php
 | |
| <?php
 | |
| 
 | |
| /*
 | |
|  * This file is part of the Symfony Standard Edition.
 | |
|  *
 | |
|  * (c) Fabien Potencier <fabien@symfony.com>
 | |
|  *
 | |
|  * For the full copyright and license information, please view the LICENSE
 | |
|  * file that was distributed with this source code.
 | |
|  */
 | |
| 
 | |
| set_time_limit(0);
 | |
| 
 | |
| $rootDir = dirname(__DIR__);
 | |
| $vendorDir = $rootDir.'/vendor';
 | |
| 
 | |
| array_shift($argv);
 | |
| if (!isset($argv[0])) {
 | |
|     exit(<<<EOF
 | |
| Symfony2 vendors script management.
 | |
| 
 | |
| Specify a command to run:
 | |
| 
 | |
|  install: install vendors as specified in deps or deps.lock (recommended)
 | |
|  update:  update vendors to their latest versions (as specified in deps)
 | |
|  lock:  lock vendors to their current versions
 | |
| 
 | |
| EOF
 | |
|     );
 | |
| }
 | |
| 
 | |
| if (!in_array($command = array_shift($argv), array('install', 'update', 'lock'))) {
 | |
|     exit(sprintf('Command "%s" does not exist.', $command).PHP_EOL);
 | |
| }
 | |
| 
 | |
| /*
 | |
|  * Check wether this project is based on the Standard Edition that was
 | |
|  * shipped with vendors or not.
 | |
|  */
 | |
| if (is_dir($vendorDir.'/symfony') && !is_dir($vendorDir.'/symfony/.git') && !in_array('--reinstall', $argv)) {
 | |
|     exit(<<<EOF
 | |
| Your project seems to be based on a Standard Edition that includes vendors.
 | |
| 
 | |
| Try to run ./bin/vendors install --reinstall
 | |
| 
 | |
| 
 | |
| EOF
 | |
|     );
 | |
| }
 | |
| 
 | |
| if (!is_dir($vendorDir)) {
 | |
|     mkdir($vendorDir, 0777, true);
 | |
| }
 | |
| 
 | |
| // versions
 | |
| $versions = array();
 | |
| if ('install' === $command && file_exists($rootDir.'/deps.lock')) {
 | |
|     foreach (file($rootDir.'/deps.lock', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES) as $line) {
 | |
|         $parts = array_values(array_filter(explode(' ', $line)));
 | |
|         if (2 !== count($parts)) {
 | |
|             exit(sprintf('The deps version file is not valid (near "%s")', $line).PHP_EOL);
 | |
|         }
 | |
|         $versions[$parts[0]] = $parts[1];
 | |
|     }
 | |
| }
 | |
| 
 | |
| $newversions = array();
 | |
| $deps = parse_ini_file($rootDir.'/deps', true, INI_SCANNER_RAW);
 | |
| if (false === $deps) {
 | |
|     exit('The deps file is not valid ini syntax. Perhaps missing a trailing newline?'.PHP_EOL);
 | |
| }
 | |
| foreach ($deps as $name => $dep) {
 | |
|     $dep = array_map('trim', $dep);
 | |
| 
 | |
|     // install dir
 | |
|     $installDir = isset($dep['target']) ? $vendorDir.'/'.$dep['target'] : $vendorDir.'/'.$name;
 | |
|     if (in_array('--reinstall', $argv) && realpath($installDir)) {
 | |
|         if (defined('PHP_WINDOWS_VERSION_BUILD')) {
 | |
|             system(sprintf('rmdir /S /Q %s', escapeshellarg(realpath($installDir))));
 | |
|         } else {
 | |
|             system(sprintf('rm -rf %s', escapeshellarg($installDir)));
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     if ('install' === $command || 'update' === $command) {
 | |
|         echo '> Installing/Updating '.$name.PHP_EOL;
 | |
| 
 | |
|         // url
 | |
|         if (!isset($dep['git'])) {
 | |
|             exit(sprintf('The "git" value for the "%s" dependency must be set.', $name).PHP_EOL);
 | |
|         }
 | |
|         $url = $dep['git'];
 | |
| 
 | |
|         if (!is_dir($installDir)) {
 | |
|             system(sprintf('git clone %s %s', escapeshellarg($url), escapeshellarg($installDir)));
 | |
|         }
 | |
| 
 | |
|         // revision
 | |
|         if (isset($versions[$name])) {
 | |
|             $rev = $versions[$name];
 | |
|         } else {
 | |
|             $rev = isset($dep['version']) ? $dep['version'] : 'origin/HEAD';
 | |
|         }
 | |
| 
 | |
|         $status = system(sprintf('cd %s && git status --porcelain', escapeshellarg($installDir)));
 | |
|         if (!empty($status)) {
 | |
|             exit(sprintf('"%s" has local modifications. Please revert or commit/push them before running this command again.', $name).PHP_EOL);
 | |
|         }
 | |
|         $current_rev = system(sprintf('cd %s && git rev-list --max-count=1 HEAD', escapeshellarg($installDir)));
 | |
|         if ($current_rev === $rev) {
 | |
|             continue;
 | |
|         }
 | |
| 
 | |
|         system(sprintf('cd %s && git fetch origin && git reset --hard %s', escapeshellarg($installDir), escapeshellarg($rev)));
 | |
|     }
 | |
| 
 | |
|     if ('update' === $command || 'lock' === $command) {
 | |
|         ob_start();
 | |
|         system(sprintf('cd %s && git log -n 1 --format=%%H', escapeshellarg($installDir)));
 | |
|         $newversion = trim(ob_get_clean());
 | |
| 
 | |
|         ob_start();
 | |
|         system(sprintf('cd %s && git name-rev --tags --name-only %s', escapeshellarg($installDir), $newversion));
 | |
|         // remove trailing ^0 from tags, those are the tags themselves
 | |
|         $niceversion = preg_replace('/\^0$/', '', trim(ob_get_clean()));
 | |
| 
 | |
|         // undefined is returned in case no name-rev could be found
 | |
|         if ('undefined' !== $niceversion) {
 | |
|             $newversions[] = $name.' '.$niceversion;
 | |
|         } else {
 | |
|             $newversions[] = $name.' '.$newversion;
 | |
|         }
 | |
|     }
 | |
| }
 | |
| 
 | |
| // update?
 | |
| if ('update' === $command || 'lock' === $command) {
 | |
|     echo '> Updating deps.lock'.PHP_EOL;
 | |
| 
 | |
|     file_put_contents($rootDir.'/deps.lock', implode("\n", $newversions)."\n");
 | |
| }
 | |
| 
 | |
| // php on windows can't use the shebang line from system()
 | |
| $interpreter = defined('PHP_WINDOWS_VERSION_BUILD') ? 'php.exe' : '';
 | |
| 
 | |
| // Update the bootstrap files
 | |
| system(sprintf('%s %s %s', $interpreter, escapeshellarg($rootDir.'/vendor/bundles/Sensio/Bundle/DistributionBundle/Resources/bin/build_bootstrap.php'), escapeshellarg($rootDir)));
 | |
| 
 | |
| // Update assets
 | |
| system(sprintf('%s %s assets:install %s', $interpreter, escapeshellarg($rootDir.'/app/console'), escapeshellarg($rootDir.'/web/')));
 | |
| 
 | |
| // Remove the cache
 | |
| system(sprintf('%s %s cache:clear --no-warmup', $interpreter, escapeshellarg($rootDir.'/app/console')));
 |