diff --git a/src/Composer/Command/CreateProjectCommand.php b/src/Composer/Command/CreateProjectCommand.php index 59cd51fa7..b883fd94a 100644 --- a/src/Composer/Command/CreateProjectCommand.php +++ b/src/Composer/Command/CreateProjectCommand.php @@ -26,6 +26,7 @@ use Composer\Repository\ComposerRepository; use Composer\Repository\CompositeRepository; use Composer\Repository\FilesystemRepository; use Composer\Repository\InstalledFilesystemRepository; +use Composer\Script\ScriptEvents; use Symfony\Component\Console\Input\InputArgument; use Symfony\Component\Console\Input\InputInterface; use Symfony\Component\Console\Input\InputOption; @@ -51,7 +52,7 @@ class CreateProjectCommand extends Command ->setName('create-project') ->setDescription('Create new project from a package into given directory.') ->setDefinition(array( - new InputArgument('package', InputArgument::REQUIRED, 'Package name to be installed'), + new InputArgument('package', InputArgument::OPTIONAL, 'Package name to be installed', 'local'), new InputArgument('directory', InputArgument::OPTIONAL, 'Directory where the files should be created'), new InputArgument('version', InputArgument::OPTIONAL, 'Version, will defaults to latest'), new InputOption('stability', 's', InputOption::VALUE_REQUIRED, 'Minimum-stability allowed (unless a version is specified).', 'stable'), @@ -133,6 +134,11 @@ EOT public function installProject(IOInterface $io, $config, $packageName, $directory = null, $packageVersion = null, $stability = 'stable', $preferSource = false, $preferDist = false, $installDevPackages = false, $repositoryUrl = null, $disableCustomInstallers = false, $noScripts = false, $keepVcs = false, $noProgress = false) { + if ($packageName === 'local') { + $installedFromVcs = false; + goto installDependencies; + } + $stability = strtolower($stability); if ($stability === 'rc') { $stability = 'RC'; @@ -219,6 +225,12 @@ EOT // clean up memory unset($dm, $im, $config, $projectInstaller, $sourceRepo, $package); + + installDependencies: + if ($noScripts === false) { + // dispatch event + $this->getComposer()->getEventDispatcher()->dispatchCommandEvent(ScriptEvents::POST_ROOT_PACKAGE_INSTALL, $installDevPackages); + } // install dependencies of the created project $composer = Factory::create($io); $installer = Installer::create($io, $composer); @@ -236,6 +248,11 @@ EOT return 1; } + if ($noScripts === false) { + // dispatch event + $this->getComposer()->getEventDispatcher()->dispatchCommandEvent(ScriptEvents::POST_CREATE_PROJECT, $installDevPackages); + } + $hasVcs = $installedFromVcs; if (!$keepVcs && $installedFromVcs && ( diff --git a/src/Composer/Script/ScriptEvents.php b/src/Composer/Script/ScriptEvents.php index 377c56a67..4803745d5 100644 --- a/src/Composer/Script/ScriptEvents.php +++ b/src/Composer/Script/ScriptEvents.php @@ -127,4 +127,24 @@ class ScriptEvents * @var string */ const POST_AUTOLOAD_DUMP = 'post-autoload-dump'; + + /** + * The POST_ROOT_PACKAGE_INSTALL event occurs after the root package has been installed. + * + * The event listener method receives a Composer\Script\PackageEvent instance. + * + * @var string + */ + const POST_ROOT_PACKAGE_INSTALL = 'post-root-package-install'; + + /** + * The POST_CREATE_PROJECT event occurs after the create-project command has been executed. + * Note: Event occurs after POST_INSTALL_CMD + * + * The event listener method receives a Composer\Script\PackageEvent instance. + * + * @var string + */ + const POST_CREATE_PROJECT = 'post-create-project'; + }