1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2025-02-02 01:48:23 +01:00

Provide a Conduit method to get inline comments

Summary:
See D2855 for usage.

This has a drawback that inlines without a comment (synthetic comments) are not attached anywhere.
I don't like adding more and more methods so I've chosen this solution.
Plus comments and inline comments are often useful together.

Test Plan: Called the method on a revision with inline comments.

Reviewers: epriestley

Reviewed By: epriestley

CC: vii, aran, Korvin

Differential Revision: https://secure.phabricator.com/D2844
This commit is contained in:
vrana 2012-06-22 23:04:02 -07:00
parent 382bafa271
commit 43121f6858

View file

@ -29,6 +29,7 @@ final class ConduitAPI_differential_getrevisioncomments_Method
public function defineParamTypes() {
return array(
'ids' => 'required list<int>',
'inlines' => 'optional bool',
);
}
@ -53,18 +54,55 @@ final class ConduitAPI_differential_getrevisioncomments_Method
'revisionID IN (%Ld)',
$revision_ids);
$with_inlines = $request->getValue('inlines');
if ($with_inlines) {
$inlines = id(new DifferentialInlineComment())->loadAllWhere(
'revisionID IN (%Ld)',
$revision_ids);
$changesets = array();
if ($inlines) {
$changesets = id(new DifferentialChangeset())->loadAllWhere(
'id IN (%Ld)',
array_unique(mpull($inlines, 'getChangesetID')));
$inlines = mgroup($inlines, 'getCommentID');
}
}
foreach ($comments as $comment) {
$revision_id = $comment->getRevisionID();
if (!array_key_exists($revision_id, $results)) {
$results[$revision_id] = array();
}
$results[$revision_id][] = array(
$result = array(
'revisionID' => $revision_id,
'action' => $comment->getAction(),
'authorPHID' => $comment->getAuthorPHID(),
'dateCreated' => $comment->getDateCreated(),
'content' => $comment->getContent(),
);
if ($with_inlines) {
$result['inlines'] = array();
foreach (idx($inlines, $comment->getID(), array()) as $inline) {
$file_path = null;
$diff_id = null;
$changeset = idx($changesets, $inline->getChangesetID());
if ($changeset) {
$file_path = ($inline->getIsNewFile() ?
$changeset->getFilename() :
$changeset->getOldFile());
$diff_id = $changeset->getDiffID();
}
$result['inlines'][] = array(
'filePath' => $file_path,
'isNewFile' => $inline->getIsNewFile(),
'lineNumber' => $inline->getLineNumber(),
'lineLength' => $inline->getLineLength(),
'diffID' => $diff_id,
'content' => $inline->getContent(),
);
}
// TODO: Put synthetic inlines without an attached comment somewhere.
}
$results[$revision_id][] = $result;
}
return $results;