1
0
Fork 0

Add stderr to exceptions for GitDownloader

pull/376/head
Dave Marshall 2012-02-29 11:05:25 +00:00
parent 0e6cf61b67
commit c2421db7d9
3 changed files with 24 additions and 3 deletions

View File

@ -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)) {

View File

@ -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
* *
@ -44,6 +46,8 @@ class ProcessExecutor
$output = $process->getOutput(); $output = $process->getOutput();
} }
$this->errorOutput = $process->getErrorOutput();
return $process->getExitCode(); return $process->getExitCode();
} }
@ -52,6 +56,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;

View File

@ -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);