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:
parent
382bafa271
commit
43121f6858
1 changed files with 42 additions and 4 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue