mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-25 16:22:42 +01:00
Ask for lint and unit excuses asynchronously
Summary: This diff obsoletes D3385. Test Plan: Made lint error, explained it, verified that unit already finished before I finished explaining (by adding `sleep(3)` to test). Reviewers: epriestley Reviewed By: epriestley CC: aran, Korvin Differential Revision: https://secure.phabricator.com/D3786
This commit is contained in:
parent
1b51b74135
commit
0b02170723
1 changed files with 30 additions and 18 deletions
|
@ -31,8 +31,7 @@ final class ArcanistDiffWorkflow extends ArcanistBaseWorkflow {
|
||||||
private $console;
|
private $console;
|
||||||
private $hasWarnedExternals = false;
|
private $hasWarnedExternals = false;
|
||||||
private $unresolvedLint;
|
private $unresolvedLint;
|
||||||
private $lintExcuse;
|
private $excuses = array('lint' => null, 'unit' => null);
|
||||||
private $unitExcuse;
|
|
||||||
private $testResults;
|
private $testResults;
|
||||||
private $diffID;
|
private $diffID;
|
||||||
private $revisionID;
|
private $revisionID;
|
||||||
|
@ -417,6 +416,7 @@ EOTEXT
|
||||||
if ($background) {
|
if ($background) {
|
||||||
$server = new PhutilConsoleServer();
|
$server = new PhutilConsoleServer();
|
||||||
$server->addExecFutureClient($lint_unit);
|
$server->addExecFutureClient($lint_unit);
|
||||||
|
$server->setHandler(array($this, 'handleServerMessage'));
|
||||||
$server->run();
|
$server->run();
|
||||||
|
|
||||||
list($err) = $lint_unit->resolve();
|
list($err) = $lint_unit->resolve();
|
||||||
|
@ -425,14 +425,14 @@ EOTEXT
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
$server = $this->console->getServer();
|
||||||
|
$server->setHandler(array($this, 'handleServerMessage'));
|
||||||
$data = $this->runLintUnit();
|
$data = $this->runLintUnit();
|
||||||
}
|
}
|
||||||
$lint_result = $data['lintResult'];
|
$lint_result = $data['lintResult'];
|
||||||
$this->lintExcuse = $data['lintExcuse'];
|
|
||||||
$this->unresolvedLint = $data['unresolvedLint'];
|
$this->unresolvedLint = $data['unresolvedLint'];
|
||||||
$this->postponedLinters = $data['postponedLinters'];
|
$this->postponedLinters = $data['postponedLinters'];
|
||||||
$unit_result = $data['unitResult'];
|
$unit_result = $data['unitResult'];
|
||||||
$this->unitExcuse = $data['unitExcuse'];
|
|
||||||
$this->testResults = $data['testResults'];
|
$this->testResults = $data['testResults'];
|
||||||
|
|
||||||
$changes = $this->generateChanges();
|
$changes = $this->generateChanges();
|
||||||
|
@ -1203,11 +1203,9 @@ EOTEXT
|
||||||
$unit_result = $this->runUnit();
|
$unit_result = $this->runUnit();
|
||||||
return array(
|
return array(
|
||||||
'lintResult' => $lint_result,
|
'lintResult' => $lint_result,
|
||||||
'lintExcuse' => $this->lintExcuse,
|
|
||||||
'unresolvedLint' => $this->unresolvedLint,
|
'unresolvedLint' => $this->unresolvedLint,
|
||||||
'postponedLinters' => $this->postponedLinters,
|
'postponedLinters' => $this->postponedLinters,
|
||||||
'unitResult' => $unit_result,
|
'unitResult' => $unit_result,
|
||||||
'unitExcuse' => $this->unitExcuse,
|
|
||||||
'testResults' => $this->testResults,
|
'testResults' => $this->testResults,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
@ -1248,14 +1246,16 @@ EOTEXT
|
||||||
"<bg:green>** LINT OKAY **</bg> No lint problems.\n");
|
"<bg:green>** LINT OKAY **</bg> No lint problems.\n");
|
||||||
break;
|
break;
|
||||||
case ArcanistLintWorkflow::RESULT_WARNINGS:
|
case ArcanistLintWorkflow::RESULT_WARNINGS:
|
||||||
$this->lintExcuse = $this->getErrorExcuse(
|
$this->getErrorExcuse(
|
||||||
|
'lint',
|
||||||
"Lint issued unresolved warnings.",
|
"Lint issued unresolved warnings.",
|
||||||
'lint-excuses');
|
'lint-excuses');
|
||||||
break;
|
break;
|
||||||
case ArcanistLintWorkflow::RESULT_ERRORS:
|
case ArcanistLintWorkflow::RESULT_ERRORS:
|
||||||
$this->console->writeOut(
|
$this->console->writeOut(
|
||||||
"<bg:red>** LINT ERRORS **</bg> Lint raised errors!\n");
|
"<bg:red>** LINT ERRORS **</bg> Lint raised errors!\n");
|
||||||
$this->lintExcuse = $this->getErrorExcuse(
|
$this->getErrorExcuse(
|
||||||
|
'lint',
|
||||||
"Lint issued unresolved errors!",
|
"Lint issued unresolved errors!",
|
||||||
'lint-excuses');
|
'lint-excuses');
|
||||||
break;
|
break;
|
||||||
|
@ -1336,7 +1336,8 @@ EOTEXT
|
||||||
case ArcanistUnitWorkflow::RESULT_FAIL:
|
case ArcanistUnitWorkflow::RESULT_FAIL:
|
||||||
$this->console->writeOut(
|
$this->console->writeOut(
|
||||||
"<bg:red>** UNIT ERRORS **</bg> Unit testing raised errors!\n");
|
"<bg:red>** UNIT ERRORS **</bg> Unit testing raised errors!\n");
|
||||||
$this->unitExcuse = $this->getErrorExcuse(
|
$this->getErrorExcuse(
|
||||||
|
'unit',
|
||||||
"Unit test results include failures!",
|
"Unit test results include failures!",
|
||||||
'unit-excuses');
|
'unit-excuses');
|
||||||
break;
|
break;
|
||||||
|
@ -1369,24 +1370,35 @@ EOTEXT
|
||||||
return $this->testResults;
|
return $this->testResults;
|
||||||
}
|
}
|
||||||
|
|
||||||
private function getErrorExcuse($prompt, $history) {
|
private function getErrorExcuse($type, $prompt, $history) {
|
||||||
if ($this->getArgument('excuse')) {
|
if ($this->getArgument('excuse')) {
|
||||||
$prompt .= " Ignore them?";
|
$prompt .= " Ignore them?";
|
||||||
if (!$this->console->confirm($prompt)) {
|
if (!$this->console->confirm($prompt)) {
|
||||||
throw new ArcanistUserAbortException();
|
throw new ArcanistUserAbortException();
|
||||||
}
|
}
|
||||||
return $this->getArgument('excuse');
|
$this->excuses[$type] = $this->getArgument('excuse');
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
$history = $this->getRepositoryAPI()->getScratchFilePath($history);
|
$history = $this->getRepositoryAPI()->getScratchFilePath($history);
|
||||||
|
|
||||||
$prompt .= " Provide explanation to continue or press Enter to abort.";
|
$prompt .= " Provide explanation to continue or press Enter to abort.";
|
||||||
$this->console->writeOut("\n\n%s", phutil_console_wrap($prompt));
|
$this->console->writeOut("\n\n%s", phutil_console_wrap($prompt));
|
||||||
$return = $this->console->prompt("Explanation:", $history);
|
$this->console->sendMessage(array(
|
||||||
if ($return == '') {
|
'type' => $type,
|
||||||
|
'prompt' => "Explanation:",
|
||||||
|
'history' => $history,
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handleServerMessage(PhutilConsoleMessage $message) {
|
||||||
|
$data = $message->getData();
|
||||||
|
$response = phutil_console_prompt($data['prompt'], idx($data, 'history'));
|
||||||
|
if ($response == '') {
|
||||||
throw new ArcanistUserAbortException();
|
throw new ArcanistUserAbortException();
|
||||||
}
|
}
|
||||||
return $return;
|
$this->excuses[$data['type']] = $response;
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -2229,9 +2241,9 @@ EOTEXT
|
||||||
|
|
||||||
if ($this->unresolvedLint) {
|
if ($this->unresolvedLint) {
|
||||||
$this->updateDiffProperty('arc:lint', json_encode($this->unresolvedLint));
|
$this->updateDiffProperty('arc:lint', json_encode($this->unresolvedLint));
|
||||||
if (strlen($this->lintExcuse)) {
|
if (strlen($this->excuses['lint'])) {
|
||||||
$this->updateDiffProperty('arc:lint-excuse',
|
$this->updateDiffProperty('arc:lint-excuse',
|
||||||
json_encode($this->lintExcuse));
|
json_encode($this->excuses['lint']));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2256,9 +2268,9 @@ EOTEXT
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->updateDiffProperty('arc:unit', json_encode($this->testResults));
|
$this->updateDiffProperty('arc:unit', json_encode($this->testResults));
|
||||||
if (strlen($this->unitExcuse)) {
|
if (strlen($this->excuses['unit'])) {
|
||||||
$this->updateDiffProperty('arc:unit-excuse',
|
$this->updateDiffProperty('arc:unit-excuse',
|
||||||
json_encode($this->unitExcuse));
|
json_encode($this->excuses['unit']));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue