Make global exec execute commands in working directory

main
Chad Wade Day, Jr 5 years ago
parent 6034c2af01
commit 917680e0d4

@ -39,7 +39,7 @@ class ExecCommand extends BaseCommand
->setHelp(
<<<EOT
Executes a vendored binary/script.
Read more at https://getcomposer.org/doc/03-cli.md#exec
EOT
)
@ -92,6 +92,14 @@ EOT
$output->setVerbosity(OutputInterface::VERBOSITY_QUIET);
}
if (getcwd() !== $this->getApplication()->getWorkingDirectory()) {
try {
chdir($this->getApplication()->getWorkingDirectory());
} catch (\Exception $e) {
throw new \RuntimeException('Could not switch back to working directory "'.$this->getApplication()->getWorkingDirectory().'"', 0, $e);
}
}
return $dispatcher->dispatchScript('__exec_command', true, $input->getArgument('args'));
}
}

@ -62,6 +62,12 @@ class Application extends BaseApplication
private $hasPluginCommands = false;
private $disablePluginsByDefault = false;
/**
* @var string Store the working directory so Composer
* can switch back to it if there are issues
*/
private $workingDirectory = '';
public function __construct()
{
static $shutdownRegistered = false;
@ -91,6 +97,8 @@ class Application extends BaseApplication
$this->io = new NullIO();
$this->workingDirectory = getcwd();
parent::__construct('Composer', Composer::getVersion());
}
@ -491,4 +499,14 @@ class Application extends BaseApplication
return $commands;
}
/**
* Get the working directoy
*
* @return string
*/
public function getWorkingDirectory()
{
return $this->workingDirectory;
}
}

Loading…
Cancel
Save