Page MenuHomePhabricator

D14028.id34905.diff
No OneTemporary

D14028.id34905.diff

diff --git a/resources/sql/autopatches/20151108.xhpast.stderr.sql b/resources/sql/autopatches/20151108.xhpast.stderr.sql
new file mode 100644
--- /dev/null
+++ b/resources/sql/autopatches/20151108.xhpast.stderr.sql
@@ -0,0 +1,5 @@
+ALTER TABLE {$NAMESPACE}_xhpastview.xhpastview_parsetree
+ ADD returnCode INT NOT NULL AFTER input;
+
+ALTER TABLE {$NAMESPACE}_xhpastview.xhpastview_parsetree
+ ADD stderr longtext NOT NULL AFTER stdout;
diff --git a/src/applications/phpast/controller/PhabricatorXHPASTViewController.php b/src/applications/phpast/controller/PhabricatorXHPASTViewController.php
--- a/src/applications/phpast/controller/PhabricatorXHPASTViewController.php
+++ b/src/applications/phpast/controller/PhabricatorXHPASTViewController.php
@@ -3,7 +3,6 @@
abstract class PhabricatorXHPASTViewController extends PhabricatorController {
public function buildStandardPageResponse($view, array $data) {
-
$page = $this->buildStandardPageView();
$page->setApplicationName('XHPASTView');
diff --git a/src/applications/phpast/controller/PhabricatorXHPASTViewFrameController.php b/src/applications/phpast/controller/PhabricatorXHPASTViewFrameController.php
--- a/src/applications/phpast/controller/PhabricatorXHPASTViewFrameController.php
+++ b/src/applications/phpast/controller/PhabricatorXHPASTViewFrameController.php
@@ -14,7 +14,7 @@
phutil_tag(
'iframe',
array(
- 'src' => '/xhpast/frameset/'.$id.'/',
+ 'src' => "/xhpast/frameset/{$id}/",
'frameborder' => '0',
'style' => 'width: 100%; height: 800px;',
'',
diff --git a/src/applications/phpast/controller/PhabricatorXHPASTViewFramesetController.php b/src/applications/phpast/controller/PhabricatorXHPASTViewFramesetController.php
--- a/src/applications/phpast/controller/PhabricatorXHPASTViewFramesetController.php
+++ b/src/applications/phpast/controller/PhabricatorXHPASTViewFramesetController.php
@@ -10,17 +10,15 @@
public function handleRequest(AphrontRequest $request) {
$id = $request->getURIData('id');
- $response = new AphrontWebpageResponse();
- $response->setFrameable(true);
- $response->setContent(phutil_tag(
- 'frameset',
- array('cols' => '33%, 34%, 33%'),
- array(
- phutil_tag('frame', array('src' => "/xhpast/input/{$id}/")),
- phutil_tag('frame', array('src' => "/xhpast/tree/{$id}/")),
- phutil_tag('frame', array('src' => "/xhpast/stream/{$id}/")),
- )));
-
- return $response;
+ return id(new AphrontWebpageResponse())
+ ->setFrameable(true)
+ ->setContent(phutil_tag(
+ 'frameset',
+ array('cols' => '33%, 34%, 33%'),
+ array(
+ phutil_tag('frame', array('src' => "/xhpast/input/{$id}/")),
+ phutil_tag('frame', array('src' => "/xhpast/tree/{$id}/")),
+ phutil_tag('frame', array('src' => "/xhpast/stream/{$id}/")),
+ )));
}
}
diff --git a/src/applications/phpast/controller/PhabricatorXHPASTViewPanelController.php b/src/applications/phpast/controller/PhabricatorXHPASTViewPanelController.php
--- a/src/applications/phpast/controller/PhabricatorXHPASTViewPanelController.php
+++ b/src/applications/phpast/controller/PhabricatorXHPASTViewPanelController.php
@@ -14,6 +14,7 @@
$this->id = $data['id'];
$this->storageTree = id(new PhabricatorXHPASTViewParseTree())
->load($this->id);
+
if (!$this->storageTree) {
throw new Exception(pht('No such AST!'));
}
@@ -65,10 +66,9 @@
'</html>',
$content);
- $response = new AphrontWebpageResponse();
- $response->setFrameable(true);
- $response->setContent($content);
- return $response;
+ return id(new AphrontWebpageResponse())
+ ->setFrameable(true)
+ ->setContent($content);
}
}
diff --git a/src/applications/phpast/controller/PhabricatorXHPASTViewRunController.php b/src/applications/phpast/controller/PhabricatorXHPASTViewRunController.php
--- a/src/applications/phpast/controller/PhabricatorXHPASTViewRunController.php
+++ b/src/applications/phpast/controller/PhabricatorXHPASTViewRunController.php
@@ -13,17 +13,21 @@
$resolved = $future->resolve();
// This is just to let it throw exceptions if stuff is broken.
- $parse_tree = XHPASTTree::newFromDataAndResolvedExecFuture(
- $source,
- $resolved);
+ try {
+ XHPASTTree::newFromDataAndResolvedExecFuture($source, $resolved);
+ } catch (XHPASTSyntaxErrorException $ex) {
+ // This is possibly expected.
+ }
list($err, $stdout, $stderr) = $resolved;
- $storage_tree = new PhabricatorXHPASTViewParseTree();
- $storage_tree->setInput($source);
- $storage_tree->setStdout($stdout);
- $storage_tree->setAuthorPHID($viewer->getPHID());
- $storage_tree->save();
+ $storage_tree = id(new PhabricatorXHPASTViewParseTree())
+ ->setInput($source)
+ ->setReturnCode($err)
+ ->setStdout($stdout)
+ ->setStderr($stderr)
+ ->setAuthorPHID($viewer->getPHID())
+ ->save();
return id(new AphrontRedirectResponse())
->setURI('/xhpast/view/'.$storage_tree->getID().'/');
diff --git a/src/applications/phpast/controller/PhabricatorXHPASTViewStreamController.php b/src/applications/phpast/controller/PhabricatorXHPASTViewStreamController.php
--- a/src/applications/phpast/controller/PhabricatorXHPASTViewStreamController.php
+++ b/src/applications/phpast/controller/PhabricatorXHPASTViewStreamController.php
@@ -6,11 +6,17 @@
public function handleRequest(AphrontRequest $request) {
$storage = $this->getStorageTree();
$input = $storage->getInput();
+ $err = $storage->getReturnCode();
$stdout = $storage->getStdout();
+ $stderr = $storage->getStderr();
- $tree = XHPASTTree::newFromDataAndResolvedExecFuture(
- $input,
- array(0, $stdout, ''));
+ try {
+ $tree = XHPASTTree::newFromDataAndResolvedExecFuture(
+ $input,
+ array($err, $stdout, $stderr));
+ } catch (XHPASTSyntaxErrorException $ex) {
+ return $this->buildXHPASTViewPanelResponse($ex->getMessage());
+ }
$tokens = array();
foreach ($tree->getRawTokenStream() as $id => $token) {
diff --git a/src/applications/phpast/controller/PhabricatorXHPASTViewTreeController.php b/src/applications/phpast/controller/PhabricatorXHPASTViewTreeController.php
--- a/src/applications/phpast/controller/PhabricatorXHPASTViewTreeController.php
+++ b/src/applications/phpast/controller/PhabricatorXHPASTViewTreeController.php
@@ -10,18 +10,23 @@
public function handleRequest(AphrontRequest $request) {
$storage = $this->getStorageTree();
$input = $storage->getInput();
+ $err = $storage->getReturnCode();
$stdout = $storage->getStdout();
+ $stderr = $storage->getStderr();
- $tree = XHPASTTree::newFromDataAndResolvedExecFuture(
- $input,
- array(0, $stdout, ''));
+ try {
+ $tree = XHPASTTree::newFromDataAndResolvedExecFuture(
+ $input,
+ array($err, $stdout, $stderr));
+ } catch (XHPASTSyntaxErrorException $ex) {
+ return $this->buildXHPASTViewPanelResponse($ex->getMessage());
+ }
$tree = phutil_tag('ul', array(), $this->buildTree($tree->getRootNode()));
return $this->buildXHPASTViewPanelResponse($tree);
}
protected function buildTree($root) {
-
try {
$name = $root->getTypeName();
$title = $root->getDescription();
diff --git a/src/applications/phpast/storage/PhabricatorXHPASTViewParseTree.php b/src/applications/phpast/storage/PhabricatorXHPASTViewParseTree.php
--- a/src/applications/phpast/storage/PhabricatorXHPASTViewParseTree.php
+++ b/src/applications/phpast/storage/PhabricatorXHPASTViewParseTree.php
@@ -3,16 +3,19 @@
final class PhabricatorXHPASTViewParseTree extends PhabricatorXHPASTViewDAO {
protected $authorPHID;
-
protected $input;
+ protected $returnCode;
protected $stdout;
+ protected $stderr;
protected function getConfiguration() {
return array(
self::CONFIG_COLUMN_SCHEMA => array(
'authorPHID' => 'phid?',
'input' => 'text',
+ 'returnCode' => 'sint32',
'stdout' => 'text',
+ 'stderr' => 'text',
),
) + parent::getConfiguration();
}

File Metadata

Mime Type
text/plain
Expires
Thu, Oct 24, 3:02 PM (3 w, 4 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6721385
Default Alt Text
D14028.id34905.diff (8 KB)

Event Timeline