X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=vendor%2Fdrush%2Fdrush%2Fsrc%2FCommands%2Fcore%2FInitCommands.php;fp=vendor%2Fdrush%2Fdrush%2Fsrc%2FCommands%2Fcore%2FInitCommands.php;h=c9c62e63f45c0018ae95ebbef3971bc44cbbc864;hp=0000000000000000000000000000000000000000;hb=af6d1fb995500ae68849458ee10d66abbdcfb252;hpb=680c79a86e3ed402f263faeac92e89fb6d9edcc0 diff --git a/vendor/drush/drush/src/Commands/core/InitCommands.php b/vendor/drush/drush/src/Commands/core/InitCommands.php new file mode 100644 index 000000000..c9c62e63f --- /dev/null +++ b/vendor/drush/drush/src/Commands/core/InitCommands.php @@ -0,0 +1,177 @@ + false, 'add-path' => '']) + { + $home = Drush::config()->home(); + $drush_config_dir = $home . "/.drush"; + $drush_config_file = $drush_config_dir . "/drush.yml"; + $drush_bashrc = $drush_config_dir . "/drush.bashrc"; + $drush_prompt = $drush_config_dir . "/drush.prompt.sh"; + $examples_dir = DRUSH_BASE_PATH . "/examples"; + $example_configuration = $examples_dir . "/example.drush.yml"; + $example_bashrc = $examples_dir . "/example.bashrc"; + $example_prompt = $examples_dir . "/example.prompt.sh"; + + $collection = $this->collectionBuilder(); + + // Create a ~/.drush directory if it does not yet exist + $collection->taskFilesystemStack()->mkdir($drush_config_dir); + + // If there is no ~/.drush/drush.yml, copy example there. + if (!is_file($drush_config_file)) { + $collection->taskWriteToFile($drush_config_file)->textFromFile($example_configuration); + } + + // Decide whether we want to add our Bash commands to + // ~/.bashrc or ~/.bash_profile, and create a task to + // update it with includes of the various files we write, + // as needed. If it is, then we will add it to the collection. + $bashrc = $this->findBashrc($home); + $taskUpdateBashrc = $this->taskWriteToFile($bashrc)->append(); + + // List of Drush bash configuration files, and + // their source templates. + $drushBashFiles = [ + $drush_bashrc => $example_bashrc, + $drush_prompt => $example_prompt, + ]; + + // Mapping from Drush bash configuration files + // to a description of what each one is. + $drushBashFileDescriptions = [ + $drush_bashrc => 'Drush bash customizations', + $drush_prompt => 'Drush prompt customizations', + ]; + + foreach ($drushBashFiles as $destFile => $sourceFile) { + // If the destination file does not exist, then + // copy the example file there. + if (!is_file($destFile)) { + $collection->taskWriteToFile($destFile)->textFromFile($sourceFile); + $description = $drushBashFileDescriptions[$destFile]; + $collection->progressMessage('Copied {description} to {path}', ['description' => $description, 'path' => $destFile], LogLevel::OK); + $pattern = basename($destFile); + $taskUpdateBashrc->appendUnlessMatches("#$pattern#", "\n# Include $description.". $this->bashAddition($destFile)); + } + } + + // If Drush is not in the $PATH, then figure out which + // path to add so that Drush can be found globally. + $add_path = $options['add-path']; + if ((!drush_which("drush") || $add_path) && ($add_path !== false)) { + $drush_path = $this->findPathToDrush(); + $drush_path = preg_replace("%^" . preg_quote($home) . "/%", '$HOME/', $drush_path); + $pattern = "$drush_path"; + $taskUpdateBashrc->appendUnlessMatches("#$pattern#", "\n# Path to Drush, added by 'drush init'.\nexport PATH=\"\$PATH:$drush_path\"\n\n"); + } + + $openEditor = false; + if ($taskUpdateBashrc->wouldChange()) { + if ($this->io()->confirm(dt("Modify !file to include Drush configuration files?", ['!file' => $bashrc]))) { + $collection->addTask($taskUpdateBashrc); + $collection->progressMessage('Updated bash configuration file {path}', ['path' => $bashrc], LogLevel::OK); + $collection->progressMessage('Start a new shell in order to experience the improvements (e.g. `{shell}`).', ['shell' => 'bash'], LogLevel::OK); + $openEditor = $options['edit']; + } else { + throw new UserAbortException(); + } + } else { + $collection->progressMessage('No code added to {path}', ['path' => $bashrc]); + } + $result = $collection->run(); + + if ($result->wasSuccessful() && $openEditor) { + $exec = drush_get_editor(); + drush_shell_exec_interactive($exec, $drush_config_file, $drush_config_file); + } + + return $result; + } + + /** + * Determine which .bashrc file is best to use on this platform. + */ + protected function findBashrc($home) + { + # Set a default value in case nothing else exists. + $file = $home . '/.bashrc'; + + if (!empty($_ENV['SHELL']) && strstr($_ENV['SHELL'], 'zsh')) { + $file = $home . '/.zshrc'; + } elseif (file_exists($home . '/.bash_profile')) { + $file = $home . '/.bash_profile'; + } elseif (file_exists($home . '/.bashrc')) { + $file = $home . '/.bashrc'; + } elseif (file_exists($home . '/.profile')) { + $file = $home . '/.profile'; + } elseif (file_exists($home . '/.functions')) { + $file = $home . '/.functions'; + } + + return $file; + } + + /** + * Determine where Drush is located, so that we can add + * that location to the $PATH. + */ + protected function findPathToDrush() + { + // First test: is Drush inside a vendor directory? + // Does vendor/bin exist? If so, use that. We do + // not have a good way to locate the 'bin' directory + // if it has been relocated in the composer.json config + // section. + if ($vendor_pos = strpos(DRUSH_BASE_PATH, "/vendor/")) { + $vendor_dir = substr(DRUSH_BASE_PATH, 0, $vendor_pos + 7); + $vendor_bin = $vendor_dir . '/bin'; + if (is_dir($vendor_bin)) { + return $vendor_bin; + } + } + + // Fallback is to use the directory that Drush is in. + return DRUSH_BASE_PATH; + } + + protected function bashAddition($file) + { + return <<