3
final class ArcanistInlinesWorkflow extends ArcanistWorkflow {
5
public function getWorkflowName() {
9
public function getCommandSynopses() {
10
return phutil_console_format(<<<EOTEXT
11
**inlines** [--revision __revision_id__]
16
public function getCommandHelp() {
17
return phutil_console_format(<<<EOTEXT
18
Display inline comments related to a particular revision.
23
public function getArguments() {
26
'param' => 'revision_id',
28
'Display inline comments for a specific revision. If you do not '.
29
'specify a revision, arc will look in the commit message at HEAD.',
32
'param' => 'directory',
33
'help' => 'Specify a string printed in front of each path.',
38
public function requiresConduit() {
42
public function requiresAuthentication() {
46
public function requiresRepositoryAPI() {
50
public function run() {
51
if ($this->getArgument('revision')) {
52
$revision_id = $this->normalizeRevisionID($this->getArgument('revision'));
54
$revisions = $this->getRepositoryAPI()
55
->loadWorkingCopyDifferentialRevisions($this->getConduit(), array());
56
$revision_id = head(ipull($revisions, 'id'));
60
throw new ArcanistUsageException('No revisions found.');
63
$comments = array_mergev(
64
$this->getConduit()->callMethodSynchronous(
65
'differential.getrevisioncomments',
67
'ids' => array($revision_id),
73
$authors = $this->getConduit()->callMethodSynchronous(
76
'phids' => array_unique(ipull($comments, 'authorPHID')),
78
$authors = ipull($authors, 'userName', 'phid');
82
foreach ($comments as $comment) {
83
$author = idx($authors, $comment['authorPHID']);
84
foreach ($comment['inlines'] as $inline) {
85
$file = $inline['filePath'];
86
$line = $inline['lineNumber'];
87
$inlines[$file][$line][] = "({$author}) {$inline['content']}";
91
$root = $this->getArgument('root');
93
foreach ($inlines as $file => $file_inlines) {
95
foreach ($file_inlines as $line => $line_inlines) {
96
foreach ($line_inlines as $content) {
97
echo "{$root}{$file}:{$line}:{$content}\n";