[Console] Reset question validator attempts only for actual stdin (bis)

This commit is contained in:
Nicolas Grekas 2020-06-15 14:27:36 +02:00
parent 52612b1541
commit 867642e337

View File

@ -104,7 +104,7 @@ class QuestionHelper extends Helper
{ {
$this->writePrompt($output, $question); $this->writePrompt($output, $question);
$inputStream = $this->inputStream ?: STDIN; $inputStream = $this->inputStream ?: fopen('php://stdin', 'r');
$autocomplete = $question->getAutocompleterCallback(); $autocomplete = $question->getAutocompleterCallback();
if (null === $autocomplete || !self::$stty || !Terminal::hasSttyAvailable()) { if (null === $autocomplete || !self::$stty || !Terminal::hasSttyAvailable()) {
@ -474,7 +474,7 @@ class QuestionHelper extends Helper
} catch (\Exception $error) { } catch (\Exception $error) {
} }
$attempts = $attempts ?? -(int) $this->isTty(); $attempts = $attempts ?? -(int) $this->askForever();
} }
throw $error; throw $error;
@ -507,18 +507,20 @@ class QuestionHelper extends Helper
return self::$shell; return self::$shell;
} }
private function isTty(): bool private function askForever(): bool
{ {
if (!\defined('STDIN')) { $inputStream = $this->inputStream ?: fopen('php://stdin', 'r');
if ('php://stdin' !== (stream_get_meta_data($inputStream)['url'] ?? null)) {
return true; return true;
} }
if (\function_exists('stream_isatty')) { if (\function_exists('stream_isatty')) {
return stream_isatty(fopen('php://input', 'r')); return stream_isatty($inputStream);
} }
if (\function_exists('posix_isatty')) { if (\function_exists('posix_isatty')) {
return posix_isatty(fopen('php://input', 'r')); return posix_isatty($inputStream);
} }
return true; return true;