From 407954dddd32a24c469c9c5cbc5cd6134e893c1b Mon Sep 17 00:00:00 2001 From: Joshua Spence Date: Wed, 15 Jul 2015 06:57:39 +1000 Subject: [PATCH] Output lint XML results to a file Summary: Ref T8332. I find it really odd that I need to run `arc lint --everything --output xml > checkstyle.xml` and feel that it would be much more intuitive to just run `arc lint --everything --output xml` and have the output written to `checkstyle.xml`. To provide context, we are running `arc lint --everything` in a CI job and parsing the results. Test Plan: Ran `arc lint --everything --output xml` and saw the output written to file. Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: epriestley, Korvin Maniphest Tasks: T8332 Differential Revision: https://secure.phabricator.com/D13570 --- src/workflow/ArcanistLintWorkflow.php | 33 ++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/src/workflow/ArcanistLintWorkflow.php b/src/workflow/ArcanistLintWorkflow.php index 23dc352a..f1578c37 100644 --- a/src/workflow/ArcanistLintWorkflow.php +++ b/src/workflow/ArcanistLintWorkflow.php @@ -97,6 +97,11 @@ EOTEXT "With 'compiler', show lint warnings in suitable for your editor. ". "With 'xml', show lint warnings in the Checkstyle XML format."), ), + 'outfile' => array( + 'param' => 'path', + 'help' => pht( + 'Output the linter results to a file. Defaults to stdout.'), + ), 'only-new' => array( 'param' => 'bool', 'supports' => array('git', 'hg'), // TODO: svn @@ -464,7 +469,19 @@ EOTEXT } $all_autofix = true; - $console->writeOut('%s', $renderer->renderPreamble()); + $tmp = null; + + if ($this->getArgument('outfile') !== null) { + $tmp = id(new TempFile()) + ->setPreserveFile(true); + } + + $preamble = $renderer->renderPreamble(); + if ($tmp) { + Filesystem::appendFile($tmp, $preamble); + } else { + $console->writeOut('%s', $preamble); + } foreach ($results as $result) { $result_all_autofix = $result->isAllAutofix(); @@ -479,7 +496,11 @@ EOTEXT $lint_result = $renderer->renderLintResult($result); if ($lint_result) { - $console->writeOut('%s', $lint_result); + if ($tmp) { + Filesystem::appendFile($tmp, $lint_result); + } else { + $console->writeOut('%s', $lint_result); + } } if ($apply_patches && $result->isPatchable()) { @@ -516,7 +537,13 @@ EOTEXT } } - $console->writeOut('%s', $renderer->renderPostamble()); + $postamble = $renderer->renderPostamble(); + if ($tmp) { + Filesystem::appendFile($tmp, $postamble); + Filesystem::rename($tmp, $this->getArgument('outfile')); + } else { + $console->writeOut('%s', $postamble); + } if ($wrote_to_disk && $this->shouldAmendChanges) { if ($this->shouldAmendWithoutPrompt ||