Merge pull request #376 from davedevelopment/show-failed-git-command-output
Add stderr to exceptions for GitDownloaderpull/381/merge
commit
c70fcb3f9c
|
@ -31,7 +31,7 @@ class GitDownloader extends VcsDownloader
|
||||||
$this->io->write(" Cloning ".$package->getSourceReference());
|
$this->io->write(" Cloning ".$package->getSourceReference());
|
||||||
$command = sprintf('git clone %s %s && cd %2$s && git checkout %3$s && git reset --hard %3$s', $url, $path, $ref);
|
$command = sprintf('git clone %s %s && cd %2$s && git checkout %3$s && git reset --hard %3$s', $url, $path, $ref);
|
||||||
if (0 !== $this->process->execute($command, $ignoredOutput)) {
|
if (0 !== $this->process->execute($command, $ignoredOutput)) {
|
||||||
throw new \RuntimeException('Failed to execute ' . $command);
|
throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ class GitDownloader extends VcsDownloader
|
||||||
$this->io->write(" Checking out ".$target->getSourceReference());
|
$this->io->write(" Checking out ".$target->getSourceReference());
|
||||||
$command = sprintf('cd %s && git fetch && git checkout %2$s && git reset --hard %2$s', $path, $ref);
|
$command = sprintf('cd %s && git fetch && git checkout %2$s && git reset --hard %2$s', $path, $ref);
|
||||||
if (0 !== $this->process->execute($command, $ignoredOutput)) {
|
if (0 !== $this->process->execute($command, $ignoredOutput)) {
|
||||||
throw new \RuntimeException('Failed to execute ' . $command);
|
throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ class GitDownloader extends VcsDownloader
|
||||||
{
|
{
|
||||||
$command = sprintf('cd %s && git status --porcelain', escapeshellarg($path));
|
$command = sprintf('cd %s && git status --porcelain', escapeshellarg($path));
|
||||||
if (0 !== $this->process->execute($command, $output)) {
|
if (0 !== $this->process->execute($command, $output)) {
|
||||||
throw new \RuntimeException('Failed to execute ' . $command);
|
throw new \RuntimeException('Failed to execute ' . $command . "\n\n" . $this->process->getErrorOutput());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trim($output)) {
|
if (trim($output)) {
|
||||||
|
|
|
@ -21,6 +21,8 @@ class ProcessExecutor
|
||||||
{
|
{
|
||||||
static protected $timeout = 300;
|
static protected $timeout = 300;
|
||||||
|
|
||||||
|
protected $errorOutput;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* runs a process on the commandline
|
* runs a process on the commandline
|
||||||
*
|
*
|
||||||
|
@ -31,6 +33,7 @@ class ProcessExecutor
|
||||||
public function execute($command, &$output = null)
|
public function execute($command, &$output = null)
|
||||||
{
|
{
|
||||||
$captureOutput = count(func_get_args()) > 1;
|
$captureOutput = count(func_get_args()) > 1;
|
||||||
|
$this->errorOutput = null;
|
||||||
$process = new Process($command, null, null, null, static::getTimeout());
|
$process = new Process($command, null, null, null, static::getTimeout());
|
||||||
$process->run(function($type, $buffer) use ($captureOutput) {
|
$process->run(function($type, $buffer) use ($captureOutput) {
|
||||||
if ($captureOutput) {
|
if ($captureOutput) {
|
||||||
|
@ -44,6 +47,8 @@ class ProcessExecutor
|
||||||
$output = $process->getOutput();
|
$output = $process->getOutput();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->errorOutput = $process->getErrorOutput();
|
||||||
|
|
||||||
return $process->getExitCode();
|
return $process->getExitCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,6 +57,16 @@ class ProcessExecutor
|
||||||
return ((string) $output === '') ? array() : preg_split('{\r?\n}', $output);
|
return ((string) $output === '') ? array() : preg_split('{\r?\n}', $output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get any error output from the last command
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function getErrorOutput()
|
||||||
|
{
|
||||||
|
return $this->errorOutput;
|
||||||
|
}
|
||||||
|
|
||||||
static public function getTimeout()
|
static public function getTimeout()
|
||||||
{
|
{
|
||||||
return static::$timeout;
|
return static::$timeout;
|
||||||
|
|
|
@ -33,6 +33,13 @@ class ProcessExecutorTest extends TestCase
|
||||||
$this->assertEquals("foo".PHP_EOL, $output);
|
$this->assertEquals("foo".PHP_EOL, $output);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testExecuteCapturesStderr()
|
||||||
|
{
|
||||||
|
$process = new ProcessExecutor;
|
||||||
|
$process->execute('cat foo', $output);
|
||||||
|
$this->assertNotNull($process->getErrorOutput());
|
||||||
|
}
|
||||||
|
|
||||||
public function testTimeout()
|
public function testTimeout()
|
||||||
{
|
{
|
||||||
ProcessExecutor::setTimeout(1);
|
ProcessExecutor::setTimeout(1);
|
||||||
|
|
Loading…
Reference in New Issue