mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-22 06:42:41 +01:00
Provide a "--json" flag to 'arc diff'
Summary: This should be implemented more elegantly, but this is a mostly-reasonable attempt at it. Test Plan: Ran 'arc diff --only --json' with this diff. Reviewed By: gc3 Reviewers: gc3 CC: aran, epriestley, gc3 Differential Revision: 509
This commit is contained in:
parent
7efe723ff5
commit
051ef2c695
1 changed files with 36 additions and 9 deletions
|
@ -184,6 +184,10 @@ EOTEXT
|
|||
'lint' => true,
|
||||
),
|
||||
),
|
||||
'json' => array(
|
||||
'help' =>
|
||||
'Emit machine-readable JSON. EXPERIMENTAL! Probably does not work!',
|
||||
),
|
||||
'*' => 'paths',
|
||||
);
|
||||
}
|
||||
|
@ -195,6 +199,13 @@ EOTEXT
|
|||
$repository_api->setDiffLinesOfContext(3);
|
||||
}
|
||||
|
||||
$output_json = $this->getArgument('json');
|
||||
if ($output_json) {
|
||||
// TODO: We should move this to a higher-level and put an indirection
|
||||
// layer between echoing stuff and stdout.
|
||||
ob_start();
|
||||
}
|
||||
|
||||
$conduit = $this->getConduit();
|
||||
$this->requireCleanWorkingCopy();
|
||||
|
||||
|
@ -343,10 +354,20 @@ EOTEXT
|
|||
}
|
||||
|
||||
if ($this->shouldOnlyCreateDiff()) {
|
||||
echo phutil_console_format(
|
||||
"Created a new Differential diff:\n".
|
||||
" **Diff URI:** __%s__\n\n",
|
||||
$diff_info['uri']);
|
||||
if (!$output_json) {
|
||||
echo phutil_console_format(
|
||||
"Created a new Differential diff:\n".
|
||||
" **Diff URI:** __%s__\n\n",
|
||||
$diff_info['uri']);
|
||||
} else {
|
||||
$human = ob_get_clean();
|
||||
echo json_encode(array(
|
||||
'diffURI' => $diff_info['uri'],
|
||||
'diffID' => $diff_info['diffid'],
|
||||
'human' => $human,
|
||||
))."\n";
|
||||
ob_start();
|
||||
}
|
||||
} else {
|
||||
$message = $commit_message;
|
||||
|
||||
|
@ -498,6 +519,10 @@ EOTEXT
|
|||
|
||||
$this->diffID = $diff_info['diffid'];
|
||||
|
||||
if ($output_json) {
|
||||
ob_get_clean();
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -595,13 +620,15 @@ EOTEXT
|
|||
|
||||
if ($bases) {
|
||||
$rev = reset($bases);
|
||||
|
||||
$revlist = array();
|
||||
foreach ($bases as $path => $baserev) {
|
||||
$revlist[] = " Revision {$baserev}, {$path}";
|
||||
}
|
||||
$revlist = implode("\n", $revlist);
|
||||
|
||||
foreach ($bases as $path => $baserev) {
|
||||
if ($baserev !== $rev) {
|
||||
$revlist = array();
|
||||
foreach ($bases as $path => $baserev) {
|
||||
$revlist[] = " Revision {$baserev}, {$path}";
|
||||
}
|
||||
$revlist = implode("\n", $revlist);
|
||||
throw new ArcanistUsageException(
|
||||
"Base revisions of changed paths are mismatched. Update all ".
|
||||
"paths to the same base revision before creating a diff: ".
|
||||
|
|
Loading…
Reference in a new issue