Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 7a2a2d0

Browse filesBrowse files
[Process] Fixes & testNonBlockingNorClearingIteratorOutput
1 parent a9dcce1 commit 7a2a2d0
Copy full SHA for 7a2a2d0

File tree

Expand file treeCollapse file tree

4 files changed

+41
-41
lines changed
Filter options
Expand file treeCollapse file tree

4 files changed

+41
-41
lines changed

‎src/Symfony/Component/Process/Pipes/UnixPipes.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Process/Pipes/UnixPipes.php
-13Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -150,17 +150,4 @@ public function areOpen()
150150
{
151151
return (bool) $this->pipes;
152152
}
153-
154-
/**
155-
* Creates a new UnixPipes instance.
156-
*
157-
* @param Process $process
158-
* @param string|resource $input
159-
*
160-
* @return UnixPipes
161-
*/
162-
public static function create(Process $process, $input)
163-
{
164-
return new static($process->isTty(), $process->isPty(), $input, !$process->isOutputDisabled() || $process->hasCallback());
165-
}
166153
}

‎src/Symfony/Component/Process/Pipes/WindowsPipes.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Process/Pipes/WindowsPipes.php
+1-14Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ class WindowsPipes extends AbstractPipes
3838
/** @var bool */
3939
private $haveReadSupport;
4040

41-
public function __construct($haveReadSupport, $input)
41+
public function __construct($input, $haveReadSupport)
4242
{
4343
$this->haveReadSupport = (bool) $haveReadSupport;
4444

@@ -160,19 +160,6 @@ public function close()
160160
$this->fileHandles = array();
161161
}
162162

163-
/**
164-
* Creates a new WindowsPipes instance.
165-
*
166-
* @param Process $process The process
167-
* @param $input
168-
*
169-
* @return WindowsPipes
170-
*/
171-
public static function create(Process $process, $input)
172-
{
173-
return new static(!$process->isOutputDisabled() || $process->hasCallback(), $input);
174-
}
175-
176163
/**
177164
* Removes temporary files.
178165
*/

‎src/Symfony/Component/Process/Process.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Process/Process.php
+4-14Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ class Process implements \IteratorAggregate
4444
const TIMEOUT_PRECISION = 0.2;
4545

4646
private $callback;
47+
private $hasCallback = false;
4748
private $commandline;
4849
private $cwd;
4950
private $env;
@@ -257,6 +258,7 @@ public function start(callable $callback = null)
257258
$this->resetProcessData();
258259
$this->starttime = $this->lastOutputTime = microtime(true);
259260
$this->callback = $this->buildCallback($callback);
261+
$this->hasCallback = null !== $callback;
260262
$descriptors = $this->getDescriptors();
261263

262264
$commandline = $this->commandline;
@@ -1229,18 +1231,6 @@ public static function isPtySupported()
12291231
return $result = (bool) @proc_open('echo 1', array(array('pty'), array('pty'), array('pty')), $pipes);
12301232
}
12311233

1232-
/**
1233-
* Returns whether a callback is used on underlying process output.
1234-
*
1235-
* @internal
1236-
*
1237-
* @return bool
1238-
*/
1239-
public function hasCallback()
1240-
{
1241-
return (bool) $this->callback;
1242-
}
1243-
12441234
/**
12451235
* Creates the descriptors needed by the proc_open.
12461236
*
@@ -1252,9 +1242,9 @@ private function getDescriptors()
12521242
$this->input->rewind();
12531243
}
12541244
if ('\\' === DIRECTORY_SEPARATOR) {
1255-
$this->processPipes = WindowsPipes::create($this, $this->input);
1245+
$this->processPipes = new WindowsPipes($this->input, !$this->outputDisabled || $this->hasCallback);
12561246
} else {
1257-
$this->processPipes = UnixPipes::create($this, $this->input);
1247+
$this->processPipes = new UnixPipes($this->isTty(), $this->isPty(), $this->input, !$this->outputDisabled || $this->hasCallback);
12581248
}
12591249

12601250
return $this->processPipes->getDescriptors();

‎src/Symfony/Component/Process/Tests/ProcessTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/Process/Tests/ProcessTest.php
+36Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1306,6 +1306,42 @@ public function testIteratorOutput()
13061306
$this->assertSame($expectedOutput, $output);
13071307
}
13081308

1309+
public function testNonBlockingNorClearingIteratorOutput()
1310+
{
1311+
$input = new InputStream();
1312+
1313+
$process = new Process(self::$phpBin.' -r '.escapeshellarg('fwrite(STDOUT, fread(STDIN, 3));'));
1314+
$process->setInput($input);
1315+
$process->start();
1316+
$output = array();
1317+
1318+
foreach ($process->getIterator(false, false) as $type => $data) {
1319+
$output[] = array($type, $data);
1320+
break;
1321+
}
1322+
$expectedOutput = array(
1323+
array($process::OUT, ''),
1324+
);
1325+
$this->assertSame($expectedOutput, $output);
1326+
1327+
$input->write(123);
1328+
1329+
foreach ($process->getIterator(false, false) as $type => $data) {
1330+
if ('' !== $data) {
1331+
$output[] = array($type, $data);
1332+
}
1333+
}
1334+
1335+
$this->assertSame('123', $process->getOutput());
1336+
$this->assertFalse($process->isRunning());
1337+
1338+
$expectedOutput = array(
1339+
array($process::OUT, ''),
1340+
array($process::OUT, '123'),
1341+
);
1342+
$this->assertSame($expectedOutput, $output);
1343+
}
1344+
13091345
/**
13101346
* @param string $commandline
13111347
* @param null|string $cwd

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.