Security update to Drupal 8.4.6
[yaffs-website] / composer.phar
1 #!/usr/bin/env php
2 <?php
3 /*
4  * This file is part of Composer.
5  *
6  * (c) Nils Adermann <naderman@naderman.de>
7  *     Jordi Boggiano <j.boggiano@seld.be>
8  *
9  * For the full copyright and license information, please view
10  * the license that is located at the bottom of this file.
11  */
12
13 // Avoid APC causing random fatal errors per https://github.com/composer/composer/issues/264
14 if (extension_loaded('apc') && ini_get('apc.enable_cli') && ini_get('apc.cache_by_default')) {
15     if (version_compare(phpversion('apc'), '3.0.12', '>=')) {
16         ini_set('apc.cache_by_default', 0);
17     } else {
18         fwrite(STDERR, 'Warning: APC <= 3.0.12 may cause fatal errors when running composer commands.'.PHP_EOL);
19         fwrite(STDERR, 'Update APC, or set apc.enable_cli or apc.cache_by_default to 0 in your php.ini.'.PHP_EOL);
20     }
21 }
22
23 Phar::mapPhar('composer.phar');
24 require 'phar://composer.phar/bin/composer';
25
26 __HALT_COMPILER(); ?>\r
27 ù\91\0\0ë\ 1\0\0\11\0\0\0\ 1\0\r\0\0\0composer.phar\0\0\0\0+\0\0\0src/Composer/Autoload/AutoloadGenerator.phpþa\0\0\92àqZþa\0\0tG\9d\94\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Autoload/ClassMapGenerator.php«\11\0\0\92àqZ«\11\0\0\10ëÊ\9a\ 1\0\0\0\0\0\0\16\0\0\0src/Composer/Cache.phpt\13\0\0\92àqZt\13\0\0\0\11&#¶\ 1\0\0\0\0\0\0%\0\0\0src/Composer/Command/AboutCommand.phpË\ 2\0\0\92àqZË\ 2\0\0º¡Ãh¶\ 1\0\0\0\0\0\0'\0\0\0src/Composer/Command/ArchiveCommand.phpL\14\0\0\92àqZL\14\0\0\85\r;V¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Command/BaseCommand.phpÉ        \0\0\92àqZÉ \0\0\97P!£¶\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Command/BaseDependencyCommand.phpÉ\18\0\0\92àqZÉ\18\0\0D{²Ð¶\ 1\0\0\0\0\0\01\0\0\0src/Composer/Command/CheckPlatformReqsCommand.php\82\f\0\0\92àqZ\82\f\0\0\a\88D\86\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Command/ClearCacheCommand.php]\ 5\0\0\92àqZ]\ 5\0\0\1f\82ß´¶\ 1\0\0\0\0\0\0&\0\0\0src/Composer/Command/ConfigCommand.php\87H\0\0\92àqZ\87H\0\0Ä×\ 5Ö¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Command/CreateProjectCommand.php;6\0\0\92àqZ;6\0\0ü\80\ 4\ 1\0\0\0\0\0\0'\0\0\0src/Composer/Command/DependsCommand.php·\ 2\0\0\92àqZ·\ 2\0\0o±¹ú¶\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Command/DiagnoseCommand.phpÕG\0\0\92àqZÕG\0\0ðõü\v\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Command/DumpAutoloadCommand.php\12
28 \0\0\92àqZ\12
29 \0\0'K¬\9e\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Command/ExecCommand.phpi\a\0\0\92àqZi\a\0\0\ 4\80\ 1\0\0\0\0\0\0&\0\0\0src/Composer/Command/GlobalCommand.phpü\a\0\0\92àqZü\a\0\0ÝH\8f\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Command/HomeCommand.phpÃ\ e\0\0\92àqZÃ\ e\0\0¯àyB¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Command/InitCommand.phpºJ\0\0\92àqZºJ\0\0"T¼\96\ 1\0\0\0\0\0\0'\0\0\0src/Composer/Command/InstallCommand.phpý\13\0\0\92àqZý\13\0\00ö:\89\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Command/LicensesCommand.php&\ e\0\0\92àqZ&\ e\0\0Óv\83\1e\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Command/OutdatedCommand.php°
30 \0\0\92àqZ°
31 \0\07àzk¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Command/ProhibitsCommand.phpË\ 2\0\0\92àqZË\ 2\0\0\1ag\8fð¶\ 1\0\0\0\0\0\0&\0\0\0src/Composer/Command/RemoveCommand.php\9b\15\0\0\92àqZ\9b\15\0\0>Sþ\98\ 1\0\0\0\0\0\0'\0\0\0src/Composer/Command/RequireCommand.phpÖ \0\0\92àqZÖ \0\0B÷õE¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Command/RunScriptCommand.phpq\ e\0\0\92àqZq\ e\0\0p@­\86\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Command/ScriptAliasCommand.phpo\ 5\0\0\92àqZo\ 5\0\0\r5Þl¶\ 1\0\0\0\0\0\0&\0\0\0src/Composer/Command/SearchCommand.phpã\b\0\0\92àqZã\b\0\0ñ\v¼w¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Command/SelfUpdateCommand.phpÈ2\0\0\92àqZÈ2\0\0+}\94\14\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Command/ShowCommand.phpug\0\0\92àqZug\0\0ÀÕé\13\ 1\0\0\0\0\0\0&\0\0\0src/Composer/Command/StatusCommand.php/\15\0\0\92àqZ/\15\0\0ôE\12\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Command/SuggestsCommand.php¨\r\0\0\92àqZ¨\r\0\0¼Ñ\ 5\ 1\0\0\0\0\0\0&\0\0\0src/Composer/Command/UpdateCommand.php¯#\0\0\92àqZ¯#\0\0\97ú\8d\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Command/ValidateCommand.php#\14\0\0\92àqZ#\14\0\0\89\0\9d\ 1\0\0\0\0\0\0\19\0\0\0src/Composer/Composer.phpù  \0\0\92àqZù \0\0\86\83R\ f\ 1\0\0\0\0\0\0\17\0\0\0src/Composer/Config.phpÅ"\0\0\92àqZÅ"\0\0\9d¡¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Config/ConfigSourceInterface.php\ e\ 2\0\0\92àqZ\ e\ 2\0\0³\f[/¶\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Config/JsonConfigSource.php!\13\0\0\92àqZ!\13\0\0¾S\r\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Console/Application.php§3\0\0\92àqZ§3\0\0\89D;q¶\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Console/HtmlOutputFormatter.php3\ 6\0\0\92àqZ3\ 6\0\0Ú\81Eu¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/DependencyResolver/Decisions.phpQ\ f\0\0\92àqZQ\ f\0\0?\98¬$¶\ 1\0\0\0\0\0\01\0\0\0src/Composer/DependencyResolver/DefaultPolicy.php\ 2\17\0\0\92àqZ\ 2\17\0\0õÝv\7f\ 1\0\0\0\0\0\0/\0\0\0src/Composer/DependencyResolver/GenericRule.php·\ 3\0\0\92àqZ·\ 3\0\0Ì~¯³¶\ 1\0\0\0\0\0\0>\0\0\0src/Composer/DependencyResolver/Operation/InstallOperation.phpC\ 2\0\0\92àqZC\ 2\0\0´\õ*¶\ 1\0\0\0\0\0\0I\0\0\0src/Composer/DependencyResolver/Operation/MarkAliasInstalledOperation.php÷\ 2\0\0\92àqZ÷\ 2\0\0ïÎà÷¶\ 1\0\0\0\0\0\0K\0\0\0src/Composer/DependencyResolver/Operation/MarkAliasUninstalledOperation.phpý\ 2\0\0\92àqZý\ 2\0\0\193#\86\ 1\0\0\0\0\0\0@\0\0\0src/Composer/DependencyResolver/Operation/OperationInterface.phpÓ\0\0\0\92àqZÓ\0\0\0Ùâ&ä¶\ 1\0\0\0\0\0\0=\0\0\0src/Composer/DependencyResolver/Operation/SolverOperation.php¹\ 1\0\0\92àqZ¹\ 1\0\0&¢e
32\ 1\0\0\0\0\0\0@\0\0\0src/Composer/DependencyResolver/Operation/UninstallOperation.phpI\ 2\0\0\92àqZI\ 2\0\0FûÂɶ\ 1\0\0\0\0\0\0=\0\0\0src/Composer/DependencyResolver/Operation/UpdateOperation.phph\ 3\0\0\92àqZh\ 3\0\0öSÕ]¶\ 1\0\0\0\0\0\03\0\0\0src/Composer/DependencyResolver/PolicyInterface.php­\ 1\0\0\92àqZ­\ 1\0\0\18\9f\8b\ 1\0\0\0\0\0\0(\0\0\0src/Composer/DependencyResolver/Pool.php°"\0\0\92àqZ°"\0\0\1d   \8e\ 1\0\0\0\0\0\0+\0\0\0src/Composer/DependencyResolver/Problem.php¥\18\0\0\92àqZ¥\18\0\0@\88<4¶\ 1\0\0\0\0\0\0+\0\0\0src/Composer/DependencyResolver/Request.php\83\ 4\0\0\92àqZ\83\ 4\0\0åVP\84\ 1\0\0\0\0\0\0(\0\0\0src/Composer/DependencyResolver/Rule.php¶\18\0\0\92àqZ¶\18\0\0Ú{\8d\8d\ 1\0\0\0\0\0\01\0\0\0src/Composer/DependencyResolver/Rule2Literals.php§\ 4\0\0\92àqZ§\ 4\0\0~Ð'ò¶\ 1\0\0\0\0\0\0+\0\0\0src/Composer/DependencyResolver/RuleSet.phpª
33 \0\0\92àqZª
34 \0\0\82\e\ 1\0\0\0\0\0\04\0\0\0src/Composer/DependencyResolver/RuleSetGenerator.phpL\e\0\0\92àqZL\e\0\0¡³`\ 5\ 1\0\0\0\0\0\03\0\0\0src/Composer/DependencyResolver/RuleSetIterator.php\11\ 6\0\0\92àqZ\11\ 6\0\0\9bCü$¶\ 1\0\0\0\0\0\02\0\0\0src/Composer/DependencyResolver/RuleWatchChain.phpi\ 1\0\0\92àqZi\ 1\0\0\9a\ 1\0\0\0\0\0\02\0\0\0src/Composer/DependencyResolver/RuleWatchGraph.phpá\ 6\0\0\92àqZá\ 6\0\0\89rôv¶\ 1\0\0\0\0\0\01\0\0\0src/Composer/DependencyResolver/RuleWatchNode.phpé\ 3\0\0\92àqZé\ 3\0\0hØÑ´¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/DependencyResolver/Solver.php\9f8\0\0\92àqZ\9f8\0\0\1epöb¶\ 1\0\0\0\0\0\06\0\0\0src/Composer/DependencyResolver/SolverBugException.php\98\ 1\0\0\92àqZ\98\ 1\0\0\7f"qN¶\ 1\0\0\0\0\0\0;\0\0\0src/Composer/DependencyResolver/SolverProblemsException.phpô\a\0\0\92àqZô\a\0\0×|Ŧ¶\ 1\0\0\0\0\0\0/\0\0\0src/Composer/DependencyResolver/Transaction.phpÙ\13\0\0\92àqZÙ\13\0\05ÖHÀ¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Downloader/ArchiveDownloader.php³      \0\0\92àqZ³ \0\0ÖðÞ\9f\ 1\0\0\0\0\0\01\0\0\0src/Composer/Downloader/ChangeReportInterface.phpÌ\0\0\0\92àqZÌ\0\0\0¯à¨¿¶\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Downloader/DownloadManager.php`\15\0\0\92àqZ`\15\0\0\86ë\9d¾¶\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Downloader/DownloaderInterface.phpÊ\ 1\0\0\92àqZÊ\ 1\0\0gs!l¶\ 1\0\0\0\0\0\03\0\0\0src/Composer/Downloader/DvcsDownloaderInterface.phpÑ\0\0\0\92àqZÑ\0\0\0\9c¿¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Downloader/FileDownloader.php\8d\18\0\0\92àqZ\8d\18\0\01\82ã\14\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Downloader/FilesystemException.php
35 \ 1\0\0\92àqZ
36 \ 1\0\0.-\1e\8b\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Downloader/FossilDownloader.php`\v\0\0\92àqZ`\v\0\0ÿI©u¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Downloader/GitDownloader.php?4\0\0\92àqZ?4\0\0e\8d\17\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Downloader/GzipDownloader.phpó\ 6\0\0\92àqZó\ 6\0\0}Úo¶\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Downloader/HgDownloader.php8 \0\0\92àqZ8 \0\0ëyàn¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Downloader/PathDownloader.phpK\11\0\0\92àqZK\11\0\09\95&c¶\ 1\0\0\0\0\0\00\0\0\0src/Composer/Downloader/PearPackageExtractor.phpu\e\0\0\92àqZu\e\0\0z\84\15\87\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Downloader/PerforceDownloader.php§\a\0\0\92àqZ§\a\0\0â\83\10¨¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Downloader/PharDownloader.phpå\0\0\0\92àqZå\0\0\0ÞÉ\1fç¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Downloader/RarDownloader.php\9e\a\0\0\92àqZ\9e\a\0\06      3U¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Downloader/SvnDownloader.phpH\14\0\0\92àqZH\14\0\0\ 3ùÀF¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Downloader/TarDownloader.phpã\0\0\0\92àqZã\0\0\0Í\92X?¶\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Downloader/TransportException.php=\ 2\0\0\92àqZ=\ 2\0\0ZÎÈÞ¶\ 1\0\0\0\0\0\09\0\0\0src/Composer/Downloader/VcsCapableDownloaderInterface.phpÔ\0\0\0\92àqZÔ\0\0\0`§ôö¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Downloader/VcsDownloader.php"\16\0\0\92àqZ"\16\0\0\9c\1a\9f\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Downloader/XzDownloader.php§\ 4\0\0\92àqZ§\ 4\0\0W$;á¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Downloader/ZipDownloader.php\98\13\0\0\92àqZ\98\13\0\0\9b@\ 2ü¶\ 1\0\0\0\0\0\0&\0\0\0src/Composer/EventDispatcher/Event.php \ 2\0\0\92àqZ \ 2\0\0±\99jï¶\ 1\0\0\0\0\0\00\0\0\0src/Composer/EventDispatcher/EventDispatcher.phpß0\0\0\92àqZß0\0\0}f\18\a\ 1\0\0\0\0\0\09\0\0\0src/Composer/EventDispatcher/EventSubscriberInterface.php©\0\0\0\92àqZ©\0\0\0\ 1\ 1\0\0\0\0\0\09\0\0\0src/Composer/EventDispatcher/ScriptExecutionException.phpv\0\0\0\92àqZv\0\0\0wZ8S¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Exception/NoSslException.phpf\0\0\0\92àqZf\0\0\0ËíM\9d\ 1\0\0\0\0\0\0\18\0\0\0src/Composer/Factory.phpU=\0\0\92àqZU=\0\0%êÿí¶\ 1\0\0\0\0\0\0\1a\0\0\0src/Composer/IO/BaseIO.php\8c\10\0\0\92àqZ\8c\10\0\0(\82l\91\ 1\0\0\0\0\0\0\1c\0\0\0src/Composer/IO/BufferIO.php*\ 4\0\0\92àqZ*\ 4\0\0¢®hT¶\ 1\0\0\0\0\0\0\1d\0\0\0src/Composer/IO/ConsoleIO.php\87\16\0\0\92àqZ\87\16\0\0h\97tH¶\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/IO/IOInterface.phpì\ 5\0\0\92àqZì\ 5\0\0\0Õ\9d\ e\ 1\0\0\0\0\0\0\1a\0\0\0src/Composer/IO/NullIO.phpÀ\ 4\0\0\92àqZÀ\ 4\0\0F`sʶ\ 1\0\0\0\0\0\0\1a\0\0\0src/Composer/Installer.phpX\9c\0\0\92àqZX\9c\0\0éå*\1c\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Installer/BinaryInstaller.phpÛ\11\0\0\92àqZÛ\11\0\0<x> ¶\ 1\0\0\0\0\0\02\0\0\0src/Composer/Installer/BinaryPresenceInterface.phpË\0\0\0\92àqZË\0\0\0À5\9a¨¶\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Installer/InstallationManager.php-\17\0\0\92àqZ-\17\0\0¾}\8c\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Installer/InstallerEvent.php\ e\ 6\0\0\92àqZ\ e\ 6\0\0lÔzi¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Installer/InstallerEvents.phpÞ\0\0\0\92àqZÞ\0\0\0ì\9f@G¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Installer/InstallerInterface.phpã\ 2\0\0\92àqZã\ 2\0\0^\83\93ʶ\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Installer/LibraryInstaller.php^\13\0\0\92àqZ^\13\0\0\10\1aÍr¶\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Installer/MetapackageInstaller.php\9c\ 4\0\0\92àqZ\9c\ 4\0\0Æ\12Å!¶\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Installer/NoopInstaller.php+\ 5\0\0\92àqZ+\ 5\0\0À·M}¶\ 1\0\0\0\0\0\0'\0\0\0src/Composer/Installer/PackageEvent.phpe\ 3\0\0\92àqZe\ 3\0\0;° \1a\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Installer/PackageEvents.php¸\ 1\0\0\92àqZ¸\ 1\0\0dbØs¶\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Installer/PearBinaryInstaller.phpâ\f\0\0\92àqZâ\f\0\0;øiU¶\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Installer/PearInstaller.php¢\a\0\0\92àqZ¢\a\0\0È\82¶Ñ¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Installer/PluginInstaller.php\9f\ 6\0\0\92àqZ\9f\ 6\0\0<tú,¶\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Installer/ProjectInstaller.php\1d\ 6\0\0\92àqZ\1d\ 6\0\0*0@P¶\ 1\0\0\0\0\0\04\0\0\0src/Composer/Installer/SuggestedPackagesReporter.php\10\a\0\0\92àqZ\10\a\0\0+±]Ķ\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/Json/JsonFile.phpï\13\0\0\92àqZï\13\0\0_(\18\v\ 1\0\0\0\0\0\0#\0\0\0src/Composer/Json/JsonFormatter.php\ 6\ 6\0\0\92àqZ\ 6\ 6\0\0\1eÐqu¶\ 1\0\0\0\0\0\0%\0\0\0src/Composer/Json/JsonManipulator.php°2\0\0\92àqZ°2\0\0\8eè\ 4ζ\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Json/JsonValidationException.php\\ 1\0\0\92àqZ\\ 1\0\0.Xóܶ\ 1\0\0\0\0\0\0%\0\0\0src/Composer/Package/AliasPackage.php\ 5\17\0\0\92àqZ\ 5\17\0\0¹\97~\9a\ 1\0\0\0\0\0\07\0\0\0src/Composer/Package/Archiver/ArchivableFilesFilter.php       \ 2\0\0\92àqZ \ 2\0\0yY+¦¶\ 1\0\0\0\0\0\07\0\0\0src/Composer/Package/Archiver/ArchivableFilesFinder.phpÞ\ 5\0\0\92àqZÞ\ 5\0\0\f²²¹¶\ 1\0\0\0\0\0\00\0\0\0src/Composer/Package/Archiver/ArchiveManager.php°\f\0\0\92àqZ°\f\0\0gþÒ)¶\ 1\0\0\0\0\0\03\0\0\0src/Composer/Package/Archiver/ArchiverInterface.php\a\ 1\0\0\92àqZ\a\ 1\0\0ñ´>\v\ 1\0\0\0\0\0\03\0\0\0src/Composer/Package/Archiver/BaseExcludeFilter.php\96\ 6\0\0\92àqZ\96\ 6\0\0y¶=ƶ\ 1\0\0\0\0\0\07\0\0\0src/Composer/Package/Archiver/ComposerExcludeFilter.php\1f\ 1\0\0\92àqZ\1f\ 1\0\0\8bSZ0¶\ 1\0\0\0\0\0\02\0\0\0src/Composer/Package/Archiver/GitExcludeFilter.phpq\ 3\0\0\92àqZq\ 3\0\05¾i&¶\ 1\0\0\0\0\0\01\0\0\0src/Composer/Package/Archiver/HgExcludeFilter.php\v\ 5\0\0\92àqZ\v\ 5\0\0\r\95¦S¶\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Package/Archiver/PharArchiver.php>\ 6\0\0\92àqZ>\ 6\0\0 5\89í¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Package/Archiver/ZipArchiver.php¼\ 4\0\0\92àqZ¼\ 4\0\0\91XÝë¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Package/BasePackage.php&\r\0\0\92àqZ&\r\0\0\e'\1fݶ\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Package/CompletePackage.phpü\ 6\0\0\92àqZü\ 6\0\0þM˶¶\ 1\0\0\0\0\0\01\0\0\0src/Composer/Package/CompletePackageInterface.phpõ\ 1\0\0\92àqZõ\ 1\0\0¦Ê\81ò¶\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Package/Dumper/ArrayDumper.phpë\v\0\0\92àqZë\v\0\0Ó8WE¶\ 1\0\0\0\0\0\0\1d\0\0\0src/Composer/Package/Link.php\88\ 5\0\0\92àqZ\88\ 5\0\0å¶Y«¶\ 1\0\0\0\0\0\07\0\0\0src/Composer/Package/LinkConstraint/EmptyConstraint.php\82\ 1\0\0\92àqZ\82\ 1\0\0\ eé~\8b\ 1\0\0\0\0\0\0?\0\0\0src/Composer/Package/LinkConstraint/LinkConstraintInterface.phpd\ 1\0\0\92àqZd\ 1\0\0¤ôLn¶\ 1\0\0\0\0\0\07\0\0\0src/Composer/Package/LinkConstraint/MultiConstraint.php\82\ 1\0\0\92àqZ\82\ 1\0\0ób`ý¶\ 1\0\0\0\0\0\0:\0\0\0src/Composer/Package/LinkConstraint/SpecificConstraint.phpi\ 1\0\0\92àqZi\ 1\0\0Þ\94\9a\ 1\0\0\0\0\0\09\0\0\0src/Composer/Package/LinkConstraint/VersionConstraint.phpX\ 1\0\0\92àqZX\ 1\0\0\ 2}`y¶\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Package/Loader/ArrayLoader.php\1f\1e\0\0\92àqZ\1f\1e\0\0n~\9c\9b\ 1\0\0\0\0\0\07\0\0\0src/Composer/Package/Loader/InvalidPackageException.phpE\ 2\0\0\92àqZE\ 2\0\0xb\13¾¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Package/Loader/JsonLoader.phpù\ 1\0\0\92àqZù\ 1\0\0!~\88\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Package/Loader/LoaderInterface.php²\0\0\0\92àqZ²\0\0\0¦}úζ\ 1\0\0\0\0\0\01\0\0\0src/Composer/Package/Loader/RootPackageLoader.php$\17\0\0\92àqZ$\17\0\0Ârü°¶\ 1\0\0\0\0\0\05\0\0\0src/Composer/Package/Loader/ValidatingArrayLoader.phpT:\0\0\92àqZT:\0\0AôX϶\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Package/Locker.php©!\0\0\92àqZ©!\0\0A\8aõë¶\ 1\0\0\0\0\0\0 \0\0\0src/Composer/Package/Package.phpÉ\1a\0\0\92àqZÉ\1a\0\0\8f\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Package/PackageInterface.php \a\0\0\92àqZ \a\0\0ûÇ^ƶ\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Package/RootAliasPackage.php\1f   \0\0\92àqZ\1f \0\0      _\80ø¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Package/RootPackage.php\11\ 5\0\0\92àqZ\11\ 5\0\0\ 2\8eÎ_¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Package/RootPackageInterface.php¹\ 3\0\0\92àqZ¹\ 3\0\0"maV¶\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Package/Version/VersionGuesser.phpO\1e\0\0\92àqZO\1e\0\0\88S\9c\11\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Package/Version/VersionParser.phpo\ 4\0\0\92àqZo\ 4\0\0m\1e\80\ 1\0\0\0\0\0\00\0\0\0src/Composer/Package/Version/VersionSelector.phpK\f\0\0\92àqZK\f\0\0²<\ fȶ\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Plugin/Capability/Capability.phpW\0\0\0\92àqZW\0\0\0æ_¨1¶\ 1\0\0\0\0\0\02\0\0\0src/Composer/Plugin/Capability/CommandProvider.php\97\0\0\0\92àqZ\97\0\0\0ûOâ>¶\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Plugin/Capable.php\7f\0\0\0\92àqZ\7f\0\0\0Æq\15\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Plugin/CommandEvent.phpâ\ 2\0\0\92àqZâ\ 2\0\0³ÆÇW¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Plugin/PluginEvents.phpÂ\0\0\0\92àqZÂ\0\0\0^Íþ\ 6\ 1\0\0\0\0\0\0'\0\0\0src/Composer/Plugin/PluginInterface.phpô\0\0\0\92àqZô\0\0\0)'*ض\ 1\0\0\0\0\0\0%\0\0\0src/Composer/Plugin/PluginManager.php\1f$\0\0\92àqZ\1f$\0\0ë\8e"»¶\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Plugin/PreFileDownloadEvent.php`\ 2\0\0\92àqZ`\ 2\0\0\09-ζ\ 1\0\0\0\0\0\04\0\0\0src/Composer/Question/StrictConfirmationQuestion.php\1e\ 5\0\0\92àqZ\1e\ 5\0\0'.³è¶\ 1\0\0\0\0\0\0+\0\0\0src/Composer/Repository/ArrayRepository.php\13\ e\0\0\92àqZ\13\ e\0\0éÌt\0\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Repository/ArtifactRepository.php»\f\0\0\92àqZ»\f\0\0\88Ý÷<¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Repository/BaseRepository.php]\r\0\0\92àqZ]\r\0\0ä&3\87\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Repository/ComposerRepository.php\87T\0\0\92àqZ\87T\0\0Ç\93×{¶\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Repository/CompositeRepository.php;\b\0\0\92àqZ;\b\0\0¤¯S\1f\ 1\0\0\0\0\0\0;\0\0\0src/Composer/Repository/ConfigurableRepositoryInterface.php\85\0\0\0\92àqZ\85\0\0\0±\9f_\1c\ 1\0\0\0\0\0\00\0\0\0src/Composer/Repository/FilesystemRepository.php$\ 5\0\0\92àqZ$\ 5\0\0¾Ãá\85\ 1\0\0\0\0\0\04\0\0\0src/Composer/Repository/InstalledArrayRepository.php£\0\0\0\92àqZ£\0\0\0/ö~>¶\ 1\0\0\0\0\0\09\0\0\0src/Composer/Repository/InstalledFilesystemRepository.php£\0\0\0\92àqZ£\0\0\0V
37 \95\ 1\0\0\0\0\0\08\0\0\0src/Composer/Repository/InstalledRepositoryInterface.php\87\0\0\0\92àqZ\87\0\0\0\18£9p¶\ 1\0\0\0\0\0\06\0\0\0src/Composer/Repository/InvalidRepositoryException.phpn\0\0\0\92àqZn\0\0\0à\93ë\98\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Repository/PackageRepository.phpj\ 3\0\0\92àqZj\ 3\0\0¥ôò̶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Repository/PathRepository.phpw
38 \0\0\92àqZw
39 \0\0\0~õ³¶\ 1\0\0\0\0\0\02\0\0\0src/Composer/Repository/Pear/BaseChannelReader.phpI\ 5\0\0\92àqZI\ 5\0\0c\b6³¶\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Repository/Pear/ChannelInfo.phpÄ\ 1\0\0\92àqZÄ\ 1\0\0:T*ɶ\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Repository/Pear/ChannelReader.phpí\ 6\0\0\92àqZí\ 6\0\0?ÈYT¶\ 1\0\0\0\0\0\04\0\0\0src/Composer/Repository/Pear/ChannelRest10Reader.php® \0\0\92àqZ® \0\0\99ÖÛú¶\ 1\0\0\0\0\0\04\0\0\0src/Composer/Repository/Pear/ChannelRest11Reader.php& \0\0\92àqZ& \0\0òUb\b\ 1\0\0\0\0\0\05\0\0\0src/Composer/Repository/Pear/DependencyConstraint.phpq\ 2\0\0\92àqZq\ 2\0\09\ e\17\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Repository/Pear/DependencyInfo.phpq\ 1\0\0\92àqZq\ 1\0\0fºTò¶\ 1\0\0\0\0\0\08\0\0\0src/Composer/Repository/Pear/PackageDependencyParser.php\85\16\0\0\92àqZ\85\16\0\0÷$Li¶\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Repository/Pear/PackageInfo.php°\ 3\0\0\92àqZ°\ 3\0\0\9f\r¸\f\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Repository/Pear/ReleaseInfo.php\92\ 1\0\0\92àqZ\92\ 1\0\0o\93\8aö\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Repository/PearRepository.phpª\16\0\0\92àqZª\16\0\0)\9f\83\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Repository/PlatformRepository.php\ 2\e\0\0\92àqZ\ 2\e\0\0fVÉ¢¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Repository/RepositoryFactory.php2\12\0\0\92àqZ2\12\0\0\12t\ 4\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Repository/RepositoryInterface.phpÛ\ 1\0\0\92àqZÛ\ 1\0\0\92\11âÁ¶\ 1\0\0\0\0\0\0-\0\0\0src/Composer/Repository/RepositoryManager.php,
40 \0\0\92àqZ,
41 \0\0¾\85\\95\ 1\0\0\0\0\0\07\0\0\0src/Composer/Repository/RepositorySecurityException.phpo\0\0\0\92àqZo\0\0\0pÕ«ª¶\ 1\0\0\0\0\0\0/\0\0\0src/Composer/Repository/Vcs/BitbucketDriver.phpô\1e\0\0\92àqZô\1e\0\0\ 4x¤ü¶\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Repository/Vcs/FossilDriver.php\9d\12\0\0\92àqZ\9d\12\0\0\ eÀ]µ¶\ 1\0\0\0\0\0\02\0\0\0src/Composer/Repository/Vcs/GitBitbucketDriver.phpê\ 5\0\0\92àqZê\ 5\0\0Ã\8e»\14\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Repository/Vcs/GitDriver.php¼\11\0\0\92àqZ¼\11\0\0\8a©Ðê¶\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Repository/Vcs/GitHubDriver.php¡+\0\0\92àqZ¡+\0\0ýYû
42\ 1\0\0\0\0\0\0,\0\0\0src/Composer/Repository/Vcs/GitLabDriver.phpÍ#\0\0\92àqZÍ#\0\0ßNìʶ\ 1\0\0\0\0\0\01\0\0\0src/Composer/Repository/Vcs/HgBitbucketDriver.phpä\ 5\0\0\92àqZä\ 5\0\0i\9büà¶\ 1\0\0\0\0\0\0(\0\0\0src/Composer/Repository/Vcs/HgDriver.phpe\12\0\0\92àqZe\12\0\0O!O\13\ 1\0\0\0\0\0\0.\0\0\0src/Composer/Repository/Vcs/PerforceDriver.php'    \0\0\92àqZ' \0\0ÙóH\ 5\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Repository/Vcs/SvnDriver.php\15\e\0\0\92àqZ\15\e\0\0\1dÕzï¶\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Repository/Vcs/VcsDriver.phpæ
43 \0\0\92àqZæ
44 \0\0eׯ-¶\ 1\0\0\0\0\0\02\0\0\0src/Composer/Repository/Vcs/VcsDriverInterface.php÷\ 2\0\0\92àqZ÷\ 2\0\0ÇX[\89\ 1\0\0\0\0\0\0)\0\0\0src/Composer/Repository/VcsRepository.php´\1e\0\0\92àqZ´\1e\0\0\ 1ªÖG¶\ 1\0\0\0\0\0\03\0\0\0src/Composer/Repository/WritableArrayRepository.php\ f\ 3\0\0\92àqZ\ f\ 3\0\0¾G\17\ 1\0\0\0\0\0\07\0\0\0src/Composer/Repository/WritableRepositoryInterface.php\89\ 1\0\0\92àqZ\89\ 1\0\0\91/sï¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Script/CommandEvent.phpW\0\0\0\92àqZW\0\0\0£VZt¶\ 1\0\0\0\0\0\0\1d\0\0\0src/Composer/Script/Event.phpµ\ 2\0\0\92àqZµ\ 2\0\0lt¦M¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Script/PackageEvent.php\9c\0\0\0\92àqZ\9c\0\0\0§ÿÉ\r\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Script/ScriptEvents.phpP\ 4\0\0\92àqZP\ 4\0\0\87\8f\ 4¶¶\ 1\0\0\0\0\0\0 \0\0\0src/Composer/SelfUpdate/Keys.php\9d\ 1\0\0\92àqZ\9d\ 1\0\0\vîÊN¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/SelfUpdate/Versions.phpì\ 5\0\0\92àqZì\ 5\0\0͵\91\83\ 1\0\0\0\0\0\0 \0\0\0src/Composer/Util/AuthHelper.phpË\ 3\0\0\92àqZË\ 3\0\0>zx\96\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Util/Bitbucket.php%\15\0\0\92àqZ%\15\0\0n=gÓ¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Util/ComposerMirror.php±\ 4\0\0\92àqZ±\ 4\0\0­½øض\ 1\0\0\0\0\0\0%\0\0\0src/Composer/Util/ConfigValidator.php¥\ e\0\0\92àqZ¥\ e\0\0\9eê¶\ 1\0\0\0\0\0\0"\0\0\0src/Composer/Util/ErrorHandler.php\87\ 4\0\0\92àqZ\87\ 4\0\0He\1c\ 1\0\0\0\0\0\0 \0\0\0src/Composer/Util/Filesystem.php3/\0\0\92àqZ3/\0\0m44ô¶\ 1\0\0\0\0\0\0\19\0\0\0src/Composer/Util/Git.php!&\0\0\92àqZ!&\0\0lsý׶\ 1\0\0\0\0\0\0\1c\0\0\0src/Composer/Util/GitHub.phpÏ
45 \0\0\92àqZÏ
46 \0\0ÁØ\å¶\ 1\0\0\0\0\0\0\1c\0\0\0src/Composer/Util/GitLab.php\99\f\0\0\92àqZ\99\f\0\0\17BLF¶\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Util/IniHelper.php]\ 3\0\0\92àqZ]\ 3\0\0®äéä¶\ 1\0\0\0\0\0\0$\0\0\0src/Composer/Util/NoProxyPattern.php¾\ 6\0\0\92àqZ¾\ 6\0\0Z+°m¶\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/Util/Perforce.php\821\0\0\92àqZ\821\0\0,\9cbx¶\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/Util/Platform.phpü\ 4\0\0\92àqZü\ 4\0\0s­fç¶\ 1\0\0\0\0\0\0%\0\0\0src/Composer/Util/ProcessExecutor.phpÚ\v\0\0\92àqZÚ\v\0\0£ÒÙ\ 5\ 1\0\0\0\0\0\0&\0\0\0src/Composer/Util/RemoteFilesystem.phpýb\0\0\92àqZýb\0\0Mùjж\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/Util/Silencer.phpé\ 2\0\0\92àqZé\ 2\0\0\93Vjf¶\ 1\0\0\0\0\0\0!\0\0\0src/Composer/Util/SpdxLicense.php\ 3\ 1\0\0\92àqZ\ 3\ 1\0\0¾7
47 ñ¶\ 1\0\0\0\0\0\0*\0\0\0src/Composer/Util/StreamContextFactory.php\18\10\0\0\92àqZ\18\10\0\0ËH*v¶\ 1\0\0\0\0\0\0\19\0\0\0src/Composer/Util/Svn.php\82\13\0\0\92àqZ\82\13\0\0 Vr¶\ 1\0\0\0\0\0\0\1f\0\0\0src/Composer/Util/TlsHelper.phpp
48 \0\0\92àqZp
49 \0\0¤eÞæ¶\ 1\0\0\0\0\0\0\19\0\0\0src/Composer/Util/Url.phpÀ\a\0\0\92àqZÀ\a\0\0lqh\17\ 1\0\0\0\0\0\0\1e\0\0\0src/Composer/XdebugHandler.php\93\ f\0\0\92àqZ\93\ f\0\0ÕWÖ>¶\ 1\0\0\0\0\0\0\11\0\0\0src/bootstrap.php¹\ 1\0\0\92àqZ¹\ 1\0\0\15I}\9c\ 1\0\0\0\0\0\0%\0\0\0src/Composer/Autoload/ClassLoader.phpl4\0\0\92àqZl4\0\0\92ø[÷¶\ 1\0\0\0\0\0\0#\0\0\0res/composer-repository-schema.jsonð\ f\0\0\92àqZð\ f\0\0\81GÐà¶\ 1\0\0\0\0\0\0\18\0\0\0res/composer-schema.jsony\95\0\0\92àqZy\95\0\0³Ì¶`¶\ 1\0\0\0\0\0\06\0\0\0vendor/composer/spdx-licenses/res/spdx-exceptions.json}\a\0\0\92àqZ}\a\0\0\ 3/Y\9e\ 1\0\0\0\0\0\04\0\0\0vendor/composer/spdx-licenses/res/spdx-licenses.jsonà\8c\0\0\92àqZà\8c\0\0£\7f\1a\ 1\0\0\0\0\0\0*\0\0\0vendor/seld/cli-prompt/res/hiddeninput.exe\0$\0\0\92àqZ\0$\0\0\95\8d¥v¶\ 1\0\0\0\0\0\0&\0\0\0vendor/symfony/console/Application.php#W\0\0\92àqZ#W\0\0\eèðz¶\ 1\0\0\0\0\0\0*\0\0\0vendor/symfony/console/Command/Command.phpò"\0\0\92àqZò"\0\0ÊRÑç¶\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/console/Command/HelpCommand.phpØ\a\0\0\92àqZØ\a\0\0$Y\1c«¶\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/console/Command/ListCommand.phpZ\b\0\0\92àqZZ\b\0\0É£ \16\ 1\0\0\0\0\0\0(\0\0\0vendor/symfony/console/ConsoleEvents.phpé\0\0\0\92àqZé\0\0\0RÛÔe¶\ 1\0\0\0\0\0\0<\0\0\0vendor/symfony/console/Descriptor/ApplicationDescription.phpÐ\b\0\0\92àqZÐ\b\0\0\99\8e5°¶\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/console/Descriptor/Descriptor.php\8e\a\0\0\92àqZ\8e\a\0\0éð8\9f\ 1\0\0\0\0\0\09\0\0\0vendor/symfony/console/Descriptor/DescriptorInterface.phpü\0\0\0\92àqZü\0\0\0±Q\aµ¶\ 1\0\0\0\0\0\04\0\0\0vendor/symfony/console/Descriptor/JsonDescriptor.phpá\r\0\0\92àqZá\r\0\0\87    àƶ\ 1\0\0\0\0\0\08\0\0\0vendor/symfony/console/Descriptor/MarkdownDescriptor.php¹\ e\0\0\92àqZ¹\ e\0\0k\9f.a¶\ 1\0\0\0\0\0\04\0\0\0vendor/symfony/console/Descriptor/TextDescriptor.php²\1e\0\0\92àqZ²\1e\0\0\8f­ùâ¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/console/Descriptor/XmlDescriptor.php\ 2\1c\0\0\92àqZ\ 2\1c\0\0
50 ]\85ζ\ 1\0\0\0\0\0\04\0\0\0vendor/symfony/console/Event/ConsoleCommandEvent.php°\ 1\0\0\92àqZ°\ 1\0\0\a!\0ȶ\ 1\0\0\0\0\0\0-\0\0\0vendor/symfony/console/Event/ConsoleEvent.phpÅ\ 2\0\0\92àqZÅ\ 2\0\0ÒxÛ\¶\ 1\0\0\0\0\0\06\0\0\0vendor/symfony/console/Event/ConsoleExceptionEvent.php\12\ 3\0\0\92àqZ\12\ 3\0\0á\162é¶\ 1\0\0\0\0\0\06\0\0\0vendor/symfony/console/Event/ConsoleTerminateEvent.phpz\ 2\0\0\92àqZz\ 2\0\0³,îL¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/console/Exception/CommandNotFoundException.phpÔ\ 1\0\0\92àqZÔ\ 1\0\0È÷ L¶\ 1\0\0\0\0\0\07\0\0\0vendor/symfony/console/Exception/ExceptionInterface.phpf\0\0\0\92àqZf\0\0\0¡ABª¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/console/Exception/InvalidArgumentException.php¦\0\0\0\92àqZ¦\0\0\0Ö̽Z¶\ 1\0\0\0\0\0\0;\0\0\0vendor/symfony/console/Exception/InvalidOptionException.php¦\0\0\0\92àqZ¦\0\0\0\13Ë×H¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/console/Exception/LogicException.php\92\0\0\0\92àqZ\92\0\0\0ÍO\e¶\ 1\0\0\0\0\0\05\0\0\0vendor/symfony/console/Exception/RuntimeException.php\96\0\0\0\92àqZ\96\0\0\0Ùí,6¶\ 1\0\0\0\0\0\04\0\0\0vendor/symfony/console/Formatter/OutputFormatter.php2\ e\0\0\92àqZ2\ e\0\0RÌYh¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/console/Formatter/OutputFormatterInterface.php\8c\ 1\0\0\92àqZ\8c\ 1\0\0òññÀ¶\ 1\0\0\0\0\0\09\0\0\0vendor/symfony/console/Formatter/OutputFormatterStyle.phpJ\10\0\0\92àqZJ\10\0\0ÏDSȶ\ 1\0\0\0\0\0\0B\0\0\0vendor/symfony/console/Formatter/OutputFormatterStyleInterface.php\84\ 1\0\0\92àqZ\84\ 1\0\0÷½\10\ 1\0\0\0\0\0\0>\0\0\0vendor/symfony/console/Formatter/OutputFormatterStyleStack.php>\ 5\0\0\92àqZ>\ 5\0\0[\86¿\96\ 1\0\0\0\0\0\06\0\0\0vendor/symfony/console/Helper/DebugFormatterHelper.phpx\b\0\0\92àqZx\b\0\0N©Ø¼¶\ 1\0\0\0\0\0\02\0\0\0vendor/symfony/console/Helper/DescriptorHelper.phpw\ 5\0\0\92àqZw\ 5\0\0ÅHð.¶\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/console/Helper/DialogHelper.phpú\1e\0\0\92àqZú\1e\0\0¼\fO\81\ 1\0\0\0\0\0\01\0\0\0vendor/symfony/console/Helper/FormatterHelper.phpc\ 4\0\0\92àqZc\ 4\0\0\93ý«N¶\ 1\0\0\0\0\0\0(\0\0\0vendor/symfony/console/Helper/Helper.php¨\a\0\0\92àqZ¨\a\0\0\9coû3¶\ 1\0\0\0\0\0\01\0\0\0vendor/symfony/console/Helper/HelperInterface.phpå\0\0\0\92àqZå\0\0\0\1f\8a \18\ 1\0\0\0\0\0\0+\0\0\0vendor/symfony/console/Helper/HelperSet.phpÉ\a\0\0\92àqZÉ\a\0\0\9cf\15\ 1\0\0\0\0\0\02\0\0\0vendor/symfony/console/Helper/InputAwareHelper.phpc\ 1\0\0\92àqZc\ 1\0\0ñø\90\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/console/Helper/ProcessHelper.phpÑ     \0\0\92àqZÑ \0\0@±ã\81\ 1\0\0\0\0\0\0-\0\0\0vendor/symfony/console/Helper/ProgressBar.phpk%\0\0\92àqZk%\0\0ì\19îa¶\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/console/Helper/ProgressHelper.php\\e\0\0\92àqZ\\e\0\0\91ÃYÓ¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/console/Helper/ProgressIndicator.phpK\14\0\0\92àqZK\14\0\0í\1cÍ°¶\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/console/Helper/QuestionHelper.php  \1c\0\0\92àqZ \1c\0\0L\17ú4¶\ 1\0\0\0\0\0\07\0\0\0vendor/symfony/console/Helper/SymfonyQuestionHelper.phpl
51 \0\0\92àqZl
52 \0\0\1e÷ÞL¶\ 1\0\0\0\0\0\0'\0\0\0vendor/symfony/console/Helper/Table.php¨*\0\0\92àqZ¨*\0\0e{))¶\ 1\0\0\0\0\0\0+\0\0\0vendor/symfony/console/Helper/TableCell.php\80\ 3\0\0\92àqZ\80\ 3\0\0Ìî*Û¶\ 1\0\0\0\0\0\0-\0\0\0vendor/symfony/console/Helper/TableHelper.php\ e\f\0\0\92àqZ\ e\f\0\0QRº\1e\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/console/Helper/TableSeparator.phpÊ\0\0\0\92àqZÊ\0\0\0az\1f\1c\ 1\0\0\0\0\0\0,\0\0\0vendor/symfony/console/Helper/TableStyle.php\1f
53 \0\0\92àqZ\1f
54 \0\0PÞµ¦¶\ 1\0\0\0\0\0\0*\0\0\0vendor/symfony/console/Input/ArgvInput.php7\16\0\0\92àqZ7\16\0\0ØQ|ʶ\ 1\0\0\0\0\0\0+\0\0\0vendor/symfony/console/Input/ArrayInput.php\14\v\0\0\92àqZ\14\v\0\0ʹóþ¶\ 1\0\0\0\0\0\0&\0\0\0vendor/symfony/console/Input/Input.php¢\v\0\0\92àqZ¢\v\0\0\94\87B"¶\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/console/Input/InputArgument.php\10\ 6\0\0\92àqZ\10\ 6\0\0&<¦¯¶\ 1\0\0\0\0\0\04\0\0\0vendor/symfony/console/Input/InputAwareInterface.php\9a\0\0\0\92àqZ\9a\0\0\0\87jT\9f\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/console/Input/InputDefinition.php\8a\19\0\0\92àqZ\8a\19\0\0émáP¶\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/console/Input/InputInterface.php\9d\ 3\0\0\92àqZ\9d\ 3\0\0®#£\10\ 1\0\0\0\0\0\0,\0\0\0vendor/symfony/console/Input/InputOption.php\18\f\0\0\92àqZ\18\f\0\0ùýN4¶\ 1\0\0\0\0\0\0,\0\0\0vendor/symfony/console/Input/StringInput.php\96\ 6\0\0\92àqZ\96\ 6\0\0cì\(¶\ 1\0\0\0\0\0\0\1e\0\0\0vendor/symfony/console/LICENSE)\ 4\0\0\92àqZ)\ 4\0\0·)E`¶\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/console/Logger/ConsoleLogger.php.    \0\0\92àqZ. \0\0¤\8c\85ζ\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/console/Output/BufferedOutput.php_\ 1\0\0\92àqZ_\ 1\0\0\8b >P¶\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/console/Output/ConsoleOutput.php°\a\0\0\92àqZ°\a\0\0]k~o¶\ 1\0\0\0\0\0\08\0\0\0vendor/symfony/console/Output/ConsoleOutputInterface.phpà\0\0\0\92àqZà\0\0\0\87\86Æʶ\ 1\0\0\0\0\0\0,\0\0\0vendor/symfony/console/Output/NullOutput.phpÏ\ 3\0\0\92àqZÏ\ 3\0\0®\98\8b\ 1\0\0\0\0\0\0(\0\0\0vendor/symfony/console/Output/Output.php\98  \0\0\92àqZ\98 \0\0\1fpf\¶\ 1\0\0\0\0\0\01\0\0\0vendor/symfony/console/Output/OutputInterface.php\17\ 3\0\0\92àqZ\17\ 3\0\0\0ì\ 6\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/console/Output/StreamOutput.phpÂ\ 5\0\0\92àqZÂ\ 5\0\0\ 4¥<I¶\ 1\0\0\0\0\0\02\0\0\0vendor/symfony/console/Question/ChoiceQuestion.phpw
55 \0\0\92àqZw
56 \0\02\15t\ 6\ 1\0\0\0\0\0\08\0\0\0vendor/symfony/console/Question/ConfirmationQuestion.phpç\ 2\0\0\92àqZç\ 2\0\0\r­òf¶\ 1\0\0\0\0\0\0,\0\0\0vendor/symfony/console/Question/Question.phpË     \0\0\92àqZË \0\0ÒqµR¶\ 1\0\0\0\0\0\0 \0\0\0vendor/symfony/console/Shell.phpå\ f\0\0\92àqZå\ f\0\0\95\9axS¶\ 1\0\0\0\0\0\0,\0\0\0vendor/symfony/console/Style/OutputStyle.php\\ 5\0\0\92àqZ\\ 5\0\0wפ\ 4\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/console/Style/StyleInterface.phpÏ\ 3\0\0\92àqZÏ\ 3\0\0&nÅѶ\ 1\0\0\0\0\0\0-\0\0\0vendor/symfony/console/Style/SymfonyStyle.php¶\1f\0\0\92àqZ¶\1f\0\0ª×\10ì¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/console/Tester/ApplicationTester.phpÏ\ 5\0\0\92àqZÏ\ 5\0\0s\9e9i¶\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/console/Tester/CommandTester.phpª\ 6\0\0\92àqZª\ 6\0\0µ.âr¶\ 1\0\0\0\0\0\0(\0\0\0vendor/symfony/debug/BufferingLogger.phpt\ 1\0\0\92àqZt\ 1\0\0=\0hܶ\ 1\0\0\0\0\0\0\1e\0\0\0vendor/symfony/debug/Debug.phpé\ 2\0\0\92àqZé\ 2\0\0Àxa?¶\ 1\0\0\0\0\0\0)\0\0\0vendor/symfony/debug/DebugClassLoader.php¡\1d\0\0\92àqZ¡\1d\0\0ó\80v\87\ 1\0\0\0\0\0\0%\0\0\0vendor/symfony/debug/ErrorHandler.php\80C\0\0\92àqZ\80C\0\0¥æõ¾¶\ 1\0\0\0\0\0\09\0\0\0vendor/symfony/debug/Exception/ClassNotFoundException.php\84\ 1\0\0\92àqZ\84\ 1\0\0n\90¡\85\ 1\0\0\0\0\0\08\0\0\0vendor/symfony/debug/Exception/ContextErrorException.php\98\ 1\0\0\92àqZ\98\ 1\0\0-
57 d2¶\ 1\0\0\0\0\0\01\0\0\0vendor/symfony/debug/Exception/DummyException.php\ 2\ 1\0\0\92àqZ\ 2\ 1\0\0-"ûd¶\ 1\0\0\0\0\0\06\0\0\0vendor/symfony/debug/Exception/FatalErrorException.phpï\ 6\0\0\92àqZï\ 6\0\0æ\ffz¶\ 1\0\0\0\0\0\06\0\0\0vendor/symfony/debug/Exception/FatalThrowableError.phpD\ 2\0\0\92àqZD\ 2\0\0¡\fÂí¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/debug/Exception/FlattenException.php²\16\0\0\92àqZ²\16\0\0HòÑ\ f\ 1\0\0\0\0\0\07\0\0\0vendor/symfony/debug/Exception/OutOfMemoryException.php~\0\0\0\92àqZ~\0\0\0ë¨oâ¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/debug/Exception/UndefinedFunctionException.php\88\ 1\0\0\92àqZ\88\ 1\0\0¢G\82\ 1\0\0\0\0\0\0;\0\0\0vendor/symfony/debug/Exception/UndefinedMethodException.php\86\ 1\0\0\92àqZ\86\ 1\0\0¨LÚ:¶\ 1\0\0\0\0\0\0)\0\0\0vendor/symfony/debug/ExceptionHandler.php\193\0\0\92àqZ\193\0\0\8a\ 1\0\0\0\0\0\0I\0\0\0vendor/symfony/debug/FatalErrorHandler/ClassNotFoundFatalErrorHandler.php7\12\0\0\92àqZ7\12\0\0Ñj/=¶\ 1\0\0\0\0\0\0E\0\0\0vendor/symfony/debug/FatalErrorHandler/FatalErrorHandlerInterface.php\ 3\ 1\0\0\92àqZ\ 3\ 1\0\0ĹBV¶\ 1\0\0\0\0\0\0M\0\0\0vendor/symfony/debug/FatalErrorHandler/UndefinedFunctionFatalErrorHandler.phpu\b\0\0\92àqZu\b\0\0éj\ 3\19\ 1\0\0\0\0\0\0K\0\0\0vendor/symfony/debug/FatalErrorHandler/UndefinedMethodFatalErrorHandler.phpN\ 5\0\0\92àqZN\ 5\0\0Ço-ç¶\ 1\0\0\0\0\0\0\1c\0\0\0vendor/symfony/debug/LICENSE)\ 4\0\0\92àqZ)\ 4\0\0·)E`¶\ 1\0\0\0\0\0\0:\0\0\0vendor/symfony/filesystem/Exception/ExceptionInterface.phpi\0\0\0\92àqZi\0\0\0$ ÿ\9b\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/filesystem/Exception/FileNotFoundException.php¼\ 1\0\0\92àqZ¼\ 1\0\0pí\¶¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/filesystem/Exception/IOException.php\87\ 1\0\0\92àqZ\87\ 1\0\0\80ü#Ѷ\ 1\0\0\0\0\0\0<\0\0\0vendor/symfony/filesystem/Exception/IOExceptionInterface.php¦\0\0\0\92àqZ¦\0\0\0jÙwM¶\ 1\0\0\0\0\0\0(\0\0\0vendor/symfony/filesystem/Filesystem.phpö2\0\0\92àqZö2\0\0ëP\81ò¶\ 1\0\0\0\0\0\0!\0\0\0vendor/symfony/filesystem/LICENSE)\ 4\0\0\92àqZ)\ 4\0\0·)E`¶\ 1\0\0\0\0\0\0)\0\0\0vendor/symfony/filesystem/LockHandler.php¢\ 5\0\0\92àqZ¢\ 5\0\0D\91;i¶\ 1\0\0\0\0\0\01\0\0\0vendor/symfony/finder/Adapter/AbstractAdapter.php\\v\0\0\92àqZ\\v\0\0Æ\93É\80\ 1\0\0\0\0\0\05\0\0\0vendor/symfony/finder/Adapter/AbstractFindAdapter.php\8b\19\0\0\92àqZ\8b\19\0\0]vk1¶\ 1\0\0\0\0\0\02\0\0\0vendor/symfony/finder/Adapter/AdapterInterface.php\9b\ 3\0\0\92àqZ\9b\ 3\0\0M\aþ\e\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/finder/Adapter/BsdFindAdapter.php2\a\0\0\92àqZ2\a\0\0Q/ÇC¶\ 1\0\0\0\0\0\00\0\0\0vendor/symfony/finder/Adapter/GnuFindAdapter.php\15\a\0\0\92àqZ\15\a\0\0(\fí?¶\ 1\0\0\0\0\0\0,\0\0\0vendor/symfony/finder/Adapter/PhpAdapter.phpô\a\0\0\92àqZô\a\0\0\16\1d:?¶\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/finder/Comparator/Comparator.php\8c\ 3\0\0\92àqZ\8c\ 3\0\0\16wþT¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/finder/Comparator/DateComparator.php#\ 3\0\0\92àqZ#\ 3\0\0\16°\1fζ\ 1\0\0\0\0\0\05\0\0\0vendor/symfony/finder/Comparator/NumberComparator.php|\ 3\0\0\92àqZ|\ 3\0\0ITÇͶ\ 1\0\0\0\0\0\09\0\0\0vendor/symfony/finder/Exception/AccessDeniedException.php\84\0\0\0\92àqZ\84\0\0\0½¾s\9c\ 1\0\0\0\0\0\0;\0\0\0vendor/symfony/finder/Exception/AdapterFailureException.php¬\ 2\0\0\92àqZ¬\ 2\0\0\91\9e\ 1\0\0\0\0\0\06\0\0\0vendor/symfony/finder/Exception/ExceptionInterface.php\84\0\0\0\92àqZ\84\0\0\0\1cGz-¶\ 1\0\0\0\0\0\0A\0\0\0vendor/symfony/finder/Exception/OperationNotPermitedException.php)\ 1\0\0\92àqZ)\ 1\0\0ìcj=¶\ 1\0\0\0\0\0\0@\0\0\0vendor/symfony/finder/Exception/ShellCommandFailureException.phpº\ 2\0\0\92àqZº\ 2\0\0\18Êø\1c\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/finder/Expression/Expression.php\a\ 6\0\0\92àqZ\a\ 6\0\0µoÔ\ 6\ 1\0\0\0\0\0\0)\0\0\0vendor/symfony/finder/Expression/Glob.phpf\ 4\0\0\92àqZf\ 4\0\0lïÜP¶\ 1\0\0\0\0\0\0*\0\0\0vendor/symfony/finder/Expression/Regex.php\ 4\ f\0\0\92àqZ\ 4\ f\0\0Qr\93¡¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/finder/Expression/ValueInterface.phpÍ\ 1\0\0\92àqZÍ\ 1\0\0²~øb¶\ 1\0\0\0\0\0\0 \0\0\0vendor/symfony/finder/Finder.php¹-\0\0\92àqZ¹-\0\0Q\1aÿ2¶\ 1\0\0\0\0\0\0\1e\0\0\0vendor/symfony/finder/Glob.phpK\ 5\0\0\92àqZK\ 5\0\0já±n¶\ 1\0\0\0\0\0\07\0\0\0vendor/symfony/finder/Iterator/CustomFilterIterator.php[\ 2\0\0\92àqZ[\ 2\0\0­\ 4åW¶\ 1\0\0\0\0\0\0:\0\0\0vendor/symfony/finder/Iterator/DateRangeFilterIterator.phpx\ 2\0\0\92àqZx\ 2\0\0\ fô\ 3\ 1\0\0\0\0\0\0;\0\0\0vendor/symfony/finder/Iterator/DepthRangeFilterIterator.phpî\ 1\0\0\92àqZî\ 1\0\0üÍ\9d\ 1\0\0\0\0\0\0A\0\0\0vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.phpí\ 5\0\0\92àqZí\ 5\0\0n\ 5õH¶\ 1\0\0\0\0\0\04\0\0\0vendor/symfony/finder/Iterator/FilePathsIterator.php \ 6\0\0\92àqZ \ 6\0\0fQCe¶\ 1\0\0\0\0\0\09\0\0\0vendor/symfony/finder/Iterator/FileTypeFilterIterator.phpZ\ 2\0\0\92àqZZ\ 2\0\0(\1a&ø¶\ 1\0\0\0\0\0\0<\0\0\0vendor/symfony/finder/Iterator/FilecontentFilterIterator.php5\ 2\0\0\92àqZ5\ 2\0\0\9aí\1f\14\ 1\0\0\0\0\0\09\0\0\0vendor/symfony/finder/Iterator/FilenameFilterIterator.phpr\ 1\0\0\92àqZr\ 1\0\0t\b\1a\ 1\0\0\0\0\0\01\0\0\0vendor/symfony/finder/Iterator/FilterIterator.phpÃ\ 2\0\0\92àqZÃ\ 2\0\0\9a+µÞ¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/finder/Iterator/MultiplePcreFilterIterator.php-\ 5\0\0\92àqZ-\ 5\0\0ºÎÒ_¶\ 1\0\0\0\0\0\05\0\0\0vendor/symfony/finder/Iterator/PathFilterIterator.phpÏ\ 1\0\0\92àqZÏ\ 1\0\0º\1cªÇ¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php\13   \0\0\92àqZ\13 \0\0 \12ÿ¶\ 1\0\0\0\0\0\0:\0\0\0vendor/symfony/finder/Iterator/SizeRangeFilterIterator.phpe\ 2\0\0\92àqZe\ 2\0\0\9f\92áé¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/finder/Iterator/SortableIterator.php*\ 6\0\0\92àqZ*\ 6\0\0\80õ´^¶\ 1\0\0\0\0\0\0\1d\0\0\0vendor/symfony/finder/LICENSE)\ 4\0\0\92àqZ)\ 4\0\0·)E`¶\ 1\0\0\0\0\0\0'\0\0\0vendor/symfony/finder/Shell/Command.php?\v\0\0\92àqZ?\v\0\0\9aPw\89\ 1\0\0\0\0\0\0%\0\0\0vendor/symfony/finder/Shell/Shell.phpp\ 4\0\0\92àqZp\ 4\0\0\18Ó}g¶\ 1\0\0\0\0\0\0%\0\0\0vendor/symfony/finder/SplFileInfo.phpý\ 2\0\0\92àqZý\ 2\0\0\13`ØÓ¶\ 1\0\0\0\0\0\0(\0\0\0vendor/symfony/polyfill-mbstring/LICENSE)\ 4\0\0\92àqZ)\ 4\0\0î*L\14\ 1\0\0\0\0\0\0-\0\0\0vendor/symfony/polyfill-mbstring/Mbstring.phpÄ6\0\0\92àqZÄ6\0\0U.\17ݶ\ 1\0\0\0\0\0\0@\0\0\0vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php2A\0\0\92àqZ2A\0\0½\11=¨¶\ 1\0\0\0\0\0\0@\0\0\0vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php¡A\0\0\92àqZ¡A\0\0\ eÚ    Í¶\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/polyfill-mbstring/bootstrap.php±\ f\0\0\92àqZ±\ f\0\0|\8a©Ò¶\ 1\0\0\0\0\0\07\0\0\0vendor/symfony/process/Exception/ExceptionInterface.phpf\0\0\0\92àqZf\0\0\0]ö>T¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/process/Exception/InvalidArgumentException.php¨\0\0\0\92àqZ¨\0\0\0ÐÀ+_¶\ 1\0\0\0\0\0\03\0\0\0vendor/symfony/process/Exception/LogicException.php\94\0\0\0\92àqZ\94\0\0\0 ³ãñ¶\ 1\0\0\0\0\0\0;\0\0\0vendor/symfony/process/Exception/ProcessFailedException.phpx\ 3\0\0\92àqZx\ 3\0\0¨Ìzy¶\ 1\0\0\0\0\0\0=\0\0\0vendor/symfony/process/Exception/ProcessTimedOutException.php\1f\ 4\0\0\92àqZ\1f\ 4\0\0\7fï\ e«¶\ 1\0\0\0\0\0\05\0\0\0vendor/symfony/process/Exception/RuntimeException.php\98\0\0\0\92àqZ\98\0\0\0¢\eØ:¶\ 1\0\0\0\0\0\0+\0\0\0vendor/symfony/process/ExecutableFinder.php\99\ 4\0\0\92àqZ\99\ 4\0\0|O¿é¶\ 1\0\0\0\0\0\0\1e\0\0\0vendor/symfony/process/LICENSE)\ 4\0\0\92àqZ)\ 4\0\0·)E`¶\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/process/PhpExecutableFinder.phpg\ 4\0\0\92àqZg\ 4\0\0\8dçµ\ 6\ 1\0\0\0\0\0\0%\0\0\0vendor/symfony/process/PhpProcess.phpú\ 3\0\0\92àqZú\ 3\0\0¯\93Õ\81\ 1\0\0\0\0\0\0.\0\0\0vendor/symfony/process/Pipes/AbstractPipes.php]\a\0\0\92àqZ]\a\0\0g\18\16\ 1\0\0\0\0\0\0/\0\0\0vendor/symfony/process/Pipes/PipesInterface.phpD\ 1\0\0\92àqZD\ 1\0\0vØ\ 1\0\0\0\0\0\0*\0\0\0vendor/symfony/process/Pipes/UnixPipes.phpâ\a\0\0\92àqZâ\a\0\0\7fß\10Ŷ\ 1\0\0\0\0\0\0-\0\0\0vendor/symfony/process/Pipes/WindowsPipes.php\89\v\0\0\92àqZ\89\v\0\0\bÀ"¢¶\ 1\0\0\0\0\0\0"\0\0\0vendor/symfony/process/Process.php£R\0\0\92àqZ£R\0\0\8b\84&E¶\ 1\0\0\0\0\0\0)\0\0\0vendor/symfony/process/ProcessBuilder.phpß
58 \0\0\92àqZß
59 \0\0^\83\17\ 1\0\0\0\0\0\0'\0\0\0vendor/symfony/process/ProcessUtils.phpK\ 6\0\0\92àqZK\ 6\0\0µ½~ò¶\ 1\0\0\0\0\0\0\1c\0\0\0vendor/seld/jsonlint/LICENSE"\ 4\0\0\92àqZ"\ 4\0\0a\83sy¶\ 1\0\0\0\0\0\0@\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/DuplicateKeyException.php*\ 1\0\0\92àqZ*\ 1\0\0\19\95pñ¶\ 1\0\0\0\0\0\05\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/JsonParser.php/2\0\0\92àqZ/2\0\0­ß\98ö¶\ 1\0\0\0\0\0\00\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/Lexer.php\ 6\ f\0\0\92àqZ\ 6\ f\0\0%ÿ3N¶\ 1\0\0\0\0\0\0;\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/ParsingException.php\1e\ 1\0\0\92àqZ\1e\ 1\0\0\89²\10ñ¶\ 1\0\0\0\0\0\04\0\0\0vendor/seld/jsonlint/src/Seld/JsonLint/Undefined.php>\0\0\0\92àqZ>\0\0\0ÿq\9f\9f\ 1\0\0\0\0\0\0\1e\0\0\0vendor/seld/cli-prompt/LICENSE"\ 4\0\0\92àqZ"\ 4\0\0\88ñ?e¶\ 1\0\0\0\0\0\0&\0\0\0vendor/seld/cli-prompt/res/example.php'\ 1\0\0\92àqZ'\ 1\0\0I\1c\ 5£¶\ 1\0\0\0\0\0\0(\0\0\0vendor/seld/cli-prompt/src/CliPrompt.phpC\ 6\0\0\92àqZC\ 6\0\0Ð}\8d\ 1\0\0\0\0\0\0(\0\0\0vendor/justinrainbow/json-schema/LICENSE \ 4\0\0\92àqZ \ 4\0\0ºç\ 6©¶\ 1\0\0\0\0\0\0.\0\0\0vendor/justinrainbow/json-schema/demo/demo.phpñ\ 1\0\0\92àqZñ\ 1\0\0f\e\12\ 1\0\0\0\0\0\0N\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/BaseConstraint.php¡      \0\0\92àqZ¡ \0\0\86wÌl¶\ 1\0\0\0\0\0\0T\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/CollectionConstraint.php)\r\0\0\92àqZ)\r\0\0\14\14\ 1\0\0\0\0\0\0J\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Constraint.php\f\ e\0\0\92àqZ\f\ e\0\0Òé`\13\ 1\0\0\0\0\0\0S\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ConstraintInterface.php¼\ 1\0\0\92àqZ¼\ 1\0\0ÿ Q\9c\ 1\0\0\0\0\0\0N\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/EnumConstraint.php]\ 3\0\0\92àqZ]\ 3\0\0V\8eU<¶\ 1\0\0\0\0\0\0G\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/Factory.php;\r\0\0\92àqZ;\r\0\0!/)\18\ 1\0\0\0\0\0\0P\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/FormatConstraint.php\85\14\0\0\92àqZ\85\14\0\0\93T\9cÚ¶\ 1\0\0\0\0\0\0P\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/NumberConstraint.php\9a
60 \0\0\92àqZ\9a
61 \0\0\15\1ez&¶\ 1\0\0\0\0\0\0P\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/ObjectConstraint.phpÃ\11\0\0\92àqZÃ\11\0\0©Å¼x¶\ 1\0\0\0\0\0\0P\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/SchemaConstraint.phpN \0\0\92àqZN \0\0QÓmV¶\ 1\0\0\0\0\0\0P\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/StringConstraint.php\7f\ 4\0\0\92àqZ\7f\ 4\0\0¥w\9a\87\ 1\0\0\0\0\0\0X\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/LooseTypeCheck.phpa\ 4\0\0\92àqZa\ 4\0\0\v     qö\ 1\0\0\0\0\0\0Y\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/StrictTypeCheck.phpp\ 2\0\0\92àqZp\ 2\0\0\12r\1fë¶\ 1\0\0\0\0\0\0\\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeCheck/TypeCheckInterface.php\89\ 1\0\0\92àqZ\89\ 1\0\0\93µ+j¶\ 1\0\0\0\0\0\0N\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/TypeConstraint.php&\ f\0\0\92àqZ&\ f\0\04\98©T¶\ 1\0\0\0\0\0\0S\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Constraints/UndefinedConstraint.phpr!\0\0\92àqZr!\0\0\89Ö\91\b\ 1\0\0\0\0\0\0F\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Entity/JsonPointer.phpè\ 6\0\0\92àqZè\ 6\0\0\ 6{N\96\ 1\0\0\0\0\0\0P\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ExceptionInterface.phpI\0\0\0\92àqZI\0\0\0%|\19°¶\ 1\0\0\0\0\0\0V\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidArgumentException.php\95\0\0\0\92àqZ\95\0\0\0\8bàG\ 5\ 1\0\0\0\0\0\0T\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidConfigException.phpl\0\0\0\92àqZl\0\0\0A!L׶\ 1\0\0\0\0\0\0T\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaException.phpl\0\0\0\92àqZl\0\0\0è2÷þ¶\ 1\0\0\0\0\0\0]\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSchemaMediaTypeException.phpu\0\0\0\92àqZu\0\0\0=hç\a\ 1\0\0\0\0\0\0W\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/InvalidSourceUriException.phpw\0\0\0\92àqZw\0\0\0N-ò[¶\ 1\0\0\0\0\0\0S\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/JsonDecodingException.phpÞ\ 2\0\0\92àqZÞ\ 2\0\0\r
62\ 1\0\0\0\0\0\0W\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ResourceNotFoundException.phpo\0\0\0\92àqZo\0\0\0píÛù¶\ 1\0\0\0\0\0\0N\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/RuntimeException.php\85\0\0\0\92àqZ\85\0\0\0\b%\85\97\ 1\0\0\0\0\0\0^\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UnresolvableJsonPointerException.php\80\0\0\0\92àqZ\80\0\0\0u-#1¶\ 1\0\0\0\0\0\0R\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/UriResolverException.phpj\0\0\0\92àqZj\0\0\0å\1a>\8f\ 1\0\0\0\0\0\0Q\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Exception/ValidationException.phpf\0\0\0\92àqZf\0\0\0¬¤\84þ¶\ 1\0\0\0\0\0\0K\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Iterator/ObjectIterator.phpþ\ 5\0\0\92àqZþ\ 5\0\0M\8f\84õ¶\ 1\0\0\0\0\0\0;\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Rfc3339.php \ 2\0\0\92àqZ \ 2\0\0f4÷³¶\ 1\0\0\0\0\0\0A\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorage.php\9c\r\0\0\92àqZ\9c\r\0\0\ 2åfO¶\ 1\0\0\0\0\0\0J\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/SchemaStorageInterface.php\ 1\ 1\0\0\92àqZ\ 1\ 1\0\0o\8a+}¶\ 1\0\0\0\0\0\0T\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/AbstractRetriever.phpá\0\0\0\92àqZá\0\0\0[þA\81\ 1\0\0\0\0\0\0G\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/Curl.php¥\ 4\0\0\92àqZ¥\ 4\0\0Ô§Lb¶\ 1\0\0\0\0\0\0R\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/FileGetContents.php%\ 5\0\0\92àqZ%\ 5\0\05"\10 ¶\ 1\0\0\0\0\0\0R\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/PredefinedArray.php,\ 2\0\0\92àqZ,\ 2\0\01\955þ¶\ 1\0\0\0\0\0\0X\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/Retrievers/UriRetrieverInterface.php®\0\0\0\92àqZ®\0\0\0ÿ\8bÁå¶\ 1\0\0\0\0\0\0C\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriResolver.php\ 5\v\0\0\92àqZ\ 5\v\0\0£\9f)à¶\ 1\0\0\0\0\0\0D\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Uri/UriRetriever.php&\13\0\0\92àqZ&\13\0\0¼î\82¢¶\ 1\0\0\0\0\0\0H\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/UriResolverInterface.php\83\0\0\0\92àqZ\83\0\0\0\12J\80\1f\ 1\0\0\0\0\0\0I\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/UriRetrieverInterface.php\85\0\0\0\92àqZ\85\0\0\0íæ\e\ 1\0\0\0\0\0\0=\0\0\0vendor/justinrainbow/json-schema/src/JsonSchema/Validator.phpÇ\ 5\0\0\92àqZÇ\ 5\0\0ù\85oÞ¶\ 1\0\0\0\0\0\0%\0\0\0vendor/composer/spdx-licenses/LICENSE\1c\ 4\0\0\92àqZ\1c\ 4\0\0\ 6Bhí¶\ 1\0\0\0\0\0\02\0\0\0vendor/composer/spdx-licenses/src/SpdxLicenses.phpH\14\0\0\92àqZH\14\0\0Í\89T\ 4\ 1\0\0\0\0\0\0\1e\0\0\0vendor/composer/semver/LICENSE\1c\ 4\0\0\92àqZ\1c\ 4\0\0\ 6Bhí¶\ 1\0\0\0\0\0\0)\0\0\0vendor/composer/semver/src/Comparator.php\ 2\ 4\0\0\92àqZ\ 2\ 4\0\0wl\83ï¶\ 1\0\0\0\0\0\0<\0\0\0vendor/composer/semver/src/Constraint/AbstractConstraint.php×\ 2\0\0\92àqZ×\ 2\0\0õî>\8e\ 1\0\0\0\0\0\04\0\0\0vendor/composer/semver/src/Constraint/Constraint.phpª\f\0\0\92àqZª\f\0\0ÇO7²¶\ 1\0\0\0\0\0\0=\0\0\0vendor/composer/semver/src/Constraint/ConstraintInterface.phpß\0\0\0\92àqZß\0\0\00C,\87\ 1\0\0\0\0\0\09\0\0\0vendor/composer/semver/src/Constraint/EmptyConstraint.phpé\ 1\0\0\92àqZé\ 1\0\0!-Ø\99\ 1\0\0\0\0\0\09\0\0\0vendor/composer/semver/src/Constraint/MultiConstraint.php1\ 5\0\0\92àqZ1\ 5\0\0í xU¶\ 1\0\0\0\0\0\0%\0\0\0vendor/composer/semver/src/Semver.phpv\ 6\0\0\92àqZv\ 6\0\0\8b×È\9b\ 1\0\0\0\0\0\0,\0\0\0vendor/composer/semver/src/VersionParser.php¿*\0\0\92àqZ¿*\0\0\13)mƶ\ 1\0\0\0\0\0\0!\0\0\0vendor/composer/ca-bundle/LICENSE\1c\ 4\0\0\92àqZ\1c\ 4\0\0*!^`¶\ 1\0\0\0\0\0\0*\0\0\0vendor/composer/ca-bundle/src/CaBundle.php\15\1d\0\0\92àqZ\15\1d\0\0Ê\v~Ķ\ 1\0\0\0\0\0\0\16\0\0\0vendor/psr/log/LICENSE=\ 4\0\0\92àqZ=\ 4\0\0\8e\ 1\0\0\0\0\0\0)\0\0\0vendor/psr/log/Psr/Log/AbstractLogger.php;\ 4\0\0\92àqZ;\ 4\0\0ñ>3[¶\ 1\0\0\0\0\0\03\0\0\0vendor/psr/log/Psr/Log/InvalidArgumentException.php`\0\0\0\92àqZ`\0\0\0 \88X1¶\ 1\0\0\0\0\0\0#\0\0\0vendor/psr/log/Psr/Log/LogLevel.phpû\0\0\0\92àqZû\0\0\0jðñ8¶\ 1\0\0\0\0\0\0/\0\0\0vendor/psr/log/Psr/Log/LoggerAwareInterface.php|\0\0\0\92àqZ|\0\0\0$\13£\88\ 1\0\0\0\0\0\0+\0\0\0vendor/psr/log/Psr/Log/LoggerAwareTrait.php§\0\0\0\92àqZ§\0\0\0T½úB¶\ 1\0\0\0\0\0\0*\0\0\0vendor/psr/log/Psr/Log/LoggerInterface.phpÆ\ 2\0\0\92àqZÆ\ 2\0\0»\12sg¶\ 1\0\0\0\0\0\0&\0\0\0vendor/psr/log/Psr/Log/LoggerTrait.phpi\ 4\0\0\92àqZi\ 4\0\035§Þ¶\ 1\0\0\0\0\0\0%\0\0\0vendor/psr/log/Psr/Log/NullLogger.php\9e\0\0\0\92àqZ\9e\0\0\0Ç\ 2Ã\1f\ 1\0\0\0\0\0\03\0\0\0vendor/psr/log/Psr/Log/Test/LoggerInterfaceTest.phpü\f\0\0\92àqZü\f\0\0iq0ض\ 1\0\0\0\0\0\0\13\0\0\0vendor/autoload.php\82\0\0\0\92àqZ\82\0\0\0£û}ä¶\ 1\0\0\0\0\0\0'\0\0\0vendor/composer/autoload_namespaces.phpd\0\0\0\92àqZd\0\0\0Z¡¦H¶\ 1\0\0\0\0\0\0!\0\0\0vendor/composer/autoload_psr4.php\98\ 4\0\0\92àqZ\98\ 4\0\0\9e\1c{¢¶\ 1\0\0\0\0\0\0%\0\0\0vendor/composer/autoload_classmap.phpd\0\0\0\92àqZd\0\0\0Z¡¦H¶\ 1\0\0\0\0\0\0"\0\0\0vendor/composer/autoload_files.phpÃ\0\0\0\92àqZÃ\0\0\0ÒÂür¶\ 1\0\0\0\0\0\0!\0\0\0vendor/composer/autoload_real.phpI\a\0\0\92àqZI\a\0\0çÝ\18\ 1\0\0\0\0\0\0#\0\0\0vendor/composer/autoload_static.php¬  \0\0\92àqZ¬ \0\0bU\93è¶\ 1\0\0\0\0\0\0\1f\0\0\0vendor/composer/ClassLoader.php\81\18\0\0\92àqZ\81\18\0\0\82Aãd¶\ 1\0\0\0\0\0\0(\0\0\0vendor/composer/ca-bundle/res/cacert.pem\1d\9a\ 3\0\92àqZ\1d\9a\ 3\0\1aÛ¾§¶\ 1\0\0\0\0\0\0\f\0\0\0bin/composer \ 6\0\0\92àqZ \ 6\0\0Ð\7f\9e\ 1\0\0\0\0\0\0\a\0\0\0LICENSE.\ 4\0\0\92àqZ.\ 4\0\0 Õ\b\ 3\ 1\0\0\0\0\0\0<?php
63
64
65
66
67
68
69
70
71
72
73
74 namespace Composer\Autoload;
75
76 use Composer\Config;
77 use Composer\EventDispatcher\EventDispatcher;
78 use Composer\Installer\InstallationManager;
79 use Composer\IO\IOInterface;
80 use Composer\Package\AliasPackage;
81 use Composer\Package\PackageInterface;
82 use Composer\Repository\InstalledRepositoryInterface;
83 use Composer\Util\Filesystem;
84 use Composer\Script\ScriptEvents;
85
86
87
88
89
90 class AutoloadGenerator
91 {
92
93
94
95 private $eventDispatcher;
96
97
98
99
100 private $io;
101
102
103
104
105 private $devMode = false;
106
107
108
109
110 private $classMapAuthoritative = false;
111
112
113
114
115 private $apcu = false;
116
117
118
119
120 private $runScripts = false;
121
122 public function __construct(EventDispatcher $eventDispatcher, IOInterface $io = null)
123 {
124 $this->eventDispatcher = $eventDispatcher;
125 $this->io = $io;
126 }
127
128 public function setDevMode($devMode = true)
129 {
130 $this->devMode = (bool) $devMode;
131 }
132
133
134
135
136
137
138
139 public function setClassMapAuthoritative($classMapAuthoritative)
140 {
141 $this->classMapAuthoritative = (bool) $classMapAuthoritative;
142 }
143
144
145
146
147
148
149 public function setApcu($apcu)
150 {
151 $this->apcu = (bool) $apcu;
152 }
153
154
155
156
157
158
159 public function setRunScripts($runScripts = true)
160 {
161 $this->runScripts = (bool) $runScripts;
162 }
163
164 public function dump(Config $config, InstalledRepositoryInterface $localRepo, PackageInterface $mainPackage, InstallationManager $installationManager, $targetDir, $scanPsr0Packages = false, $suffix = '')
165 {
166 if ($this->classMapAuthoritative) {
167
168  $scanPsr0Packages = true;
169 }
170 if ($this->runScripts) {
171 $this->eventDispatcher->dispatchScript(ScriptEvents::PRE_AUTOLOAD_DUMP, $this->devMode, array(), array(
172 'optimize' => (bool) $scanPsr0Packages,
173 ));
174 }
175
176 $filesystem = new Filesystem();
177 $filesystem->ensureDirectoryExists($config->get('vendor-dir'));
178
179  
180  
181  $basePath = $filesystem->normalizePath(realpath(realpath(getcwd())));
182 $vendorPath = $filesystem->normalizePath(realpath(realpath($config->get('vendor-dir'))));
183 $useGlobalIncludePath = (bool) $config->get('use-include-path');
184 $prependAutoloader = $config->get('prepend-autoloader') === false ? 'false' : 'true';
185 $targetDir = $vendorPath.'/'.$targetDir;
186 $filesystem->ensureDirectoryExists($targetDir);
187
188 $vendorPathCode = $filesystem->findShortestPathCode(realpath($targetDir), $vendorPath, true);
189 $vendorPathCode52 = str_replace('__DIR__', 'dirname(__FILE__)', $vendorPathCode);
190 $vendorPathToTargetDirCode = $filesystem->findShortestPathCode($vendorPath, realpath($targetDir), true);
191
192 $appBaseDirCode = $filesystem->findShortestPathCode($vendorPath, $basePath, true);
193 $appBaseDirCode = str_replace('__DIR__', '$vendorDir', $appBaseDirCode);
194
195 $namespacesFile = <<<EOF
196 <?php
197
198 // autoload_namespaces.php @generated by Composer
199
200 \$vendorDir = $vendorPathCode52;
201 \$baseDir = $appBaseDirCode;
202
203 return array(
204
205 EOF;
206
207 $psr4File = <<<EOF
208 <?php
209
210 // autoload_psr4.php @generated by Composer
211
212 \$vendorDir = $vendorPathCode52;
213 \$baseDir = $appBaseDirCode;
214
215 return array(
216
217 EOF;
218
219
220  $packageMap = $this->buildPackageMap($installationManager, $mainPackage, $localRepo->getCanonicalPackages());
221 $autoloads = $this->parseAutoloads($packageMap, $mainPackage);
222
223
224  foreach ($autoloads['psr-0'] as $namespace => $paths) {
225 $exportedPaths = array();
226 foreach ($paths as $path) {
227 $exportedPaths[] = $this->getPathCode($filesystem, $basePath, $vendorPath, $path);
228 }
229 $exportedPrefix = var_export($namespace, true);
230 $namespacesFile .= "    $exportedPrefix => ";
231 $namespacesFile .= "array(".implode(', ', $exportedPaths)."),\n";
232 }
233 $namespacesFile .= ");\n";
234
235
236  foreach ($autoloads['psr-4'] as $namespace => $paths) {
237 $exportedPaths = array();
238 foreach ($paths as $path) {
239 $exportedPaths[] = $this->getPathCode($filesystem, $basePath, $vendorPath, $path);
240 }
241 $exportedPrefix = var_export($namespace, true);
242 $psr4File .= "    $exportedPrefix => ";
243 $psr4File .= "array(".implode(', ', $exportedPaths)."),\n";
244 }
245 $psr4File .= ");\n";
246
247 $classmapFile = <<<EOF
248 <?php
249
250 // autoload_classmap.php @generated by Composer
251
252 \$vendorDir = $vendorPathCode52;
253 \$baseDir = $appBaseDirCode;
254
255 return array(
256
257 EOF;
258
259
260  $targetDirLoader = null;
261 $mainAutoload = $mainPackage->getAutoload();
262 if ($mainPackage->getTargetDir() && !empty($mainAutoload['psr-0'])) {
263 $levels = substr_count($filesystem->normalizePath($mainPackage->getTargetDir()), '/') + 1;
264 $prefixes = implode(', ', array_map(function ($prefix) {
265 return var_export($prefix, true);
266 }, array_keys($mainAutoload['psr-0'])));
267 $baseDirFromTargetDirCode = $filesystem->findShortestPathCode($targetDir, $basePath, true);
268
269 $targetDirLoader = <<<EOF
270
271     public static function autoload(\$class)
272     {
273         \$dir = $baseDirFromTargetDirCode . '/';
274         \$prefixes = array($prefixes);
275         foreach (\$prefixes as \$prefix) {
276             if (0 !== strpos(\$class, \$prefix)) {
277                 continue;
278             }
279             \$path = \$dir . implode('/', array_slice(explode('\\\\', \$class), $levels)).'.php';
280             if (!\$path = stream_resolve_include_path(\$path)) {
281                 return false;
282             }
283             require \$path;
284
285             return true;
286         }
287     }
288
289 EOF;
290 }
291
292 $blacklist = null;
293 if (!empty($autoloads['exclude-from-classmap'])) {
294 $blacklist = '{(' . implode('|', $autoloads['exclude-from-classmap']) . ')}';
295 }
296
297
298  $classMap = array();
299 if ($scanPsr0Packages) {
300 $namespacesToScan = array();
301
302
303  foreach (array('psr-0', 'psr-4') as $psrType) {
304 foreach ($autoloads[$psrType] as $namespace => $paths) {
305 $namespacesToScan[$namespace][] = array('paths' => $paths, 'type' => $psrType);
306 }
307 }
308
309 krsort($namespacesToScan);
310
311 foreach ($namespacesToScan as $namespace => $groups) {
312 foreach ($groups as $group) {
313 foreach ($group['paths'] as $dir) {
314 $dir = $filesystem->normalizePath($filesystem->isAbsolutePath($dir) ? $dir : $basePath.'/'.$dir);
315 if (!is_dir($dir)) {
316 continue;
317 }
318
319 $namespaceFilter = $namespace === '' ? null : $namespace;
320 $classMap = $this->addClassMapCode($filesystem, $basePath, $vendorPath, $dir, $blacklist, $namespaceFilter, $classMap);
321 }
322 }
323 }
324 }
325
326 foreach ($autoloads['classmap'] as $dir) {
327 $classMap = $this->addClassMapCode($filesystem, $basePath, $vendorPath, $dir, $blacklist, null, $classMap);
328 }
329
330 ksort($classMap);
331 foreach ($classMap as $class => $code) {
332 $classmapFile .= '    '.var_export($class, true).' => '.$code;
333 }
334 $classmapFile .= ");\n";
335
336 if (!$suffix) {
337 if (!$config->get('autoloader-suffix') && is_readable($vendorPath.'/autoload.php')) {
338 $content = file_get_contents($vendorPath.'/autoload.php');
339 if (preg_match('{ComposerAutoloaderInit([^:\s]+)::}', $content, $match)) {
340 $suffix = $match[1];
341 }
342 }
343
344 if (!$suffix) {
345 $suffix = $config->get('autoloader-suffix') ?: md5(uniqid('', true));
346 }
347 }
348
349 file_put_contents($targetDir.'/autoload_namespaces.php', $namespacesFile);
350 file_put_contents($targetDir.'/autoload_psr4.php', $psr4File);
351 file_put_contents($targetDir.'/autoload_classmap.php', $classmapFile);
352 $includePathFilePath = $targetDir.'/include_paths.php';
353 if ($includePathFileContents = $this->getIncludePathsFile($packageMap, $filesystem, $basePath, $vendorPath, $vendorPathCode52, $appBaseDirCode)) {
354 file_put_contents($includePathFilePath, $includePathFileContents);
355 } elseif (file_exists($includePathFilePath)) {
356 unlink($includePathFilePath);
357 }
358 $includeFilesFilePath = $targetDir.'/autoload_files.php';
359 if ($includeFilesFileContents = $this->getIncludeFilesFile($autoloads['files'], $filesystem, $basePath, $vendorPath, $vendorPathCode52, $appBaseDirCode)) {
360 file_put_contents($includeFilesFilePath, $includeFilesFileContents);
361 } elseif (file_exists($includeFilesFilePath)) {
362 unlink($includeFilesFilePath);
363 }
364 file_put_contents($targetDir.'/autoload_static.php', $this->getStaticFile($suffix, $targetDir, $vendorPath, $basePath, $staticPhpVersion));
365 file_put_contents($vendorPath.'/autoload.php', $this->getAutoloadFile($vendorPathToTargetDirCode, $suffix));
366 file_put_contents($targetDir.'/autoload_real.php', $this->getAutoloadRealFile(true, (bool) $includePathFileContents, $targetDirLoader, (bool) $includeFilesFileContents, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath, $prependAutoloader, $staticPhpVersion));
367
368 $this->safeCopy(__DIR__.'/ClassLoader.php', $targetDir.'/ClassLoader.php');
369 $this->safeCopy(__DIR__.'/../../../LICENSE', $targetDir.'/LICENSE');
370
371 if ($this->runScripts) {
372 $this->eventDispatcher->dispatchScript(ScriptEvents::POST_AUTOLOAD_DUMP, $this->devMode, array(), array(
373 'optimize' => (bool) $scanPsr0Packages,
374 ));
375 }
376 }
377
378 private function addClassMapCode($filesystem, $basePath, $vendorPath, $dir, $blacklist = null, $namespaceFilter = null, array $classMap = array())
379 {
380 foreach ($this->generateClassMap($dir, $blacklist, $namespaceFilter) as $class => $path) {
381 $pathCode = $this->getPathCode($filesystem, $basePath, $vendorPath, $path).",\n";
382 if (!isset($classMap[$class])) {
383 $classMap[$class] = $pathCode;
384 } elseif ($this->io && $classMap[$class] !== $pathCode && !preg_match('{/(test|fixture|example|stub)s?/}i', strtr($classMap[$class].' '.$path, '\\', '/'))) {
385 $this->io->writeError(
386 '<warning>Warning: Ambiguous class resolution, "'.$class.'"'.
387 ' was found in both "'.str_replace(array('$vendorDir . \'', "',\n"), array($vendorPath, ''), $classMap[$class]).'" and "'.$path.'", the first will be used.</warning>'
388 );
389 }
390 }
391
392 return $classMap;
393 }
394
395 private function generateClassMap($dir, $blacklist = null, $namespaceFilter = null, $showAmbiguousWarning = true)
396 {
397 return ClassMapGenerator::createMap($dir, $blacklist, $showAmbiguousWarning ? $this->io : null, $namespaceFilter);
398 }
399
400 public function buildPackageMap(InstallationManager $installationManager, PackageInterface $mainPackage, array $packages)
401 {
402
403  $packageMap = array(array($mainPackage, ''));
404
405 foreach ($packages as $package) {
406 if ($package instanceof AliasPackage) {
407 continue;
408 }
409 $this->validatePackage($package);
410
411 $packageMap[] = array(
412 $package,
413 $installationManager->getInstallPath($package),
414 );
415 }
416
417 return $packageMap;
418 }
419
420
421
422
423
424
425 protected function validatePackage(PackageInterface $package)
426 {
427 $autoload = $package->getAutoload();
428 if (!empty($autoload['psr-4']) && null !== $package->getTargetDir()) {
429 $name = $package->getName();
430 $package->getTargetDir();
431 throw new \InvalidArgumentException("PSR-4 autoloading is incompatible with the target-dir property, remove the target-dir in package '$name'.");
432 }
433 if (!empty($autoload['psr-4'])) {
434 foreach ($autoload['psr-4'] as $namespace => $dirs) {
435 if ($namespace !== '' && '\\' !== substr($namespace, -1)) {
436 throw new \InvalidArgumentException("psr-4 namespaces must end with a namespace separator, '$namespace' does not, use '$namespace\\'.");
437 }
438 }
439 }
440 }
441
442
443
444
445
446
447
448
449 public function parseAutoloads(array $packageMap, PackageInterface $mainPackage)
450 {
451 $mainPackageMap = array_shift($packageMap);
452 $sortedPackageMap = $this->sortPackageMap($packageMap);
453 $sortedPackageMap[] = $mainPackageMap;
454 array_unshift($packageMap, $mainPackageMap);
455
456 $psr0 = $this->parseAutoloadsType($packageMap, 'psr-0', $mainPackage);
457 $psr4 = $this->parseAutoloadsType($packageMap, 'psr-4', $mainPackage);
458 $classmap = $this->parseAutoloadsType(array_reverse($sortedPackageMap), 'classmap', $mainPackage);
459 $files = $this->parseAutoloadsType($sortedPackageMap, 'files', $mainPackage);
460 $exclude = $this->parseAutoloadsType($sortedPackageMap, 'exclude-from-classmap', $mainPackage);
461
462 krsort($psr0);
463 krsort($psr4);
464
465 return array(
466 'psr-0' => $psr0,
467 'psr-4' => $psr4,
468 'classmap' => $classmap,
469 'files' => $files,
470 'exclude-from-classmap' => $exclude,
471 );
472 }
473
474
475
476
477
478
479
480 public function createLoader(array $autoloads)
481 {
482 $loader = new ClassLoader();
483
484 if (isset($autoloads['psr-0'])) {
485 foreach ($autoloads['psr-0'] as $namespace => $path) {
486 $loader->add($namespace, $path);
487 }
488 }
489
490 if (isset($autoloads['psr-4'])) {
491 foreach ($autoloads['psr-4'] as $namespace => $path) {
492 $loader->addPsr4($namespace, $path);
493 }
494 }
495
496 if (isset($autoloads['classmap'])) {
497 $blacklist = null;
498 if (!empty($autoloads['exclude-from-classmap'])) {
499 $blacklist = '{(' . implode('|', $autoloads['exclude-from-classmap']) . ')}';
500 }
501
502 foreach ($autoloads['classmap'] as $dir) {
503 try {
504 $loader->addClassMap($this->generateClassMap($dir, $blacklist, null, false));
505 } catch (\RuntimeException $e) {
506 $this->io->writeError('<warning>'.$e->getMessage().'</warning>');
507 }
508 }
509 }
510
511 return $loader;
512 }
513
514 protected function getIncludePathsFile(array $packageMap, Filesystem $filesystem, $basePath, $vendorPath, $vendorPathCode, $appBaseDirCode)
515 {
516 $includePaths = array();
517
518 foreach ($packageMap as $item) {
519 list($package, $installPath) = $item;
520
521 if (null !== $package->getTargetDir() && strlen($package->getTargetDir()) > 0) {
522 $installPath = substr($installPath, 0, -strlen('/'.$package->getTargetDir()));
523 }
524
525 foreach ($package->getIncludePaths() as $includePath) {
526 $includePath = trim($includePath, '/');
527 $includePaths[] = empty($installPath) ? $includePath : $installPath.'/'.$includePath;
528 }
529 }
530
531 if (!$includePaths) {
532 return;
533 }
534
535 $includePathsCode = '';
536 foreach ($includePaths as $path) {
537 $includePathsCode .= "    " . $this->getPathCode($filesystem, $basePath, $vendorPath, $path) . ",\n";
538 }
539
540 return <<<EOF
541 <?php
542
543 // include_paths.php @generated by Composer
544
545 \$vendorDir = $vendorPathCode;
546 \$baseDir = $appBaseDirCode;
547
548 return array(
549 $includePathsCode);
550
551 EOF;
552 }
553
554 protected function getIncludeFilesFile(array $files, Filesystem $filesystem, $basePath, $vendorPath, $vendorPathCode, $appBaseDirCode)
555 {
556 $filesCode = '';
557 foreach ($files as $fileIdentifier => $functionFile) {
558 $filesCode .= '    ' . var_export($fileIdentifier, true) . ' => '
559 . $this->getPathCode($filesystem, $basePath, $vendorPath, $functionFile) . ",\n";
560 }
561
562 if (!$filesCode) {
563 return false;
564 }
565
566 return <<<EOF
567 <?php
568
569 // autoload_files.php @generated by Composer
570
571 \$vendorDir = $vendorPathCode;
572 \$baseDir = $appBaseDirCode;
573
574 return array(
575 $filesCode);
576
577 EOF;
578 }
579
580 protected function getPathCode(Filesystem $filesystem, $basePath, $vendorPath, $path)
581 {
582 if (!$filesystem->isAbsolutePath($path)) {
583 $path = $basePath . '/' . $path;
584 }
585 $path = $filesystem->normalizePath($path);
586
587 $baseDir = '';
588 if (strpos($path.'/', $vendorPath.'/') === 0) {
589 $path = substr($path, strlen($vendorPath));
590 $baseDir = '$vendorDir';
591
592 if ($path !== false) {
593 $baseDir .= " . ";
594 }
595 } else {
596 $path = $filesystem->normalizePath($filesystem->findShortestPath($basePath, $path, true));
597 if (!$filesystem->isAbsolutePath($path)) {
598 $baseDir = '$baseDir . ';
599 $path = '/' . $path;
600 }
601 }
602
603 if (preg_match('/\.phar.+$/', $path)) {
604 $baseDir = "'phar://' . " . $baseDir;
605 }
606
607 return $baseDir . (($path !== false) ? var_export($path, true) : "");
608 }
609
610 protected function getAutoloadFile($vendorPathToTargetDirCode, $suffix)
611 {
612 $lastChar = $vendorPathToTargetDirCode[strlen($vendorPathToTargetDirCode) - 1];
613 if ("'" === $lastChar || '"' === $lastChar) {
614 $vendorPathToTargetDirCode = substr($vendorPathToTargetDirCode, 0, -1).'/autoload_real.php'.$lastChar;
615 } else {
616 $vendorPathToTargetDirCode .= " . '/autoload_real.php'";
617 }
618
619 return <<<AUTOLOAD
620 <?php
621
622 // autoload.php @generated by Composer
623
624 require_once $vendorPathToTargetDirCode;
625
626 return ComposerAutoloaderInit$suffix::getLoader();
627
628 AUTOLOAD;
629 }
630
631 protected function getAutoloadRealFile($useClassMap, $useIncludePath, $targetDirLoader, $useIncludeFiles, $vendorPathCode, $appBaseDirCode, $suffix, $useGlobalIncludePath, $prependAutoloader, $staticPhpVersion = 70000)
632 {
633 $file = <<<HEADER
634 <?php
635
636 // autoload_real.php @generated by Composer
637
638 class ComposerAutoloaderInit$suffix
639 {
640     private static \$loader;
641
642     public static function loadClassLoader(\$class)
643     {
644         if ('Composer\\Autoload\\ClassLoader' === \$class) {
645             require __DIR__ . '/ClassLoader.php';
646         }
647     }
648
649     public static function getLoader()
650     {
651         if (null !== self::\$loader) {
652             return self::\$loader;
653         }
654
655         spl_autoload_register(array('ComposerAutoloaderInit$suffix', 'loadClassLoader'), true, $prependAutoloader);
656         self::\$loader = \$loader = new \\Composer\\Autoload\\ClassLoader();
657         spl_autoload_unregister(array('ComposerAutoloaderInit$suffix', 'loadClassLoader'));
658
659
660 HEADER;
661
662 if ($useIncludePath) {
663 $file .= <<<'INCLUDE_PATH'
664         $includePaths = require __DIR__ . '/include_paths.php';
665         $includePaths[] = get_include_path();
666         set_include_path(implode(PATH_SEPARATOR, $includePaths));
667
668
669 INCLUDE_PATH;
670 }
671
672 $file .= <<<STATIC_INIT
673         \$useStaticLoader = PHP_VERSION_ID >= $staticPhpVersion && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
674         if (\$useStaticLoader) {
675             require_once __DIR__ . '/autoload_static.php';
676
677             call_user_func(\Composer\Autoload\ComposerStaticInit$suffix::getInitializer(\$loader));
678         } else {
679
680 STATIC_INIT;
681
682 if (!$this->classMapAuthoritative) {
683 $file .= <<<'PSR04'
684             $map = require __DIR__ . '/autoload_namespaces.php';
685             foreach ($map as $namespace => $path) {
686                 $loader->set($namespace, $path);
687             }
688
689             $map = require __DIR__ . '/autoload_psr4.php';
690             foreach ($map as $namespace => $path) {
691                 $loader->setPsr4($namespace, $path);
692             }
693
694
695 PSR04;
696 }
697
698 if ($useClassMap) {
699 $file .= <<<'CLASSMAP'
700             $classMap = require __DIR__ . '/autoload_classmap.php';
701             if ($classMap) {
702                 $loader->addClassMap($classMap);
703             }
704
705 CLASSMAP;
706 }
707
708 $file .= "        }\n\n";
709
710 if ($this->classMapAuthoritative) {
711 $file .= <<<'CLASSMAPAUTHORITATIVE'
712         $loader->setClassMapAuthoritative(true);
713
714 CLASSMAPAUTHORITATIVE;
715 }
716
717 if ($this->apcu) {
718 $apcuPrefix = substr(base64_encode(md5(uniqid('', true), true)), 0, -3);
719 $file .= <<<APCU
720         \$loader->setApcuPrefix('$apcuPrefix');
721
722 APCU;
723 }
724
725 if ($useGlobalIncludePath) {
726 $file .= <<<'INCLUDEPATH'
727         $loader->setUseIncludePath(true);
728
729 INCLUDEPATH;
730 }
731
732 if ($targetDirLoader) {
733 $file .= <<<REGISTER_TARGET_DIR_AUTOLOAD
734         spl_autoload_register(array('ComposerAutoloaderInit$suffix', 'autoload'), true, true);
735
736
737 REGISTER_TARGET_DIR_AUTOLOAD;
738 }
739
740 $file .= <<<REGISTER_LOADER
741         \$loader->register($prependAutoloader);
742
743
744 REGISTER_LOADER;
745
746 if ($useIncludeFiles) {
747 $file .= <<<INCLUDE_FILES
748         if (\$useStaticLoader) {
749             \$includeFiles = Composer\Autoload\ComposerStaticInit$suffix::\$files;
750         } else {
751             \$includeFiles = require __DIR__ . '/autoload_files.php';
752         }
753         foreach (\$includeFiles as \$fileIdentifier => \$file) {
754             composerRequire$suffix(\$fileIdentifier, \$file);
755         }
756
757
758 INCLUDE_FILES;
759 }
760
761 $file .= <<<METHOD_FOOTER
762         return \$loader;
763     }
764
765 METHOD_FOOTER;
766
767 $file .= $targetDirLoader;
768
769 if ($useIncludeFiles) {
770 return $file . <<<FOOTER
771 }
772
773 function composerRequire$suffix(\$fileIdentifier, \$file)
774 {
775     if (empty(\$GLOBALS['__composer_autoload_files'][\$fileIdentifier])) {
776         require \$file;
777
778         \$GLOBALS['__composer_autoload_files'][\$fileIdentifier] = true;
779     }
780 }
781
782 FOOTER;
783 }
784
785 return $file . <<<FOOTER
786 }
787
788 FOOTER;
789 }
790
791 protected function getStaticFile($suffix, $targetDir, $vendorPath, $basePath, &$staticPhpVersion)
792 {
793 $staticPhpVersion = 50600;
794
795 $file = <<<HEADER
796 <?php
797
798 // autoload_static.php @generated by Composer
799
800 namespace Composer\Autoload;
801
802 class ComposerStaticInit$suffix
803 {
804
805 HEADER;
806
807 $loader = new ClassLoader();
808
809 $map = require $targetDir . '/autoload_namespaces.php';
810 foreach ($map as $namespace => $path) {
811 $loader->set($namespace, $path);
812 }
813
814 $map = require $targetDir . '/autoload_psr4.php';
815 foreach ($map as $namespace => $path) {
816 $loader->setPsr4($namespace, $path);
817 }
818
819 $classMap = require $targetDir . '/autoload_classmap.php';
820 if ($classMap) {
821 $loader->addClassMap($classMap);
822 }
823
824 $filesystem = new Filesystem();
825
826 $vendorPathCode = ' => ' . $filesystem->findShortestPathCode(realpath($targetDir), $vendorPath, true, true) . " . '/";
827 $appBaseDirCode = ' => ' . $filesystem->findShortestPathCode(realpath($targetDir), $basePath, true, true) . " . '/";
828
829 $absoluteVendorPathCode = ' => ' . substr(var_export(rtrim($vendorDir, '\\/') . '/', true), 0, -1);
830 $absoluteAppBaseDirCode = ' => ' . substr(var_export(rtrim($baseDir, '\\/') . '/', true), 0, -1);
831
832 $initializer = '';
833 $prefix = "\0Composer\Autoload\ClassLoader\0";
834 $prefixLen = strlen($prefix);
835 if (file_exists($targetDir . '/autoload_files.php')) {
836 $maps = array('files' => require $targetDir . '/autoload_files.php');
837 } else {
838 $maps = array();
839 }
840
841 foreach ((array) $loader as $prop => $value) {
842 if ($value && 0 === strpos($prop, $prefix)) {
843 $maps[substr($prop, $prefixLen)] = $value;
844 }
845 }
846
847 foreach ($maps as $prop => $value) {
848 if (count($value) > 32767) {
849
850  
851  $staticPhpVersion = 70000;
852 }
853 $value = var_export($value, true);
854 $value = str_replace($absoluteVendorPathCode, $vendorPathCode, $value);
855 $value = str_replace($absoluteAppBaseDirCode, $appBaseDirCode, $value);
856 $value = ltrim(preg_replace('/^ */m', '    $0$0', $value));
857
858 $file .= sprintf("    public static $%s = %s;\n\n", $prop, $value);
859 if ('files' !== $prop) {
860 $initializer .= "            \$loader->$prop = ComposerStaticInit$suffix::\$$prop;\n";
861 }
862 }
863
864 return $file . <<<INITIALIZER
865     public static function getInitializer(ClassLoader \$loader)
866     {
867         return \Closure::bind(function () use (\$loader) {
868 $initializer
869         }, null, ClassLoader::class);
870     }
871 }
872
873 INITIALIZER;
874 }
875
876 protected function parseAutoloadsType(array $packageMap, $type, PackageInterface $mainPackage)
877 {
878 $autoloads = array();
879
880 foreach ($packageMap as $item) {
881 list($package, $installPath) = $item;
882
883 $autoload = $package->getAutoload();
884 if ($this->devMode && $package === $mainPackage) {
885 $autoload = array_merge_recursive($autoload, $package->getDevAutoload());
886 }
887
888
889  if (!isset($autoload[$type]) || !is_array($autoload[$type])) {
890 continue;
891 }
892 if (null !== $package->getTargetDir() && $package !== $mainPackage) {
893 $installPath = substr($installPath, 0, -strlen('/'.$package->getTargetDir()));
894 }
895
896 foreach ($autoload[$type] as $namespace => $paths) {
897 foreach ((array) $paths as $path) {
898 if (($type === 'files' || $type === 'classmap' || $type === 'exclude-from-classmap') && $package->getTargetDir() && !is_readable($installPath.'/'.$path)) {
899
900  if ($package === $mainPackage) {
901 $targetDir = str_replace('\\<dirsep\\>', '[\\\\/]', preg_quote(str_replace(array('/', '\\'), '<dirsep>', $package->getTargetDir())));
902 $path = ltrim(preg_replace('{^'.$targetDir.'}', '', ltrim($path, '\\/')), '\\/');
903 } else {
904
905  $path = $package->getTargetDir() . '/' . $path;
906 }
907 }
908
909 if ($type === 'exclude-from-classmap') {
910
911  $path = preg_replace('{/+}', '/', preg_quote(trim(strtr($path, '\\', '/'), '/')));
912
913
914  $path = str_replace('\\*\\*', '.+?', $path);
915 $path = str_replace('\\*', '[^/]+?', $path);
916
917
918  $updir = null;
919 $path = preg_replace_callback(
920 '{^((?:(?:\\\\\\.){1,2}+/)+)}',
921 function ($matches) use (&$updir) {
922 if (isset($matches[1])) {
923
924  $updir = str_replace('\\.', '.', $matches[1]);
925 }
926
927 return '';
928 },
929 $path
930 );
931 if (empty($installPath)) {
932 $installPath = strtr(getcwd(), '\\', '/');
933 }
934
935 $resolvedPath = realpath($installPath . '/' . $updir);
936 $autoloads[] = preg_quote(strtr($resolvedPath, '\\', '/')) . '/' . $path;
937 continue;
938 }
939
940 $relativePath = empty($installPath) ? (empty($path) ? '.' : $path) : $installPath.'/'.$path;
941
942 if ($type === 'files') {
943 $autoloads[$this->getFileIdentifier($package, $path)] = $relativePath;
944 continue;
945 } elseif ($type === 'classmap') {
946 $autoloads[] = $relativePath;
947 continue;
948 }
949
950 $autoloads[$namespace][] = $relativePath;
951 }
952 }
953 }
954
955 return $autoloads;
956 }
957
958 protected function getFileIdentifier(PackageInterface $package, $path)
959 {
960 return md5($package->getName() . ':' . $path);
961 }
962
963
964
965
966
967
968
969
970
971 protected function sortPackageMap(array $packageMap)
972 {
973 $packages = array();
974 $paths = array();
975 $usageList = array();
976
977 foreach ($packageMap as $item) {
978 list($package, $path) = $item;
979 $name = $package->getName();
980 $packages[$name] = $package;
981 $paths[$name] = $path;
982
983 foreach (array_merge($package->getRequires(), $package->getDevRequires()) as $link) {
984 $target = $link->getTarget();
985 $usageList[$target][] = $name;
986 }
987 }
988
989 $computing = array();
990 $computed = array();
991 $computeImportance = function ($name) use (&$computeImportance, &$computing, &$computed, $usageList) {
992
993  if (isset($computed[$name])) {
994 return $computed[$name];
995 }
996
997
998  if (isset($computing[$name])) {
999 return 0;
1000 }
1001
1002 $computing[$name] = true;
1003 $weight = 0;
1004
1005 if (isset($usageList[$name])) {
1006 foreach ($usageList[$name] as $user) {
1007 $weight -= 1 - $computeImportance($user);
1008 }
1009 }
1010
1011 unset($computing[$name]);
1012 $computed[$name] = $weight;
1013
1014 return $weight;
1015 };
1016
1017 $weightList = array();
1018
1019 foreach ($packages as $name => $package) {
1020 $weight = $computeImportance($name);
1021 $weightList[$name] = $weight;
1022 }
1023
1024 $stable_sort = function (&$array) {
1025 static $transform, $restore;
1026
1027 $i = 0;
1028
1029 if (!$transform) {
1030 $transform = function (&$v, $k) use (&$i) {
1031 $v = array($v, ++$i, $k, $v);
1032 };
1033
1034 $restore = function (&$v, $k) {
1035 $v = $v[3];
1036 };
1037 }
1038
1039 array_walk($array, $transform);
1040 asort($array);
1041 array_walk($array, $restore);
1042 };
1043
1044 $stable_sort($weightList);
1045
1046 $sortedPackageMap = array();
1047
1048 foreach (array_keys($weightList) as $name) {
1049 $sortedPackageMap[] = array($packages[$name], $paths[$name]);
1050 }
1051
1052 return $sortedPackageMap;
1053 }
1054
1055
1056
1057
1058
1059
1060
1061 protected function safeCopy($source, $target)
1062 {
1063 $source = fopen($source, 'r');
1064 $target = fopen($target, 'w+');
1065
1066 stream_copy_to_stream($source, $target);
1067 fclose($source);
1068 fclose($target);
1069 }
1070 }
1071 <?php
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089 namespace Composer\Autoload;
1090
1091 use Symfony\Component\Finder\Finder;
1092 use Composer\IO\IOInterface;
1093 use Composer\Util\Filesystem;
1094
1095
1096
1097
1098
1099
1100
1101 class ClassMapGenerator
1102 {
1103
1104
1105
1106
1107
1108
1109 public static function dump($dirs, $file)
1110 {
1111 $maps = array();
1112
1113 foreach ($dirs as $dir) {
1114 $maps = array_merge($maps, static::createMap($dir));
1115 }
1116
1117 file_put_contents($file, sprintf('<?php return %s;', var_export($maps, true)));
1118 }
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131 public static function createMap($path, $blacklist = null, IOInterface $io = null, $namespace = null)
1132 {
1133 if (is_string($path)) {
1134 if (is_file($path)) {
1135 $path = array(new \SplFileInfo($path));
1136 } elseif (is_dir($path)) {
1137 $path = Finder::create()->files()->followLinks()->name('/\.(php|inc|hh)$/')->in($path);
1138 } else {
1139 throw new \RuntimeException(
1140 'Could not scan for classes inside "'.$path.
1141 '" which does not appear to be a file nor a folder'
1142 );
1143 }
1144 }
1145
1146 $map = array();
1147 $filesystem = new Filesystem();
1148 $cwd = realpath(getcwd());
1149
1150 foreach ($path as $file) {
1151 $filePath = $file->getPathname();
1152 if (!in_array(pathinfo($filePath, PATHINFO_EXTENSION), array('php', 'inc', 'hh'))) {
1153 continue;
1154 }
1155
1156 if (!$filesystem->isAbsolutePath($filePath)) {
1157 $filePath = $cwd . '/' . $filePath;
1158 $filePath = $filesystem->normalizePath($filePath);
1159 } else {
1160 $filePath = preg_replace('{[\\\\/]{2,}}', '/', $filePath);
1161 }
1162
1163
1164  if ($blacklist && preg_match($blacklist, strtr(realpath($filePath), '\\', '/'))) {
1165 continue;
1166 }
1167
1168 $classes = self::findClasses($filePath);
1169
1170 foreach ($classes as $class) {
1171
1172  if (null !== $namespace && 0 !== strpos($class, $namespace)) {
1173 continue;
1174 }
1175
1176 if (!isset($map[$class])) {
1177 $map[$class] = $filePath;
1178 } elseif ($io && $map[$class] !== $filePath && !preg_match('{/(test|fixture|example|stub)s?/}i', strtr($map[$class].' '.$filePath, '\\', '/'))) {
1179 $io->writeError(
1180 '<warning>Warning: Ambiguous class resolution, "'.$class.'"'.
1181 ' was found in both "'.$map[$class].'" and "'.$filePath.'", the first will be used.</warning>'
1182 );
1183 }
1184 }
1185 }
1186
1187 return $map;
1188 }
1189
1190
1191
1192
1193
1194
1195
1196
1197 private static function findClasses($path)
1198 {
1199 $extraTypes = PHP_VERSION_ID < 50400 ? '' : '|trait';
1200 if (defined('HHVM_VERSION') && version_compare(HHVM_VERSION, '3.3', '>=')) {
1201 $extraTypes .= '|enum';
1202 }
1203
1204
1205  
1206  $contents = @php_strip_whitespace($path);
1207 if (!$contents) {
1208 if (!file_exists($path)) {
1209 $message = 'File at "%s" does not exist, check your classmap definitions';
1210 } elseif (!is_readable($path)) {
1211 $message = 'File at "%s" is not readable, check its permissions';
1212 } elseif ('' === trim(file_get_contents($path))) {
1213
1214  return array();
1215 } else {
1216 $message = 'File at "%s" could not be parsed as PHP, it may be binary or corrupted';
1217 }
1218 $error = error_get_last();
1219 if (isset($error['message'])) {
1220 $message .= PHP_EOL . 'The following message may be helpful:' . PHP_EOL . $error['message'];
1221 }
1222 throw new \RuntimeException(sprintf($message, $path));
1223 }
1224
1225
1226  if (!preg_match('{\b(?:class|interface'.$extraTypes.')\s}i', $contents)) {
1227 return array();
1228 }
1229
1230
1231  $contents = preg_replace('{<<<\s*(\'?)(\w+)\\1(?:\r\n|\n|\r)(?:.*?)(?:\r\n|\n|\r)\\2(?=\r\n|\n|\r|;)}s', 'null', $contents);
1232
1233  $contents = preg_replace('{"[^"\\\\]*+(\\\\.[^"\\\\]*+)*+"|\'[^\'\\\\]*+(\\\\.[^\'\\\\]*+)*+\'}s', 'null', $contents);
1234
1235  if (substr($contents, 0, 2) !== '<?') {
1236 $contents = preg_replace('{^.+?<\?}s', '<?', $contents, 1, $replacements);
1237 if ($replacements === 0) {
1238 return array();
1239 }
1240 }
1241
1242  $contents = preg_replace('{\?>.+<\?}s', '?><?', $contents);
1243
1244  $pos = strrpos($contents, '?>');
1245 if (false !== $pos && false === strpos(substr($contents, $pos), '<?')) {
1246 $contents = substr($contents, 0, $pos);
1247 }
1248
1249 preg_match_all('{
1250             (?:
1251                  \b(?<![\$:>])(?P<type>class|interface'.$extraTypes.') \s++ (?P<name>[a-zA-Z_\x7f-\xff:][a-zA-Z0-9_\x7f-\xff:\-]*+)
1252                | \b(?<![\$:>])(?P<ns>namespace) (?P<nsname>\s++[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+(?:\s*+\\\\\s*+[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*+)*+)? \s*+ [\{;]
1253             )
1254         }ix', $contents, $matches);
1255
1256 $classes = array();
1257 $namespace = '';
1258
1259 for ($i = 0, $len = count($matches['type']); $i < $len; $i++) {
1260 if (!empty($matches['ns'][$i])) {
1261 $namespace = str_replace(array(' ', "\t", "\r", "\n"), '', $matches['nsname'][$i]) . '\\';
1262 } else {
1263 $name = $matches['name'][$i];
1264
1265  if ($name === 'extends' || $name === 'implements') {
1266 continue;
1267 }
1268 if ($name[0] === ':') {
1269
1270  $name = 'xhp'.substr(str_replace(array('-', ':'), array('_', '__'), $name), 1);
1271 } elseif ($matches['type'][$i] === 'enum') {
1272
1273  
1274  
1275  
1276  $name = rtrim($name, ':');
1277 }
1278 $classes[] = ltrim($namespace . $name, '\\');
1279 }
1280 }
1281
1282 return $classes;
1283 }
1284 }
1285 <?php
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297 namespace Composer;
1298
1299 use Composer\IO\IOInterface;
1300 use Composer\Util\Filesystem;
1301 use Composer\Util\Silencer;
1302 use Symfony\Component\Finder\Finder;
1303
1304
1305
1306
1307
1308
1309 class Cache
1310 {
1311 private static $cacheCollected = false;
1312 private $io;
1313 private $root;
1314 private $enabled = true;
1315 private $whitelist;
1316 private $filesystem;
1317
1318
1319
1320
1321
1322
1323
1324 public function __construct(IOInterface $io, $cacheDir, $whitelist = 'a-z0-9.', Filesystem $filesystem = null)
1325 {
1326 $this->io = $io;
1327 $this->root = rtrim($cacheDir, '/\\') . '/';
1328 $this->whitelist = $whitelist;
1329 $this->filesystem = $filesystem ?: new Filesystem();
1330
1331 if (preg_match('{(^|[\\\\/])(\$null|NUL|/dev/null)([\\\\/]|$)}', $cacheDir)) {
1332 $this->enabled = false;
1333
1334 return;
1335 }
1336
1337 if (
1338 (!is_dir($this->root) && !Silencer::call('mkdir', $this->root, 0777, true))
1339 || !is_writable($this->root)
1340 ) {
1341 $this->io->writeError('<warning>Cannot create cache directory ' . $this->root . ', or directory is not writable. Proceeding without cache</warning>');
1342 $this->enabled = false;
1343 }
1344 }
1345
1346 public function isEnabled()
1347 {
1348 return $this->enabled;
1349 }
1350
1351 public function getRoot()
1352 {
1353 return $this->root;
1354 }
1355
1356 public function read($file)
1357 {
1358 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1359 if ($this->enabled && file_exists($this->root . $file)) {
1360 $this->io->writeError('Reading '.$this->root . $file.' from cache', true, IOInterface::DEBUG);
1361
1362 return file_get_contents($this->root . $file);
1363 }
1364
1365 return false;
1366 }
1367
1368 public function write($file, $contents)
1369 {
1370 if ($this->enabled) {
1371 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1372
1373 $this->io->writeError('Writing '.$this->root . $file.' into cache', true, IOInterface::DEBUG);
1374
1375 try {
1376 return file_put_contents($this->root . $file, $contents);
1377 } catch (\ErrorException $e) {
1378 $this->io->writeError('<warning>Failed to write into cache: '.$e->getMessage().'</warning>', true, IOInterface::DEBUG);
1379 if (preg_match('{^file_put_contents\(\): Only ([0-9]+) of ([0-9]+) bytes written}', $e->getMessage(), $m)) {
1380
1381  unlink($this->root . $file);
1382
1383 $message = sprintf(
1384 '<warning>Writing %1$s into cache failed after %2$u of %3$u bytes written, only %4$u bytes of free space available</warning>',
1385 $this->root . $file,
1386 $m[1],
1387 $m[2],
1388 @disk_free_space($this->root . dirname($file))
1389 );
1390
1391 $this->io->writeError($message);
1392
1393 return false;
1394 }
1395
1396 throw $e;
1397 }
1398 }
1399
1400 return false;
1401 }
1402
1403
1404
1405
1406 public function copyFrom($file, $source)
1407 {
1408 if ($this->enabled) {
1409 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1410 $this->filesystem->ensureDirectoryExists(dirname($this->root . $file));
1411
1412 if (!file_exists($source)) {
1413 $this->io->writeError('<error>'.$source.' does not exist, can not write into cache</error>');
1414 } elseif ($this->io->isDebug()) {
1415 $this->io->writeError('Writing '.$this->root . $file.' into cache from '.$source);
1416 }
1417
1418 return copy($source, $this->root . $file);
1419 }
1420
1421 return false;
1422 }
1423
1424
1425
1426
1427 public function copyTo($file, $target)
1428 {
1429 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1430 if ($this->enabled && file_exists($this->root . $file)) {
1431 try {
1432 touch($this->root . $file, filemtime($this->root . $file), time());
1433 } catch (\ErrorException $e) {
1434
1435  
1436  Silencer::call('touch', $this->root . $file);
1437 }
1438
1439 $this->io->writeError('Reading '.$this->root . $file.' from cache', true, IOInterface::DEBUG);
1440
1441 return copy($this->root . $file, $target);
1442 }
1443
1444 return false;
1445 }
1446
1447 public function gcIsNecessary()
1448 {
1449 return (!self::$cacheCollected && !mt_rand(0, 50));
1450 }
1451
1452 public function remove($file)
1453 {
1454 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1455 if ($this->enabled && file_exists($this->root . $file)) {
1456 return $this->filesystem->unlink($this->root . $file);
1457 }
1458
1459 return false;
1460 }
1461
1462 public function clear()
1463 {
1464 if ($this->enabled) {
1465 return $this->filesystem->removeDirectory($this->root);
1466 }
1467
1468 return false;
1469 }
1470
1471 public function gc($ttl, $maxSize)
1472 {
1473 if ($this->enabled) {
1474 $expire = new \DateTime();
1475 $expire->modify('-'.$ttl.' seconds');
1476
1477 $finder = $this->getFinder()->date('until '.$expire->format('Y-m-d H:i:s'));
1478 foreach ($finder as $file) {
1479 $this->filesystem->unlink($file->getPathname());
1480 }
1481
1482 $totalSize = $this->filesystem->size($this->root);
1483 if ($totalSize > $maxSize) {
1484 $iterator = $this->getFinder()->sortByAccessedTime()->getIterator();
1485 while ($totalSize > $maxSize && $iterator->valid()) {
1486 $filepath = $iterator->current()->getPathname();
1487 $totalSize -= $this->filesystem->size($filepath);
1488 $this->filesystem->unlink($filepath);
1489 $iterator->next();
1490 }
1491 }
1492
1493 self::$cacheCollected = true;
1494
1495 return true;
1496 }
1497
1498 return false;
1499 }
1500
1501 public function sha1($file)
1502 {
1503 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1504 if ($this->enabled && file_exists($this->root . $file)) {
1505 return sha1_file($this->root . $file);
1506 }
1507
1508 return false;
1509 }
1510
1511 public function sha256($file)
1512 {
1513 $file = preg_replace('{[^'.$this->whitelist.']}i', '-', $file);
1514 if ($this->enabled && file_exists($this->root . $file)) {
1515 return hash_file('sha256', $this->root . $file);
1516 }
1517
1518 return false;
1519 }
1520
1521 protected function getFinder()
1522 {
1523 return Finder::create()->in($this->root)->files();
1524 }
1525 }
1526 <?php
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538 namespace Composer\Command;
1539
1540 use Symfony\Component\Console\Input\InputInterface;
1541 use Symfony\Component\Console\Output\OutputInterface;
1542
1543
1544
1545
1546 class AboutCommand extends BaseCommand
1547 {
1548 protected function configure()
1549 {
1550 $this
1551 ->setName('about')
1552 ->setDescription('Shows the short information about Composer.')
1553 ->setHelp(<<<EOT
1554 <info>php composer.phar about</info>
1555 EOT
1556 )
1557 ;
1558 }
1559
1560 protected function execute(InputInterface $input, OutputInterface $output)
1561 {
1562 $this->getIO()->write(<<<EOT
1563 <info>Composer - Package Management for PHP</info>
1564 <comment>Composer is a dependency manager tracking local dependencies of your projects and libraries.
1565 See https://getcomposer.org/ for more information.</comment>
1566 EOT
1567 );
1568 }
1569 }
1570 <?php
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582 namespace Composer\Command;
1583
1584 use Composer\Factory;
1585 use Composer\IO\IOInterface;
1586 use Composer\Config;
1587 use Composer\Composer;
1588 use Composer\Repository\CompositeRepository;
1589 use Composer\Repository\RepositoryFactory;
1590 use Composer\Script\ScriptEvents;
1591 use Composer\Plugin\CommandEvent;
1592 use Composer\Plugin\PluginEvents;
1593 use Composer\Util\Filesystem;
1594 use Symfony\Component\Console\Input\InputArgument;
1595 use Symfony\Component\Console\Input\InputInterface;
1596 use Symfony\Component\Console\Input\InputOption;
1597 use Symfony\Component\Console\Output\OutputInterface;
1598
1599
1600
1601
1602
1603
1604 class ArchiveCommand extends BaseCommand
1605 {
1606 protected function configure()
1607 {
1608 $this
1609 ->setName('archive')
1610 ->setDescription('Creates an archive of this composer package.')
1611 ->setDefinition(array(
1612 new InputArgument('package', InputArgument::OPTIONAL, 'The package to archive instead of the current project'),
1613 new InputArgument('version', InputArgument::OPTIONAL, 'A version constraint to find the package to archive'),
1614 new InputOption('format', 'f', InputOption::VALUE_REQUIRED, 'Format of the resulting archive: tar or zip'),
1615 new InputOption('dir', null, InputOption::VALUE_REQUIRED, 'Write the archive to this directory'),
1616 new InputOption('file', null, InputOption::VALUE_REQUIRED, 'Write the archive with the given file name.'
1617 .' Note that the format will be appended.'),
1618 new InputOption('ignore-filters', false, InputOption::VALUE_NONE, 'Ignore filters when saving package'),
1619 ))
1620 ->setHelp(<<<EOT
1621 The <info>archive</info> command creates an archive of the specified format
1622 containing the files and directories of the Composer project or the specified
1623 package in the specified version and writes it to the specified directory.
1624
1625 <info>php composer.phar archive [--format=zip] [--dir=/foo] [package [version]]</info>
1626
1627 EOT
1628 )
1629 ;
1630 }
1631
1632 protected function execute(InputInterface $input, OutputInterface $output)
1633 {
1634 $config = Factory::createConfig();
1635 $composer = $this->getComposer(false);
1636 if ($composer) {
1637 $commandEvent = new CommandEvent(PluginEvents::COMMAND, 'archive', $input, $output);
1638 $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent);
1639 $composer->getEventDispatcher()->dispatchScript(ScriptEvents::PRE_ARCHIVE_CMD);
1640 }
1641
1642 if (null === $input->getOption('format')) {
1643 $input->setOption('format', $config->get('archive-format'));
1644 }
1645 if (null === $input->getOption('dir')) {
1646 $input->setOption('dir', $config->get('archive-dir'));
1647 }
1648
1649 $returnCode = $this->archive(
1650 $this->getIO(),
1651 $config,
1652 $input->getArgument('package'),
1653 $input->getArgument('version'),
1654 $input->getOption('format'),
1655 $input->getOption('dir'),
1656 $input->getOption('file'),
1657 $input->getOption('ignore-filters'),
1658 $composer
1659 );
1660
1661 if (0 === $returnCode && $composer) {
1662 $composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_ARCHIVE_CMD);
1663 }
1664
1665 return $returnCode;
1666 }
1667
1668 protected function archive(IOInterface $io, Config $config, $packageName = null, $version = null, $format = 'tar', $dest = '.', $fileName = null, $ignoreFilters = false, Composer $composer = null)
1669 {
1670 if ($composer) {
1671 $archiveManager = $composer->getArchiveManager();
1672 } else {
1673 $factory = new Factory;
1674 $downloadManager = $factory->createDownloadManager($io, $config);
1675 $archiveManager = $factory->createArchiveManager($config, $downloadManager);
1676 }
1677
1678 if ($packageName) {
1679 $package = $this->selectPackage($io, $packageName, $version);
1680
1681 if (!$package) {
1682 return 1;
1683 }
1684 } else {
1685 $package = $this->getComposer()->getPackage();
1686 }
1687
1688 $io->writeError('<info>Creating the archive into "'.$dest.'".</info>');
1689 $packagePath = $archiveManager->archive($package, $format, $dest, $fileName, $ignoreFilters);
1690 $fs = new Filesystem;
1691 $shortPath = $fs->findShortestPath(getcwd(), $packagePath, true);
1692
1693 $io->writeError('Created: ', false);
1694 $io->write(strlen($shortPath) < strlen($packagePath) ? $shortPath : $packagePath);
1695
1696 return 0;
1697 }
1698
1699 protected function selectPackage(IOInterface $io, $packageName, $version = null)
1700 {
1701 $io->writeError('<info>Searching for the specified package.</info>');
1702
1703 if ($composer = $this->getComposer(false)) {
1704 $localRepo = $composer->getRepositoryManager()->getLocalRepository();
1705 $repo = new CompositeRepository(array_merge(array($localRepo), $composer->getRepositoryManager()->getRepositories()));
1706 } else {
1707 $defaultRepos = RepositoryFactory::defaultRepos($this->getIO());
1708 $io->writeError('No composer.json found in the current directory, searching packages from ' . implode(', ', array_keys($defaultRepos)));
1709 $repo = new CompositeRepository($defaultRepos);
1710 }
1711
1712 $packages = $repo->findPackages($packageName, $version);
1713
1714 if (count($packages) > 1) {
1715 $package = reset($packages);
1716 $io->writeError('<info>Found multiple matches, selected '.$package->getPrettyString().'.</info>');
1717 $io->writeError('Alternatives were '.implode(', ', array_map(function ($p) {
1718 return $p->getPrettyString();
1719 }, $packages)).'.');
1720 $io->writeError('<comment>Please use a more specific constraint to pick a different package.</comment>');
1721 } elseif ($packages) {
1722 $package = reset($packages);
1723 $io->writeError('<info>Found an exact match '.$package->getPrettyString().'.</info>');
1724 } else {
1725 $io->writeError('<error>Could not find a package matching '.$packageName.'.</error>');
1726
1727 return false;
1728 }
1729
1730 return $package;
1731 }
1732 }
1733 <?php
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745 namespace Composer\Command;
1746
1747 use Composer\Composer;
1748 use Composer\Config;
1749 use Composer\Console\Application;
1750 use Composer\IO\IOInterface;
1751 use Composer\IO\NullIO;
1752 use Symfony\Component\Console\Input\InputInterface;
1753 use Symfony\Component\Console\Output\OutputInterface;
1754 use Symfony\Component\Console\Command\Command;
1755
1756
1757
1758
1759
1760
1761
1762 abstract class BaseCommand extends Command
1763 {
1764
1765
1766
1767 private $composer;
1768
1769
1770
1771
1772 private $io;
1773
1774
1775
1776
1777
1778
1779
1780 public function getComposer($required = true, $disablePlugins = null)
1781 {
1782 if (null === $this->composer) {
1783 $application = $this->getApplication();
1784 if ($application instanceof Application) {
1785
1786 $this->composer = $application->getComposer($required, $disablePlugins);
1787 } elseif ($required) {
1788 throw new \RuntimeException(
1789 'Could not create a Composer\Composer instance, you must inject '.
1790 'one if this command is not used with a Composer\Console\Application instance'
1791 );
1792 }
1793 }
1794
1795 return $this->composer;
1796 }
1797
1798
1799
1800
1801 public function setComposer(Composer $composer)
1802 {
1803 $this->composer = $composer;
1804 }
1805
1806
1807
1808
1809 public function resetComposer()
1810 {
1811 $this->composer = null;
1812 $this->getApplication()->resetComposer();
1813 }
1814
1815
1816
1817
1818
1819
1820
1821
1822 public function isProxyCommand()
1823 {
1824 return false;
1825 }
1826
1827
1828
1829
1830 public function getIO()
1831 {
1832 if (null === $this->io) {
1833 $application = $this->getApplication();
1834 if ($application instanceof Application) {
1835
1836 $this->io = $application->getIO();
1837 } else {
1838 $this->io = new NullIO();
1839 }
1840 }
1841
1842 return $this->io;
1843 }
1844
1845
1846
1847
1848 public function setIO(IOInterface $io)
1849 {
1850 $this->io = $io;
1851 }
1852
1853
1854
1855
1856 protected function initialize(InputInterface $input, OutputInterface $output)
1857 {
1858 if (true === $input->hasParameterOption(array('--no-ansi')) && $input->hasOption('no-progress')) {
1859 $input->setOption('no-progress', true);
1860 }
1861
1862 parent::initialize($input, $output);
1863 }
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874 protected function getPreferredInstallOptions(Config $config, InputInterface $input, $keepVcsRequiresPreferSource = false)
1875 {
1876 $preferSource = false;
1877 $preferDist = false;
1878
1879 switch ($config->get('preferred-install')) {
1880 case 'source':
1881 $preferSource = true;
1882 break;
1883 case 'dist':
1884 $preferDist = true;
1885 break;
1886 case 'auto':
1887 default:
1888
1889  break;
1890 }
1891
1892 if ($input->getOption('prefer-source') || $input->getOption('prefer-dist') || ($keepVcsRequiresPreferSource && $input->hasOption('keep-vcs') && $input->getOption('keep-vcs'))) {
1893 $preferSource = $input->getOption('prefer-source') || ($keepVcsRequiresPreferSource && $input->hasOption('keep-vcs') && $input->getOption('keep-vcs'));
1894 $preferDist = $input->getOption('prefer-dist');
1895 }
1896
1897 return array($preferSource, $preferDist);
1898 }
1899 }
1900 <?php
1901
1902
1903
1904
1905
1906
1907
1908
1909
1910
1911
1912 namespace Composer\Command;
1913
1914 use Composer\DependencyResolver\Pool;
1915 use Composer\Package\Link;
1916 use Composer\Package\PackageInterface;
1917 use Composer\Repository\ArrayRepository;
1918 use Composer\Repository\CompositeRepository;
1919 use Composer\Repository\PlatformRepository;
1920 use Composer\Repository\RepositoryFactory;
1921 use Composer\Plugin\CommandEvent;
1922 use Composer\Plugin\PluginEvents;
1923 use Symfony\Component\Console\Formatter\OutputFormatterStyle;
1924 use Composer\Package\Version\VersionParser;
1925 use Symfony\Component\Console\Helper\Table;
1926 use Symfony\Component\Console\Input\InputArgument;
1927 use Symfony\Component\Console\Input\InputInterface;
1928 use Symfony\Component\Console\Input\InputOption;
1929 use Symfony\Component\Console\Output\OutputInterface;
1930
1931
1932
1933
1934
1935
1936 class BaseDependencyCommand extends BaseCommand
1937 {
1938 const ARGUMENT_PACKAGE = 'package';
1939 const ARGUMENT_CONSTRAINT = 'constraint';
1940 const OPTION_RECURSIVE = 'recursive';
1941 const OPTION_TREE = 'tree';
1942
1943 protected $colors;
1944
1945
1946
1947
1948 protected function configure()
1949 {
1950 $this->setDefinition(array(
1951 new InputArgument(self::ARGUMENT_PACKAGE, InputArgument::REQUIRED, 'Package to inspect'),
1952 new InputArgument(self::ARGUMENT_CONSTRAINT, InputArgument::OPTIONAL, 'Optional version constraint', '*'),
1953 new InputOption(self::OPTION_RECURSIVE, 'r', InputOption::VALUE_NONE, 'Recursively resolves up to the root package'),
1954 new InputOption(self::OPTION_TREE, 't', InputOption::VALUE_NONE, 'Prints the results as a nested tree'),
1955 ));
1956 }
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966 protected function doExecute(InputInterface $input, OutputInterface $output, $inverted = false)
1967 {
1968
1969  $composer = $this->getComposer();
1970 $commandEvent = new CommandEvent(PluginEvents::COMMAND, $this->getName(), $input, $output);
1971 $composer->getEventDispatcher()->dispatch($commandEvent->getName(), $commandEvent);
1972
1973
1974  $platformOverrides = $composer->getConfig()->get('platform') ?: array();
1975 $repository = new CompositeRepository(array(
1976 new ArrayRepository(array($composer->getPackage())),
1977 $composer->getRepositoryManager()->getLocalRepository(),
1978 new PlatformRepository(array(), $platformOverrides),
1979 ));
1980 $pool = new Pool();
1981 $pool->addRepository($repository);
1982
1983
1984  list($needle, $textConstraint) = array_pad(
1985 explode(':', $input->getArgument(self::ARGUMENT_PACKAGE)),
1986 2,
1987 $input->getArgument(self::ARGUMENT_CONSTRAINT)
1988 );
1989
1990
1991  $packages = $pool->whatProvides($needle);
1992 if (empty($packages)) {
1993 throw new \InvalidArgumentException(sprintf('Could not find package "%s" in your project', $needle));
1994 }
1995
1996
1997  
1998  if (!$repository->findPackage($needle, $textConstraint)) {
1999 $defaultRepos = new CompositeRepository(RepositoryFactory::defaultRepos($this->getIO()));
2000 if ($match = $defaultRepos->findPackage($needle, $textConstraint)) {
2001 $repository->addRepository(new ArrayRepository(array(clone $match)));
2002 }
2003 }
2004
2005
2006  $needles = array($needle);
2007 if ($inverted) {
2008 foreach ($packages as $package) {
2009 $needles = array_merge($needles, array_map(function (Link $link) {
2010 return $link->getTarget();
2011 }, $package->getReplaces()));
2012 }
2013 }
2014
2015
2016  if ('*' !== $textConstraint) {
2017 $versionParser = new VersionParser();
2018 $constraint = $versionParser->parseConstraints($textConstraint);
2019 } else {
2020 $constraint = null;
2021 }
2022
2023
2024  $renderTree = $input->getOption(self::OPTION_TREE);
2025 $recursive = $renderTree || $input->getOption(self::OPTION_RECURSIVE);
2026
2027
2028  $results = $repository->getDependents($needles, $constraint, $inverted, $recursive);
2029 if (empty($results)) {
2030 $extra = (null !== $constraint) ? sprintf(' in versions %smatching %s', $inverted ? 'not ' : '', $textConstraint) : '';
2031 $this->getIO()->writeError(sprintf('<info>There is no installed package depending on "%s"%s</info>',
2032 $needle, $extra));
2033 } elseif ($renderTree) {
2034 $this->initStyles($output);
2035 $root = $packages[0];
2036 $this->getIO()->write(sprintf('<info>%s</info> %s %s', $root->getPrettyName(), $root->getPrettyVersion(), $root->getDescription()));
2037 $this->printTree($results);
2038 } else {
2039 $this->printTable($output, $results);
2040 }
2041
2042 return 0;
2043 }
2044
2045
2046
2047
2048
2049
2050
2051 protected function printTable(OutputInterface $output, $results)
2052 {
2053 $table = array();
2054 $doubles = array();
2055 do {
2056 $queue = array();
2057 $rows = array();
2058 foreach ($results as $result) {
2059
2060
2061
2062
2063 list($package, $link, $children) = $result;
2064 $unique = (string) $link;
2065 if (isset($doubles[$unique])) {
2066 continue;
2067 }
2068 $doubles[$unique] = true;
2069 $version = (strpos($package->getPrettyVersion(), 'No version set') === 0) ? '-' : $package->getPrettyVersion();
2070 $rows[] = array($package->getPrettyName(), $version, $link->getDescription(), sprintf('%s (%s)', $link->getTarget(), $link->getPrettyConstraint()));
2071 if ($children) {
2072 $queue = array_merge($queue, $children);
2073 }
2074 }
2075 $results = $queue;
2076 $table = array_merge($rows, $table);
2077 } while (!empty($results));
2078
2079
2080  $renderer = new Table($output);
2081 $renderer->setStyle('compact');
2082 $renderer->getStyle()->setVerticalBorderChar('');
2083 $renderer->getStyle()->setCellRowContentFormat('%s  ');
2084 $renderer->setRows($table)->render();
2085 }
2086
2087
2088
2089
2090
2091
2092 protected function initStyles(OutputInterface $output)
2093 {
2094 $this->colors = array(
2095 'green',
2096 'yellow',
2097 'cyan',
2098 'magenta',
2099 'blue',
2100 );
2101
2102 foreach ($this->colors as $color) {
2103 $style = new OutputFormatterStyle($color);
2104 $output->getFormatter()->setStyle($color, $style);
2105 }
2106 }
2107
2108
2109
2110
2111
2112
2113
2114
2115 protected function printTree($results, $prefix = '', $level = 1)
2116 {
2117 $count = count($results);
2118 $idx = 0;
2119 foreach ($results as $result) {
2120
2121
2122
2123
2124
2125 list($package, $link, $children) = $result;
2126
2127 $color = $this->colors[$level % count($this->colors)];
2128 $prevColor = $this->colors[($level - 1) % count($this->colors)];
2129 $isLast = (++$idx == $count);
2130 $versionText = (strpos($package->getPrettyVersion(), 'No version set') === 0) ? '' : $package->getPrettyVersion();
2131 $packageText = rtrim(sprintf('<%s>%s</%1$s> %s', $color, $package->getPrettyName(), $versionText));
2132 $linkText = sprintf('%s <%s>%s</%2$s> %s', $link->getDescription(), $prevColor, $link->getTarget(), $link->getPrettyConstraint());
2133 $circularWarn = $children === false ? '(circular dependency aborted here)' : '';
2134 $this->writeTreeLine(rtrim(sprintf("%s%s%s (%s) %s", $prefix, $isLast ? '└──' : '├──', $packageText, $linkText, $circularWarn)));
2135 if ($children) {
2136 $this->printTree($children, $prefix . ($isLast ? '   ' : '│  '), $level + 1);
2137 }
2138 }
2139 }
2140
2141 private function writeTreeLine($line)
2142 {
2143 $io = $this->getIO();
2144 if (!$io->isDecorated()) {
2145 $line = str_replace(array('└', '├', '──', '│'), array('`-', '|-', '-', '|'), $line);
2146 }
2147
2148 $io->write($line);
2149 }
2150 }
2151 <?php
2152
2153
2154
2155
2156
2157
2158
2159
2160
2161
2162
2163 namespace Composer\Command;
2164
2165 use Composer\Package\Link;
2166 use Composer\Package\PackageInterface;
2167 use Composer\Semver\Constraint\Constraint;
2168 use Symfony\Component\Console\Helper\Table;
2169 use Symfony\Component\Console\Input\InputInterface;
2170 use Symfony\Component\Console\Output\OutputInterface;
2171 use Composer\Repository\PlatformRepository;
2172
2173 class CheckPlatformReqsCommand extends BaseCommand
2174 {
2175 protected function configure()
2176 {
2177 $this->setName('check-platform-reqs')
2178 ->setDescription('Check that platform requirements are satisfied.')
2179 ->setHelp(<<<EOT
2180 Checks that your PHP and extensions versions match the platform requirements of the installed packages.
2181
2182 <info>php composer.phar check-platform-reqs</info>
2183
2184 EOT
2185 );
2186 }
2187
2188 protected function execute(InputInterface $input, OutputInterface $output)
2189 {
2190 $composer = $this->getComposer();
2191
2192 $repos = $composer->getRepositoryManager()->getLocalRepository();
2193
2194 $allPackages = array_merge(array($composer->getPackage()), $repos->getPackages());
2195 $requires = $composer->getPackage()->getDevRequires();
2196 foreach ($requires as $require => $link) {
2197 $requires[$require] = array($link);
2198 }
2199
2200
2201
2202
2203 foreach ($allPackages as $package) {
2204 foreach ($package->getRequires() as $require => $link) {
2205 $requires[$require][] = $link;
2206 }
2207 }
2208 ksort($requires);
2209
2210 $platformRepo = new PlatformRepository(array(), array());
2211 $currentPlatformPackages = $platformRepo->getPackages();
2212 $currentPlatformPackageMap = array();
2213
2214
2215
2216
2217 foreach ($currentPlatformPackages as $currentPlatformPackage) {
2218 $currentPlatformPackageMap[$currentPlatformPackage->getName()] = $currentPlatformPackage;
2219 }
2220
2221 $results = array();
2222
2223 $exitCode = 0;
2224
2225
2226
2227
2228 foreach ($requires as $require => $links) {
2229 if (preg_match(PlatformRepository::PLATFORM_PACKAGE_REGEX, $require)) {
2230 if (isset($currentPlatformPackageMap[$require])) {
2231 $pass = true;
2232 $version = $currentPlatformPackageMap[$require]->getVersion();
2233
2234 foreach ($links as $link) {
2235 if (!$link->getConstraint()->matches(new Constraint('=', $version))) {
2236 $results[] = array(
2237 $currentPlatformPackageMap[$require]->getPrettyName(),
2238 $currentPlatformPackageMap[$require]->getPrettyVersion(),
2239 $link,
2240 '<error>failed</error>',
2241 );
2242 $pass = false;
2243
2244 $exitCode = max($exitCode, 1);
2245 }
2246 }
2247
2248 if ($pass) {
2249 $results[] = array(
2250 $currentPlatformPackageMap[$require]->getPrettyName(),
2251 $currentPlatformPackageMap[$require]->getPrettyVersion(),
2252 null,
2253 '<info>success</info>',
2254 );
2255 }
2256 } else {
2257 $results[] = array(
2258 $require,
2259 'n/a',
2260 $links[0],
2261 '<error>missing</error>',
2262 );
2263
2264 $exitCode = max($exitCode, 2);
2265 }
2266 }
2267 }
2268
2269 $this->printTable($output, $results);
2270
2271 return $exitCode;
2272 }
2273
2274 protected function printTable(OutputInterface $output, $results)
2275 {
2276 $table = array();
2277 $rows = array();
2278 foreach ($results as $result) {
2279
2280
2281
2282 list($platformPackage, $version, $link, $status) = $result;
2283 $rows[] = array(
2284 $platformPackage,
2285 $version,
2286 $link ? sprintf('%s %s %s (%s)', $link->getSource(), $link->getDescription(), $link->getTarget(), $link->getPrettyConstraint()) : '',
2287 $status,
2288 );
2289 }
2290 $table = array_merge($rows, $table);
2291
2292
2293  $renderer = new Table($output);
2294 $renderer->setStyle('compact');
2295 $renderer->getStyle()->setVerticalBorderChar('');
2296 $renderer->getStyle()->setCellRowContentFormat('%s  ');
2297 $renderer->setRows($table)->render();
2298 }
2299 }
2300 <?php
2301
2302
2303
2304
2305
2306
2307
2308
2309
2310
2311
2312 namespace Composer\Command;
2313
2314 use Composer\Cache;
2315 use Composer\Factory;
2316 use Symfony\Component\Console\Input\InputInterface;
2317 use Symfony\Component\Console\Output\OutputInterface;
2318
2319
2320
2321
2322 class ClearCacheCommand extends BaseCommand
2323 {
2324 protected function configure()
2325 {
2326 $this
2327 ->setName('clear-cache')
2328 ->setAliases(array('clearcache'))
2329 ->setDescription('Clears composer\'s internal package cache.')
2330 ->setHelp(<<<EOT
2331 The <info>clear-cache</info> deletes all cached packages from composer's
2332 cache directory.
2333 EOT
2334 )
2335 ;
2336 }
2337
2338 protected function execute(InputInterface $input, OutputInterface $output)
2339 {
2340 $config = Factory::createConfig();
2341 $io = $this->getIO();
2342
2343 $cachePaths = array(
2344 'cache-vcs-dir' => $config->get('cache-vcs-dir'),
2345 'cache-repo-dir' => $config->get('cache-repo-dir'),
2346 'cache-files-dir' => $config->get('cache-files-dir'),
2347 'cache-dir' => $config->get('cache-dir'),
2348 );
2349
2350 foreach ($cachePaths as $key => $cachePath) {
2351 $cachePath = realpath($cachePath);
2352 if (!$cachePath) {
2353 $io->writeError("<info>Cache directory does not exist ($key): $cachePath</info>");
2354
2355 continue;
2356 }
2357 $cache = new Cache($io, $cachePath);
2358 if (!$cache->isEnabled()) {
2359 $io->writeError("<info>Cache is not enabled ($key): $cachePath</info>");
2360
2361 continue;
2362 }
2363
2364 $io->writeError("<info>Clearing cache ($key): $cachePath</info>");
2365 $cache->clear();
2366 }
2367
2368 $io->writeError('<info>All caches cleared.</info>');
2369 }
2370 }
2371 <?php
2372
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382
2383 namespace Composer\Command;
2384
2385 use Composer\Util\Platform;
2386 use Composer\Util\Silencer;
2387 use Symfony\Component\Console\Input\InputInterface;
2388 use Symfony\Component\Console\Input\InputArgument;
2389 use Symfony\Component\Console\Input\InputOption;
2390 use Symfony\Component\Console\Output\OutputInterface;
2391 use Composer\Config;
2392 use Composer\Config\JsonConfigSource;
2393 use Composer\Factory;
2394 use Composer\Json\JsonFile;
2395 use Composer\Semver\VersionParser;
2396 use Composer\Package\BasePackage;
2397
2398
2399
2400
2401
2402 class ConfigCommand extends BaseCommand
2403 {
2404
2405
2406
2407 protected $config;
2408
2409
2410
2411
2412 protected $configFile;
2413
2414
2415
2416
2417 protected $configSource;
2418
2419
2420
2421
2422 protected $authConfigFile;
2423
2424
2425
2426
2427 protected $authConfigSource;
2428
2429
2430
2431
2432 protected function configure()
2433 {
2434 $this
2435 ->setName('config')
2436 ->setDescription('Sets config options.')
2437 ->setDefinition(array(
2438 new InputOption('global', 'g', InputOption::VALUE_NONE, 'Apply command to the global config file'),
2439 new InputOption('editor', 'e', InputOption::VALUE_NONE, 'Open editor'),
2440 new InputOption('auth', 'a', InputOption::VALUE_NONE, 'Affect auth config file (only used for --editor)'),
2441 new InputOption('unset', null, InputOption::VALUE_NONE, 'Unset the given setting-key'),
2442 new InputOption('list', 'l', InputOption::VALUE_NONE, 'List configuration settings'),
2443 new InputOption('file', 'f', InputOption::VALUE_REQUIRED, 'If you want to choose a different composer.json or config.json'),
2444 new InputOption('absolute', null, InputOption::VALUE_NONE, 'Returns absolute paths when fetching *-dir config values instead of relative'),
2445 new InputArgument('setting-key', null, 'Setting key'),
2446 new InputArgument('setting-value', InputArgument::IS_ARRAY, 'Setting value'),
2447 ))
2448 ->setHelp(<<<EOT
2449 This command allows you to edit composer config settings and repositories
2450 in either the local composer.json file or the global config.json file.
2451
2452 Additionally it lets you edit most properties in the local composer.json.
2453
2454 To set a config setting:
2455
2456     <comment>%command.full_name% bin-dir bin/</comment>
2457
2458 To read a config setting:
2459
2460     <comment>%command.full_name% bin-dir</comment>
2461     Outputs: <info>bin</info>
2462
2463 To edit the global config.json file:
2464
2465     <comment>%command.full_name% --global</comment>
2466
2467 To add a repository:
2468
2469     <comment>%command.full_name% repositories.foo vcs https://bar.com</comment>
2470
2471 To remove a repository (repo is a short alias for repositories):
2472
2473     <comment>%command.full_name% --unset repo.foo</comment>
2474
2475 To disable packagist:
2476
2477     <comment>%command.full_name% repo.packagist false</comment>
2478
2479 You can alter repositories in the global config.json file by passing in the
2480 <info>--global</info> option.
2481
2482 To edit the file in an external editor:
2483
2484     <comment>%command.full_name% --editor</comment>
2485
2486 To choose your editor you can set the "EDITOR" env variable.
2487
2488 To get a list of configuration values in the file:
2489
2490     <comment>%command.full_name% --list</comment>
2491
2492 You can always pass more than one option. As an example, if you want to edit the
2493 global config.json file.
2494
2495     <comment>%command.full_name% --editor --global</comment>
2496 EOT
2497 )
2498 ;
2499 }
2500
2501
2502
2503
2504 protected function initialize(InputInterface $input, OutputInterface $output)
2505 {
2506 parent::initialize($input, $output);
2507
2508 if ($input->getOption('global') && null !== $input->getOption('file')) {
2509 throw new \RuntimeException('--file and --global can not be combined');
2510 }
2511
2512 $io = $this->getIO();
2513 $this->config = Factory::createConfig($io);
2514
2515
2516  
2517  $configFile = $input->getOption('global')
2518 ? ($this->config->get('home') . '/config.json')
2519 : ($input->getOption('file') ?: Factory::getComposerFile());
2520
2521
2522  if (
2523 ($configFile === 'composer.json' || $configFile === './composer.json')
2524 && !file_exists($configFile)
2525 && realpath(getcwd()) === realpath($this->config->get('home'))
2526 ) {
2527 file_put_contents($configFile, "{\n}\n");
2528 }
2529
2530 $this->configFile = new JsonFile($configFile, null, $io);
2531 $this->configSource = new JsonConfigSource($this->configFile);
2532
2533 $authConfigFile = $input->getOption('global')
2534 ? ($this->config->get('home') . '/auth.json')
2535 : dirname(realpath($configFile)) . '/auth.json';
2536
2537 $this->authConfigFile = new JsonFile($authConfigFile, null, $io);
2538 $this->authConfigSource = new JsonConfigSource($this->authConfigFile, true);
2539
2540
2541  if ($input->getOption('global') && !$this->configFile->exists()) {
2542 touch($this->configFile->getPath());
2543 $this->configFile->write(array('config' => new \ArrayObject));
2544 Silencer::call('chmod', $this->configFile->getPath(), 0600);
2545 }
2546 if ($input->getOption('global') && !$this->authConfigFile->exists()) {
2547 touch($this->authConfigFile->getPath());
2548 $this->authConfigFile->write(array('bitbucket-oauth' => new \ArrayObject, 'github-oauth' => new \ArrayObject, 'gitlab-oauth' => new \ArrayObject, 'gitlab-token' => new \ArrayObject, 'http-basic' => new \ArrayObject));
2549 Silencer::call('chmod', $this->authConfigFile->getPath(), 0600);
2550 }
2551
2552 if (!$this->configFile->exists()) {
2553 throw new \RuntimeException(sprintf('File "%s" cannot be found in the current directory', $configFile));
2554 }
2555 }
2556
2557
2558
2559
2560 protected function execute(InputInterface $input, OutputInterface $output)
2561 {
2562
2563  if ($input->getOption('editor')) {
2564 $editor = escapeshellcmd(getenv('EDITOR'));
2565 if (!$editor) {
2566 if (Platform::isWindows()) {
2567 $editor = 'notepad';
2568 } else {
2569 foreach (array('editor', 'vim', 'vi', 'nano', 'pico', 'ed') as $candidate) {
2570 if (exec('which '.$candidate)) {
2571 $editor = $candidate;
2572 break;
2573 }
2574 }
2575 }
2576 }
2577
2578 $file = $input->getOption('auth') ? $this->authConfigFile->getPath() : $this->configFile->getPath();
2579 system($editor . ' ' . $file . (Platform::isWindows() ? '' : ' > `tty`'));
2580
2581 return 0;
2582 }
2583
2584 if (!$input->getOption('global')) {
2585 $this->config->merge($this->configFile->read());
2586 $this->config->merge(array('config' => $this->authConfigFile->exists() ? $this->authConfigFile->read() : array()));
2587 }
2588
2589
2590  if ($input->getOption('list')) {
2591 $this->listConfiguration($this->config->all(), $this->config->raw(), $output);
2592
2593 return 0;
2594 }
2595
2596 $settingKey = $input->getArgument('setting-key');
2597 if (!$settingKey) {
2598 return 0;
2599 }
2600
2601
2602  if (array() !== $input->getArgument('setting-value') && $input->getOption('unset')) {
2603 throw new \RuntimeException('You can not combine a setting value with --unset');
2604 }
2605
2606
2607  if (array() === $input->getArgument('setting-value') && !$input->getOption('unset')) {
2608 $properties = array('name', 'type', 'description', 'homepage', 'version', 'minimum-stability', 'prefer-stable', 'keywords', 'license', 'extra');
2609 $rawData = $this->configFile->read();
2610 $data = $this->config->all();
2611 if (preg_match('/^repos?(?:itories)?(?:\.(.+))?/', $settingKey, $matches)) {
2612 if (!isset($matches[1]) || $matches[1] === '') {
2613 $value = isset($data['repositories']) ? $data['repositories'] : array();
2614 } else {
2615 if (!isset($data['repositories'][$matches[1]])) {
2616 throw new \InvalidArgumentException('There is no '.$matches[1].' repository defined');
2617 }
2618
2619 $value = $data['repositories'][$matches[1]];
2620 }
2621 } elseif (strpos($settingKey, '.')) {
2622 $bits = explode('.', $settingKey);
2623 if ($bits[0] === 'extra') {
2624 $data = $rawData;
2625 } else {
2626 $data = $data['config'];
2627 }
2628 $match = false;
2629 foreach ($bits as $bit) {
2630 $key = isset($key) ? $key.'.'.$bit : $bit;
2631 $match = false;
2632 if (isset($data[$key])) {
2633 $match = true;
2634 $data = $data[$key];
2635 unset($key);
2636 }
2637 }
2638
2639 if (!$match) {
2640 throw new \RuntimeException($settingKey.' is not defined.');
2641 }
2642
2643 $value = $data;
2644 } elseif (isset($data['config'][$settingKey])) {
2645 $value = $this->config->get($settingKey, $input->getOption('absolute') ? 0 : Config::RELATIVE_PATHS);
2646 } elseif (in_array($settingKey, $properties, true) && isset($rawData[$settingKey])) {
2647 $value = $rawData[$settingKey];
2648 } else {
2649 throw new \RuntimeException($settingKey.' is not defined');
2650 }
2651
2652 if (is_array($value)) {
2653 $value = json_encode($value);
2654 }
2655
2656 $this->getIO()->write($value);
2657
2658 return 0;
2659 }
2660
2661 $values = $input->getArgument('setting-value'); 
2662
2663 $booleanValidator = function ($val) {
2664 return in_array($val, array('true', 'false', '1', '0'), true);
2665 };
2666 $booleanNormalizer = function ($val) {
2667 return $val !== 'false' && (bool) $val;
2668 };
2669
2670
2671  $uniqueConfigValues = array(
2672 'process-timeout' => array('is_numeric', 'intval'),
2673 'use-include-path' => array($booleanValidator, $booleanNormalizer),
2674 'preferred-install' => array(
2675 function ($val) {
2676 return in_array($val, array('auto', 'source', 'dist'), true);
2677 },
2678 function ($val) {
2679 return $val;
2680 },
2681 ),
2682 'store-auths' => array(
2683 function ($val) {
2684 return in_array($val, array('true', 'false', 'prompt'), true);
2685 },
2686 function ($val) {
2687 if ('prompt' === $val) {
2688 return 'prompt';
2689 }
2690
2691 return $val !== 'false' && (bool) $val;
2692 },
2693 ),
2694 'notify-on-install' => array($booleanValidator, $booleanNormalizer),
2695 'vendor-dir' => array('is_string', function ($val) {
2696 return $val;
2697 }),
2698 'bin-dir' => array('is_string', function ($val) {
2699 return $val;
2700 }),
2701 'archive-dir' => array('is_string', function ($val) {
2702 return $val;
2703 }),
2704 'archive-format' => array('is_string', function ($val) {
2705 return $val;
2706 }),
2707 'data-dir' => array('is_string', function ($val) {
2708 return $val;
2709 }),
2710 'cache-dir' => array('is_string', function ($val) {
2711 return $val;
2712 }),
2713 'cache-files-dir' => array('is_string', function ($val) {
2714 return $val;
2715 }),
2716 'cache-repo-dir' => array('is_string', function ($val) {
2717 return $val;
2718 }),
2719 'cache-vcs-dir' => array('is_string', function ($val) {
2720 return $val;
2721 }),
2722 'cache-ttl' => array('is_numeric', 'intval'),
2723 'cache-files-ttl' => array('is_numeric', 'intval'),
2724 'cache-files-maxsize' => array(
2725 function ($val) {
2726 return preg_match('/^\s*([0-9.]+)\s*(?:([kmg])(?:i?b)?)?\s*$/i', $val) > 0;
2727 },
2728 function ($val) {
2729 return $val;
2730 },
2731 ),
2732 'bin-compat' => array(
2733 function ($val) {
2734 return in_array($val, array('auto', 'full'));
2735 },
2736 function ($val) {
2737 return $val;
2738 },
2739 ),
2740 'discard-changes' => array(
2741 function ($val) {
2742 return in_array($val, array('stash', 'true', 'false', '1', '0'), true);
2743 },
2744 function ($val) {
2745 if ('stash' === $val) {
2746 return 'stash';
2747 }
2748
2749 return $val !== 'false' && (bool) $val;
2750 },
2751 ),
2752 'autoloader-suffix' => array('is_string', function ($val) {
2753 return $val === 'null' ? null : $val;
2754 }),
2755 'sort-packages' => array($booleanValidator, $booleanNormalizer),
2756 'optimize-autoloader' => array($booleanValidator, $booleanNormalizer),
2757 'classmap-authoritative' => array($booleanValidator, $booleanNormalizer),
2758 'apcu-autoloader' => array($booleanValidator, $booleanNormalizer),
2759 'prepend-autoloader' => array($booleanValidator, $booleanNormalizer),
2760 'disable-tls' => array($booleanValidator, $booleanNormalizer),
2761 'secure-http' => array($booleanValidator, $booleanNormalizer),
2762 'cafile' => array(
2763 function ($val) {
2764 return file_exists($val) && is_readable($val);
2765 },
2766 function ($val) {
2767 return $val === 'null' ? null : $val;
2768 },
2769 ),
2770 'capath' => array(
2771 function ($val) {
2772 return is_dir($val) && is_readable($val);
2773 },
2774 function ($val) {
2775 return $val === 'null' ? null : $val;
2776 },
2777 ),
2778 'github-expose-hostname' => array($booleanValidator, $booleanNormalizer),
2779 'htaccess-protect' => array($booleanValidator, $booleanNormalizer),
2780 );
2781 $multiConfigValues = array(
2782 'github-protocols' => array(
2783 function ($vals) {
2784 if (!is_array($vals)) {
2785 return 'array expected';
2786 }
2787
2788 foreach ($vals as $val) {
2789 if (!in_array($val, array('git', 'https', 'ssh'))) {
2790 return 'valid protocols include: git, https, ssh';
2791 }
2792 }
2793
2794 return true;
2795 },
2796 function ($vals) {
2797 return $vals;
2798 },
2799 ),
2800 'github-domains' => array(
2801 function ($vals) {
2802 if (!is_array($vals)) {
2803 return 'array expected';
2804 }
2805
2806 return true;
2807 },
2808 function ($vals) {
2809 return $vals;
2810 },
2811 ),
2812 'gitlab-domains' => array(
2813 function ($vals) {
2814 if (!is_array($vals)) {
2815 return 'array expected';
2816 }
2817
2818 return true;
2819 },
2820 function ($vals) {
2821 return $vals;
2822 },
2823 ),
2824 );
2825
2826 if ($input->getOption('unset') && (isset($uniqueConfigValues[$settingKey]) || isset($multiConfigValues[$settingKey]))) {
2827 return $this->configSource->removeConfigSetting($settingKey);
2828 }
2829 if (isset($uniqueConfigValues[$settingKey])) {
2830 return $this->handleSingleValue($settingKey, $uniqueConfigValues[$settingKey], $values, 'addConfigSetting');
2831 }
2832 if (isset($multiConfigValues[$settingKey])) {
2833 return $this->handleMultiValue($settingKey, $multiConfigValues[$settingKey], $values, 'addConfigSetting');
2834 }
2835
2836
2837  $uniqueProps = array(
2838 'name' => array('is_string', function ($val) {
2839 return $val;
2840 }),
2841 'type' => array('is_string', function ($val) {
2842 return $val;
2843 }),
2844 'description' => array('is_string', function ($val) {
2845 return $val;
2846 }),
2847 'homepage' => array('is_string', function ($val) {
2848 return $val;
2849 }),
2850 'version' => array('is_string', function ($val) {
2851 return $val;
2852 }),
2853 'minimum-stability' => array(
2854 function ($val) {
2855 return isset(BasePackage::$stabilities[VersionParser::normalizeStability($val)]);
2856 },
2857 function ($val) {
2858 return VersionParser::normalizeStability($val);
2859 },
2860 ),
2861 'prefer-stable' => array($booleanValidator, $booleanNormalizer),
2862 );
2863 $multiProps = array(
2864 'keywords' => array(
2865 function ($vals) {
2866 if (!is_array($vals)) {
2867 return 'array expected';
2868 }
2869
2870 return true;
2871 },
2872 function ($vals) {
2873 return $vals;
2874 },
2875 ),
2876 'license' => array(
2877 function ($vals) {
2878 if (!is_array($vals)) {
2879 return 'array expected';
2880 }
2881
2882 return true;
2883 },
2884 function ($vals) {
2885 return $vals;
2886 },
2887 ),
2888 );
2889
2890 if ($input->getOption('global') && (isset($uniqueProps[$settingKey]) || isset($multiProps[$settingKey]) || substr($settingKey, 0, 6) === 'extra.')) {
2891 throw new \InvalidArgumentException('The '.$settingKey.' property can not be set in the global config.json file. Use `composer global config` to apply changes to the global composer.json');
2892 }
2893 if ($input->getOption('unset') && (isset($uniqueProps[$settingKey]) || isset($multiProps[$settingKey]))) {
2894 return $this->configSource->removeProperty($settingKey);
2895 }
2896 if (isset($uniqueProps[$settingKey])) {
2897 return $this->handleSingleValue($settingKey, $uniqueProps[$settingKey], $values, 'addProperty');
2898 }
2899 if (isset($multiProps[$settingKey])) {
2900 return $this->handleMultiValue($settingKey, $multiProps[$settingKey], $values, 'addProperty');
2901 }
2902
2903
2904  if (preg_match('/^repos?(?:itories)?\.(.+)/', $settingKey, $matches)) {
2905 if ($input->getOption('unset')) {
2906 return $this->configSource->removeRepository($matches[1]);
2907 }
2908
2909 if (2 === count($values)) {
2910 return $this->configSource->addRepository($matches[1], array(
2911 'type' => $values[0],
2912 'url' => $values[1],
2913 ));
2914 }
2915
2916 if (1 === count($values)) {
2917 $value = strtolower($values[0]);
2918 if (true === $booleanValidator($value)) {
2919 if (false === $booleanNormalizer($value)) {
2920 return $this->configSource->addRepository($matches[1], false);
2921 }
2922 } else {
2923 $value = JsonFile::parseJson($values[0]);
2924
2925 return $this->configSource->addRepository($matches[1], $value);
2926 }
2927 }
2928
2929 throw new \RuntimeException('You must pass the type and a url. Example: php composer.phar config repositories.foo vcs https://bar.com');
2930 }
2931
2932
2933  if (preg_match('/^extra\.(.+)/', $settingKey, $matches)) {
2934 if ($input->getOption('unset')) {
2935 return $this->configSource->removeProperty($settingKey);
2936 }
2937
2938 return $this->configSource->addProperty($settingKey, $values[0]);
2939 }
2940
2941
2942  if (preg_match('/^platform\.(.+)/', $settingKey, $matches)) {
2943 if ($input->getOption('unset')) {
2944 return $this->configSource->removeConfigSetting($settingKey);
2945 }
2946
2947 return $this->configSource->addConfigSetting($settingKey, $values[0]);
2948 }
2949 if ($settingKey === 'platform' && $input->getOption('unset')) {
2950 return $this->configSource->removeConfigSetting($settingKey);
2951 }
2952
2953
2954  if (preg_match('/^(bitbucket-oauth|github-oauth|gitlab-oauth|gitlab-token|http-basic)\.(.+)/', $settingKey, $matches)) {
2955 if ($input->getOption('unset')) {
2956 $this->authConfigSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2957 $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2958
2959 return;
2960 }
2961
2962 if ($matches[1] === 'bitbucket-oauth') {
2963 if (2 !== count($values)) {
2964 throw new \RuntimeException('Expected two arguments (consumer-key, consumer-secret), got '.count($values));
2965 }
2966 $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2967 $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('consumer-key' => $values[0], 'consumer-secret' => $values[1]));
2968 } elseif (in_array($matches[1], array('github-oauth', 'gitlab-oauth', 'gitlab-token'), true)) {
2969 if (1 !== count($values)) {
2970 throw new \RuntimeException('Too many arguments, expected only one token');
2971 }
2972 $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2973 $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], $values[0]);
2974 } elseif ($matches[1] === 'http-basic') {
2975 if (2 !== count($values)) {
2976 throw new \RuntimeException('Expected two arguments (username, password), got '.count($values));
2977 }
2978 $this->configSource->removeConfigSetting($matches[1].'.'.$matches[2]);
2979 $this->authConfigSource->addConfigSetting($matches[1].'.'.$matches[2], array('username' => $values[0], 'password' => $values[1]));
2980 }
2981
2982 return;
2983 }
2984
2985 throw new \InvalidArgumentException('Setting '.$settingKey.' does not exist or is not supported by this command');
2986 }
2987
2988 protected function handleSingleValue($key, array $callbacks, array $values, $method)
2989 {
2990 list($validator, $normalizer) = $callbacks;
2991 if (1 !== count($values)) {
2992 throw new \RuntimeException('You can only pass one value. Example: php composer.phar config process-timeout 300');
2993 }
2994
2995 if (true !== $validation = $validator($values[0])) {
2996 throw new \RuntimeException(sprintf(
2997 '"%s" is an invalid value'.($validation ? ' ('.$validation.')' : ''),
2998 $values[0]
2999 ));
3000 }
3001
3002 return call_user_func(array($this->configSource, $method), $key, $normalizer($values[0]));
3003 }
3004
3005 protected function handleMultiValue($key, array $callbacks, array $values, $method)
3006 {
3007 list($validator, $normalizer) = $callbacks;
3008 if (true !== $validation = $validator($values)) {
3009 throw new \RuntimeException(sprintf(
3010 '%s is an invalid value'.($validation ? ' ('.$validation.')' : ''),
3011 json_encode($values)
3012 ));
3013 }
3014
3015 return call_user_func(array($this->configSource, $method), $key, $normalizer($values));
3016 }
3017
3018
3019
3020
3021
3022
3023
3024
3025
3026 protected function listConfiguration(array $contents, array $rawContents, OutputInterface $output, $k = null)
3027 {
3028 $origK = $k;
3029 $io = $this->getIO();
3030 foreach ($contents as $key => $value) {
3031 if ($k === null && !in_array($key, array('config', 'repositories'))) {
3032 continue;
3033 }
3034
3035 $rawVal = isset($rawContents[$key]) ? $rawContents[$key] : null;
3036
3037 if (is_array($value) && (!is_numeric(key($value)) || ($key === 'repositories' && null === $k))) {
3038 $k .= preg_replace('{^config\.}', '', $key . '.');
3039 $this->listConfiguration($value, $rawVal, $output, $k);
3040 $k = $origK;
3041
3042 continue;
3043 }
3044
3045 if (is_array($value)) {
3046 $value = array_map(function ($val) {
3047 return is_array($val) ? json_encode($val) : $val;
3048 }, $value);
3049
3050 $value = '['.implode(', ', $value).']';
3051 }
3052
3053 if (is_bool($value)) {
3054 $value = var_export($value, true);
3055 }
3056
3057 if (is_string($rawVal) && $rawVal != $value) {
3058 $io->write('[<comment>' . $k . $key . '</comment>] <info>' . $rawVal . ' (' . $value . ')</info>');
3059 } else {
3060 $io->write('[<comment>' . $k . $key . '</comment>] <info>' . $value . '</info>');
3061 }
3062 }
3063 }
3064 }
3065 <?php
3066
3067
3068
3069
3070
3071
3072
3073
3074
3075
3076
3077 namespace Composer\Command;
3078
3079 use Composer\Config;
3080 use Composer\Factory;
3081 use Composer\Installer;
3082 use Composer\Installer\ProjectInstaller;
3083 use Composer\Installer\InstallationManager;
3084 use Composer\Installer\SuggestedPackagesReporter;
3085 use Composer\IO\IOInterface;
3086 use Composer\Package\BasePackage;
3087 use Composer\DependencyResolver\Pool;
3088 use Composer\DependencyResolver\Operation\InstallOperation;
3089 use Composer\Package\Version\VersionSelector;
3090 use Composer\Package\AliasPackage;
3091 use Composer\Repository\RepositoryFactory;
3092 use Composer\Repository\CompositeRepository;
3093 use Composer\Repository\PlatformRepository;
3094 use Composer\Repository\InstalledFilesystemRepository;
3095 use Composer\Script\ScriptEvents;
3096 use Composer\Util\Silencer;
3097 use Symfony\Component\Console\Input\InputArgument;
3098 use Symfony\Component\Console\Input\InputInterface;
3099 use Symfony\Component\Console\Input\InputOption;
3100 use Symfony\Component\Console\Output\OutputInterface;
3101 use Symfony\Component\Finder\Finder;
3102 use Composer\Json\JsonFile;
3103 use Composer\Config\JsonConfigSource;
3104 use Composer\Util\Filesystem;
3105 use Composer\Package\Version\VersionParser;
3106
3107
3108
3109
3110
3111
3112
3113
3114
3115 class CreateProjectCommand extends BaseCommand
3116 {
3117
3118
3119
3120 protected $suggestedPackagesReporter;
3121
3122 protected function configure()
3123 {
3124 $this
3125 ->setName('create-project')
3126 ->setDescription('Creates new project from a package into given directory.')
3127 ->setDefinition(array(
3128 new InputArgument('package', InputArgument::OPTIONAL, 'Package name to be installed'),
3129 new InputArgument('directory', InputArgument::OPTIONAL, 'Directory where the files should be created'),
3130 new InputArgument('version', InputArgument::OPTIONAL, 'Version, will default to latest'),
3131 new InputOption('stability', 's', InputOption::VALUE_REQUIRED, 'Minimum-stability allowed (unless a version is specified).'),
3132 new InputOption('prefer-source', null, InputOption::VALUE_NONE, 'Forces installation from package sources when possible, including VCS information.'),
3133 new InputOption('prefer-dist', null, InputOption::VALUE_NONE, 'Forces installation from package dist even for dev versions.'),
3134 new InputOption('repository', null, InputOption::VALUE_REQUIRED, 'Pick a different repository (as url or json config) to look for the package.'),
3135 new InputOption('repository-url', null, InputOption::VALUE_REQUIRED, 'DEPRECATED: Use --repository instead.'),
3136 new InputOption('dev', null, InputOption::VALUE_NONE, 'Enables installation of require-dev packages (enabled by default, only present for BC).'),
3137 new InputOption('no-dev', null, InputOption::VALUE_NONE, 'Disables installation of require-dev packages.'),
3138 new InputOption('no-custom-installers', null, InputOption::VALUE_NONE, 'DEPRECATED: Use no-plugins instead.'),
3139 new InputOption('no-scripts', null, InputOption::VALUE_NONE, 'Whether to prevent execution of all defined scripts in the root package.'),
3140 new InputOption('no-progress', null, InputOption::VALUE_NONE, 'Do not output download progress.'),
3141 new InputOption('no-secure-http', null, InputOption::VALUE_NONE, 'Disable the secure-http config option temporarily while installing the root package. Use at your own risk. Using this flag is a bad idea.'),
3142 new InputOption('keep-vcs', null, InputOption::VALUE_NONE, 'Whether to prevent deleting the vcs folder.'),
3143 new InputOption('remove-vcs', null, InputOption::VALUE_NONE, 'Whether to force deletion of the vcs folder without prompting.'),
3144 new InputOption('no-install', null, InputOption::VALUE_NONE, 'Whether to skip installation of the package dependencies.'),
3145 new InputOption('ignore-platform-reqs', null, InputOption::VALUE_NONE, 'Ignore platform requirements (php & ext- packages).'),
3146 ))
3147 ->setHelp(<<<EOT
3148 The <info>create-project</info> command creates a new project from a given
3149 package into a new directory. If executed without params and in a directory
3150 with a composer.json file it installs the packages for the current project.
3151
3152 You can use this command to bootstrap new projects or setup a clean
3153 version-controlled installation for developers of your project.
3154
3155 <info>php composer.phar create-project vendor/project target-directory [version]</info>
3156
3157 You can also specify the version with the package name using = or : as separator.
3158
3159 <info>php composer.phar create-project vendor/project:version target-directory</info>
3160
3161 To install unstable packages, either specify the version you want, or use the
3162 --stability=dev (where dev can be one of RC, beta, alpha or dev).
3163
3164 To setup a developer workable version you should create the project using the source
3165 controlled code by appending the <info>'--prefer-source'</info> flag.
3166
3167 To install a package from another repository than the default one you
3168 can pass the <info>'--repository=https://myrepository.org'</info> flag.
3169
3170 EOT
3171 )
3172 ;
3173 }
3174
3175 protected function execute(InputInterface $input, OutputInterface $output)
3176 {
3177 $config = Factory::createConfig();
3178 $io = $this->getIO();
3179
3180 list($preferSource, $preferDist) = $this->getPreferredInstallOptions($config, $input, true);
3181
3182 if ($input->getOption('dev')) {
3183 $io->writeError('<warning>You are using the deprecated option "dev". Dev packages are installed by default now.</warning>');
3184 }
3185 if ($input->getOption('no-custom-installers')) {
3186 $io->writeError('<warning>You are using the deprecated option "no-custom-installers". Use "no-plugins" instead.</warning>');
3187 $input->setOption('no-plugins', true);
3188 }
3189
3190 return $this->installProject(
3191 $io,
3192 $config,
3193 $input,
3194 $input->getArgument('package'),
3195 $input->getArgument('directory'),
3196 $input->getArgument('version'),
3197 $input->getOption('stability'),
3198 $preferSource,
3199 $preferDist,
3200 !$input->getOption('no-dev'),
3201 $input->getOption('repository') ?: $input->getOption('repository-url'),
3202 $input->getOption('no-plugins'),
3203 $input->getOption('no-scripts'),
3204 $input->getOption('keep-vcs'),
3205 $input->getOption('no-progress'),
3206 $input->getOption('no-install'),
3207 $input->getOption('ignore-platform-reqs'),
3208 !$input->getOption('no-secure-http'),
3209 $input->getOption('remove-vcs')
3210 );
3211 }
3212
3213 public function installProject(IOInterface $io, Config $config, InputInterface $input, $packageName, $directory = null, $packageVersion = null, $stability = 'stable', $preferSource = false, $preferDist = false, $installDevPackages = false, $repository = null, $disablePlugins = false, $noScripts = false, $keepVcs = false, $noProgress = false, $noInstall = false, $ignorePlatformReqs = false, $secureHttp = true, $removeVcs = false)
3214 {
3215 $oldCwd = getcwd();
3216
3217
3218  $io->loadConfiguration($config);
3219
3220 $this->suggestedPackagesReporter = new SuggestedPackagesReporter($io);
3221
3222 if ($packageName !== null) {
3223 $installedFromVcs = $this->installRootPackage($io, $config, $packageName, $directory, $packageVersion, $stability, $preferSource, $preferDist, $installDevPackages, $repository, $disablePlugins, $noScripts, $keepVcs, $noProgress, $ignorePlatformReqs, $secureHttp);
3224 } else {
3225 $installedFromVcs = false;
3226 }
3227
3228 $composer = Factory::create($io, null, $disablePlugins);
3229 $composer->getDownloadManager()->setOutputProgress(!$noProgress);
3230
3231 $fs = new Filesystem();
3232
3233 if ($noScripts === false) {
3234
3235  $composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_ROOT_PACKAGE_INSTALL, $installDevPackages);
3236 }
3237
3238
3239  $config = $composer->getConfig();
3240 list($preferSource, $preferDist) = $this->getPreferredInstallOptions($config, $input);
3241
3242
3243  if ($noInstall === false) {
3244 $installer = Installer::create($io, $composer);
3245 $installer->setPreferSource($preferSource)
3246 ->setPreferDist($preferDist)
3247 ->setDevMode($installDevPackages)
3248 ->setRunScripts(!$noScripts)
3249 ->setIgnorePlatformRequirements($ignorePlatformReqs)
3250 ->setSuggestedPackagesReporter($this->suggestedPackagesReporter)
3251 ->setOptimizeAutoloader($config->get('optimize-autoloader'));
3252
3253 if ($disablePlugins) {
3254 $installer->disablePlugins();
3255 }
3256
3257 $status = $installer->run();
3258 if (0 !== $status) {
3259 return $status;
3260 }
3261 }
3262
3263 $hasVcs = $installedFromVcs;
3264 if (
3265 !$keepVcs
3266 && $installedFromVcs
3267 && (
3268 $removeVcs
3269 || !$io->isInteractive()
3270 || $io->askConfirmation('<info>Do you want to remove the existing VCS (.git, .svn..) history?</info> [<comment>Y,n</comment>]? ', true)
3271 )
3272 ) {
3273 $finder = new Finder();
3274 $finder->depth(0)->directories()->in(getcwd())->ignoreVCS(false)->ignoreDotFiles(false);
3275 foreach (array('.svn', '_svn', 'CVS', '_darcs', '.arch-params', '.monotone', '.bzr', '.git', '.hg', '.fslckout', '_FOSSIL_') as $vcsName) {
3276 $finder->name($vcsName);
3277 }
3278
3279 try {
3280 $dirs = iterator_to_array($finder);
3281 unset($finder);
3282 foreach ($dirs as $dir) {
3283 if (!$fs->removeDirectory($dir)) {
3284 throw new \RuntimeException('Could not remove '.$dir);
3285 }
3286 }
3287 } catch (\Exception $e) {
3288 $io->writeError('<error>An error occurred while removing the VCS metadata: '.$e->getMessage().'</error>');
3289 }
3290
3291 $hasVcs = false;
3292 }
3293
3294
3295  if (!$hasVcs) {
3296 $package = $composer->getPackage();
3297 $configSource = new JsonConfigSource(new JsonFile('composer.json'));
3298 foreach (BasePackage::$supportedLinkTypes as $type => $meta) {
3299 foreach ($package->{'get'.$meta['method']}() as $link) {
3300 if ($link->getPrettyConstraint() === 'self.version') {
3301 $configSource->addLink($type, $link->getTarget(), $package->getPrettyVersion());
3302 }
3303 }
3304 }
3305 }
3306
3307 if ($noScripts === false) {
3308
3309  $composer->getEventDispatcher()->dispatchScript(ScriptEvents::POST_CREATE_PROJECT_CMD, $installDevPackages);
3310 }
3311
3312 chdir($oldCwd);
3313 $vendorComposerDir = $config->get('vendor-dir').'/composer';
3314 if (is_dir($vendorComposerDir) && $fs->isDirEmpty($vendorComposerDir)) {
3315 Silencer::call('rmdir', $vendorComposerDir);
3316 $vendorDir = $config->get('vendor-dir');
3317 if (is_dir($vendorDir) && $fs->isDirEmpty($vendorDir)) {
3318 Silencer::call('rmdir', $vendorDir);
3319 }
3320 }
3321
3322 return 0;
3323 }
3324
3325 protected function installRootPackage(IOInterface $io, Config $config, $packageName, $directory = null, $packageVersion = null, $stability = 'stable', $preferSource = false, $preferDist = false, $installDevPackages = false, $repository = null, $disablePlugins = false, $noScripts = false, $keepVcs = false, $noProgress = false, $ignorePlatformReqs = false, $secureHttp = true)
3326 {
3327 if (!$secureHttp) {
3328 $config->merge(array('config' => array('secure-http' => false)));
3329 }
3330
3331 if (null === $repository) {
3332 $sourceRepo = new CompositeRepository(RepositoryFactory::defaultRepos($io, $config));
3333 } else {
3334 $sourceRepo = RepositoryFactory::fromString($io, $config, $repository, true);
3335 }
3336
3337 $parser = new VersionParser();
3338 $requirements = $parser->parseNameVersionPairs(array($packageName));
3339 $name = strtolower($requirements[0]['name']);
3340 if (!$packageVersion && isset($requirements[0]['version'])) {
3341 $packageVersion = $requirements[0]['version'];
3342 }
3343
3344 if (null === $stability) {
3345 if (preg_match('{^[^,\s]*?@('.implode('|', array_keys(BasePackage::$stabilities)).')$}i', $packageVersion, $match)) {
3346 $stability = $match[1];
3347 } else {
3348 $stability = VersionParser::parseStability($packageVersion);
3349 }
3350 }
3351
3352 $stability = VersionParser::normalizeStability($stability);
3353
3354 if (!isset(BasePackage::$stabilities[$stability])) {
3355 throw new \InvalidArgumentException('Invalid stability provided ('.$stability.'), must be one of: '.implode(', ', array_keys(BasePackage::$stabilities)));
3356 }
3357
3358 $pool = new Pool($stability);
3359 $pool->addRepository($sourceRepo);
3360
3361 $phpVersion = null;
3362 $prettyPhpVersion = null;
3363 if (!$ignorePlatformReqs) {
3364 $platformOverrides = $config->get('platform') ?: array();
3365
3366  $platform = new PlatformRepository(array(), $platformOverrides);
3367 $phpPackage = $platform->findPackage('php', '*');
3368 $phpVersion = $phpPackage->getVersion();
3369 $prettyPhpVersion = $phpPackage->getPrettyVersion();
3370 }
3371
3372
3373  $versionSelector = new VersionSelector($pool);
3374 $package = $versionSelector->findBestCandidate($name, $packageVersion, $phpVersion, $stability);
3375
3376 if (!$package) {
3377 $errorMessage = "Could not find package $name with " . ($packageVersion ? "version $packageVersion" : "stability $stability");
3378 if ($phpVersion && $versionSelector->findBestCandidate($name, $packageVersion, null, $stability)) {
3379 throw new \InvalidArgumentException($errorMessage .' in a version installable using your PHP version '.$prettyPhpVersion.'.');
3380 }
3381
3382 throw new \InvalidArgumentException($errorMessage .'.');
3383 }
3384
3385 if (null === $directory) {
3386 $parts = explode("/", $name, 2);
3387 $directory = getcwd() . DIRECTORY_SEPARATOR . array_pop($parts);
3388 }
3389
3390
3391  if (function_exists('pcntl_async_signals')) {
3392 @mkdir($directory, 0777, true);
3393 if ($realDir = realpath($directory)) {
3394 pcntl_async_signals(true);
3395 pcntl_signal(SIGINT, function () use ($realDir) {
3396 $fs = new Filesystem();
3397 $fs->removeDirectory($realDir);
3398 exit(130);
3399 });
3400 }
3401 }
3402
3403 $io->writeError('<info>Installing ' . $package->getName() . ' (' . $package->getFullPrettyVersion(false) . ')</info>');
3404
3405 if ($disablePlugins) {
3406 $io->writeError('<info>Plugins have been disabled.</info>');
3407 }
3408
3409 if ($package instanceof AliasPackage) {
3410 $package = $package->getAliasOf();
3411 }
3412
3413 if (0 === strpos($p