From 1aa7d68a26e49b11cd5ede3d511dfca5223fe9c2 Mon Sep 17 00:00:00 2001 From: Dany Maillard Date: Tue, 4 Jul 2017 13:07:48 +0200 Subject: [PATCH] Remove enhance sigchild compatibility --- .travis.yml | 2 +- src/Symfony/Component/Process/Process.php | 66 ++----------------- .../Component/Process/Tests/ProcessTest.php | 66 ++----------------- 3 files changed, 11 insertions(+), 123 deletions(-) diff --git a/.travis.yml b/.travis.yml index 66b0e596ecea6..0cabd5b4e6898 100644 --- a/.travis.yml +++ b/.travis.yml @@ -158,7 +158,7 @@ install: echo "$COMPONENTS" | parallel --gnu "tfold {} $PHPUNIT_X {}" tfold tty-group $PHPUNIT --group tty if [[ $PHP = $MIN_PHP ]]; then - echo -e "1\\n0" | xargs -I{} bash -c "tfold src/Symfony/Component/Process.sigchild{} SYMFONY_DEPRECATIONS_HELPER=weak ENHANCE_SIGCHLD={} php-$MIN_PHP/sapi/cli/php ./phpunit --colors=always src/Symfony/Component/Process/" + tfold src/Symfony/Component/Process.sigchild SYMFONY_DEPRECATIONS_HELPER=weak php-$MIN_PHP/sapi/cli/php ./phpunit --colors=always src/Symfony/Component/Process/ fi fi } diff --git a/src/Symfony/Component/Process/Process.php b/src/Symfony/Component/Process/Process.php index a34db920ef545..d0f6c0ce451e9 100644 --- a/src/Symfony/Component/Process/Process.php +++ b/src/Symfony/Component/Process/Process.php @@ -64,7 +64,6 @@ class Process implements \IteratorAggregate private $outputDisabled = false; private $stdout; private $stderr; - private $enhanceSigchildCompatibility; private $process; private $status = self::STATUS_READY; private $incrementalOutputOffset = 0; @@ -165,7 +164,6 @@ public function __construct($commandline, $cwd = null, array $env = null, $input $this->setTimeout($timeout); $this->useFileHandles = '\\' === DIRECTORY_SEPARATOR; $this->pty = false; - $this->enhanceSigchildCompatibility = '\\' !== DIRECTORY_SEPARATOR && $this->isSigchildEnabled(); } public function __destruct() @@ -218,17 +216,12 @@ public function run($callback = null, array $env = array()) * * @return self * - * @throws RuntimeException if PHP was compiled with --enable-sigchild and the enhanced sigchild compatibility mode is not enabled * @throws ProcessFailedException if the process didn't terminate successfully * * @final since version 3.3 */ public function mustRun(callable $callback = null, array $env = array()) { - if (!$this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) { - throw new RuntimeException('This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.'); - } - if (0 !== $this->run($callback, $env)) { throw new ProcessFailedException($this); } @@ -297,7 +290,7 @@ public function start(callable $callback = null, array $env = array()) if ('\\' === DIRECTORY_SEPARATOR) { $options['bypass_shell'] = true; $commandline = $this->prepareWindowsCommandLine($commandline, $envBackup, $env); - } elseif (!$this->useFileHandles && $this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) { + } elseif (!$this->useFileHandles && $this->isSigchildEnabled()) { // last exit code is output on the fourth pipe and caught to work around --enable-sigchild $descriptors[3] = array('pipe', 'w'); @@ -665,15 +658,9 @@ public function clearErrorOutput() * Returns the exit code returned by the process. * * @return null|int The exit status code, null if the Process is not terminated - * - * @throws RuntimeException In case --enable-sigchild is activated and the sigchild compatibility mode is disabled */ public function getExitCode() { - if (!$this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) { - throw new RuntimeException('This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.'); - } - $this->updateStatus(false); return $this->exitcode; @@ -716,17 +703,12 @@ public function isSuccessful() * * @return bool * - * @throws RuntimeException In case --enable-sigchild is activated - * @throws LogicException In case the process is not terminated + * @throws LogicException In case the process is not terminated */ public function hasBeenSignaled() { $this->requireProcessIsTerminated(__FUNCTION__); - if (!$this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) { - throw new RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.'); - } - return $this->processInformation['signaled']; } @@ -744,7 +726,7 @@ public function getTermSignal() { $this->requireProcessIsTerminated(__FUNCTION__); - if ($this->isSigchildEnabled() && (!$this->enhanceSigchildCompatibility || -1 === $this->processInformation['termsig'])) { + if ($this->isSigchildEnabled() && -1 === $this->processInformation['termsig']) { throw new RuntimeException('This PHP has been compiled with --enable-sigchild. Term signal can not be retrieved.'); } @@ -1153,42 +1135,6 @@ public function setInput($input) return $this; } - /** - * Returns whether sigchild compatibility mode is activated or not. - * - * @return bool - * - * @deprecated since version 3.3, to be removed in 4.0. Sigchild compatibility will always be enabled. - */ - public function getEnhanceSigchildCompatibility() - { - @trigger_error(sprintf('The %s() method is deprecated since version 3.3 and will be removed in 4.0. Sigchild compatibility will always be enabled.', __METHOD__), E_USER_DEPRECATED); - - return $this->enhanceSigchildCompatibility; - } - - /** - * Activates sigchild compatibility mode. - * - * Sigchild compatibility mode is required to get the exit code and - * determine the success of a process when PHP has been compiled with - * the --enable-sigchild option - * - * @param bool $enhance - * - * @return self The current Process instance - * - * @deprecated since version 3.3, to be removed in 4.0. - */ - public function setEnhanceSigchildCompatibility($enhance) - { - @trigger_error(sprintf('The %s() method is deprecated since version 3.3 and will be removed in 4.0. Sigchild compatibility will always be enabled.', __METHOD__), E_USER_DEPRECATED); - - $this->enhanceSigchildCompatibility = (bool) $enhance; - - return $this; - } - /** * Sets whether environment variables will be inherited or not. * @@ -1322,7 +1268,7 @@ protected function updateStatus($blocking) $this->readPipes($running && $blocking, '\\' !== DIRECTORY_SEPARATOR || !$running); - if ($this->fallbackStatus && $this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) { + if ($this->fallbackStatus && $this->isSigchildEnabled()) { $this->processInformation = $this->fallbackStatus + $this->processInformation; } @@ -1431,7 +1377,7 @@ private function close() if ($this->processInformation['signaled'] && 0 < $this->processInformation['termsig']) { // if process has been signaled, no exitcode but a valid termsig, apply Unix convention $this->exitcode = 128 + $this->processInformation['termsig']; - } elseif ($this->enhanceSigchildCompatibility && $this->isSigchildEnabled()) { + } elseif ($this->isSigchildEnabled()) { $this->processInformation['signaled'] = true; $this->processInformation['termsig'] = -1; } @@ -1496,7 +1442,7 @@ private function doSignal($signal, $throwException) return false; } } else { - if (!$this->enhanceSigchildCompatibility || !$this->isSigchildEnabled()) { + if (!$this->isSigchildEnabled()) { $ok = @proc_terminate($this->process, $signal); } elseif (function_exists('posix_kill')) { $ok = @posix_kill($pid, $signal); diff --git a/src/Symfony/Component/Process/Tests/ProcessTest.php b/src/Symfony/Component/Process/Tests/ProcessTest.php index 9b74196c70aed..cab6595474859 100644 --- a/src/Symfony/Component/Process/Tests/ProcessTest.php +++ b/src/Symfony/Component/Process/Tests/ProcessTest.php @@ -28,7 +28,6 @@ class ProcessTest extends TestCase private static $phpBin; private static $process; private static $sigchild; - private static $notEnhancedSigchild = false; public static function setUpBeforeClass() { @@ -420,7 +419,6 @@ public function testExitCodeCommandFailed() if ('\\' === DIRECTORY_SEPARATOR) { $this->markTestSkipped('Windows does not support POSIX exit code'); } - $this->skipIfNotEnhancedSigchild(); // such command run in bash return an exitcode 127 $process = $this->getProcess('nonexistingcommandIhopeneversomeonewouldnameacommandlikethis'); @@ -455,7 +453,6 @@ public function testTTYCommandExitCode() if ('\\' === DIRECTORY_SEPARATOR) { $this->markTestSkipped('Windows does have /dev/tty support'); } - $this->skipIfNotEnhancedSigchild(); $process = $this->getProcess('echo "foo" >> /dev/null'); $process->setTty(true); @@ -481,8 +478,6 @@ public function testTTYInWindowsEnvironment() public function testExitCodeTextIsNullWhenExitCodeIsNull() { - $this->skipIfNotEnhancedSigchild(); - $process = $this->getProcess(''); $this->assertNull($process->getExitCodeText()); } @@ -503,8 +498,6 @@ public function testPTYCommand() public function testMustRun() { - $this->skipIfNotEnhancedSigchild(); - $process = $this->getProcess('echo foo'); $this->assertSame($process, $process->mustRun()); @@ -513,8 +506,6 @@ public function testMustRun() public function testSuccessfulMustRunHasCorrectExitCode() { - $this->skipIfNotEnhancedSigchild(); - $process = $this->getProcess('echo foo')->mustRun(); $this->assertEquals(0, $process->getExitCode()); } @@ -524,16 +515,12 @@ public function testSuccessfulMustRunHasCorrectExitCode() */ public function testMustRunThrowsException() { - $this->skipIfNotEnhancedSigchild(); - $process = $this->getProcess('exit 1'); $process->mustRun(); } public function testExitCodeText() { - $this->skipIfNotEnhancedSigchild(); - $process = $this->getProcess(''); $r = new \ReflectionObject($process); $p = $r->getProperty('exitcode'); @@ -562,8 +549,6 @@ public function testUpdateStatus() public function testGetExitCodeIsNullOnStart() { - $this->skipIfNotEnhancedSigchild(); - $process = $this->getProcessForCode('usleep(100000);'); $this->assertNull($process->getExitCode()); $process->start(); @@ -574,8 +559,6 @@ public function testGetExitCodeIsNullOnStart() public function testGetExitCodeIsNullOnWhenStartingAgain() { - $this->skipIfNotEnhancedSigchild(); - $process = $this->getProcessForCode('usleep(100000);'); $process->run(); $this->assertEquals(0, $process->getExitCode()); @@ -587,8 +570,6 @@ public function testGetExitCodeIsNullOnWhenStartingAgain() public function testGetExitCode() { - $this->skipIfNotEnhancedSigchild(); - $process = $this->getProcess('echo foo'); $process->run(); $this->assertSame(0, $process->getExitCode()); @@ -624,8 +605,6 @@ public function testStop() public function testIsSuccessful() { - $this->skipIfNotEnhancedSigchild(); - $process = $this->getProcess('echo foo'); $process->run(); $this->assertTrue($process->isSuccessful()); @@ -633,8 +612,6 @@ public function testIsSuccessful() public function testIsSuccessfulOnlyAfterTerminated() { - $this->skipIfNotEnhancedSigchild(); - $process = $this->getProcessForCode('usleep(100000);'); $process->start(); @@ -647,8 +624,6 @@ public function testIsSuccessfulOnlyAfterTerminated() public function testIsNotSuccessful() { - $this->skipIfNotEnhancedSigchild(); - $process = $this->getProcessForCode('throw new \Exception(\'BOUM\');'); $process->run(); $this->assertFalse($process->isSuccessful()); @@ -659,7 +634,6 @@ public function testProcessIsNotSignaled() if ('\\' === DIRECTORY_SEPARATOR) { $this->markTestSkipped('Windows does not support POSIX signals'); } - $this->skipIfNotEnhancedSigchild(); $process = $this->getProcess('echo foo'); $process->run(); @@ -671,7 +645,6 @@ public function testProcessWithoutTermSignal() if ('\\' === DIRECTORY_SEPARATOR) { $this->markTestSkipped('Windows does not support POSIX signals'); } - $this->skipIfNotEnhancedSigchild(); $process = $this->getProcess('echo foo'); $process->run(); @@ -683,7 +656,6 @@ public function testProcessIsSignaledIfStopped() if ('\\' === DIRECTORY_SEPARATOR) { $this->markTestSkipped('Windows does not support POSIX signals'); } - $this->skipIfNotEnhancedSigchild(); $process = $this->getProcessForCode('sleep(32);'); $process->start(); @@ -701,7 +673,10 @@ public function testProcessThrowsExceptionWhenExternallySignaled() if (!function_exists('posix_kill')) { $this->markTestSkipped('Function posix_kill is required.'); } - $this->skipIfNotEnhancedSigchild(false); + + if (self::$sigchild) { + $this->markTestSkipped('PHP is compiled with --enable-sigchild.'); + } $process = $this->getProcessForCode('sleep(32.1);'); $process->start(); @@ -912,8 +887,6 @@ public function testSignal() */ public function testExitCodeIsAvailableAfterSignal() { - $this->skipIfNotEnhancedSigchild(); - $process = $this->getProcess('sleep 4'); $process->start(); $process->signal(SIGKILL); @@ -1487,21 +1460,6 @@ private function getProcess($commandline, $cwd = null, array $env = null, $input $process = new Process($commandline, $cwd, $env, $input, $timeout); $process->inheritEnvironmentVariables(); - if (false !== $enhance = getenv('ENHANCE_SIGCHLD')) { - try { - $process->setEnhanceSigchildCompatibility(false); - $process->getExitCode(); - $this->fail('ENHANCE_SIGCHLD must be used together with a sigchild-enabled PHP.'); - } catch (RuntimeException $e) { - $this->assertSame('This PHP has been compiled with --enable-sigchild. You must use setEnhanceSigchildCompatibility() to use this method.', $e->getMessage()); - if ($enhance) { - $process->setEnhanceSigchildCompatibility(true); - } else { - self::$notEnhancedSigchild = true; - } - } - } - if (self::$process) { self::$process->stop(0); } @@ -1516,22 +1474,6 @@ private function getProcessForCode($code, $cwd = null, array $env = null, $input { return $this->getProcess(array(self::$phpBin, '-r', $code), $cwd, $env, $input, $timeout); } - - private function skipIfNotEnhancedSigchild($expectException = true) - { - if (self::$sigchild) { - if (!$expectException) { - $this->markTestSkipped('PHP is compiled with --enable-sigchild.'); - } elseif (self::$notEnhancedSigchild) { - if (method_exists($this, 'expectException')) { - $this->expectException('Symfony\Component\Process\Exception\RuntimeException'); - $this->expectExceptionMessage('This PHP has been compiled with --enable-sigchild.'); - } else { - $this->setExpectedException('Symfony\Component\Process\Exception\RuntimeException', 'This PHP has been compiled with --enable-sigchild.'); - } - } - } - } } class NonStringifiable pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy