mirror of
https://we.phorge.it/source/phorge.git
synced 2025-02-08 21:08:29 +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() {
|
public function defineParamTypes() {
|
||||||
return array(
|
return array(
|
||||||
'ids' => 'required list<int>',
|
'ids' => 'required list<int>',
|
||||||
|
'inlines' => 'optional bool',
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,18 +54,55 @@ final class ConduitAPI_differential_getrevisioncomments_Method
|
||||||
'revisionID IN (%Ld)',
|
'revisionID IN (%Ld)',
|
||||||
$revision_ids);
|
$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) {
|
foreach ($comments as $comment) {
|
||||||
$revision_id = $comment->getRevisionID();
|
$revision_id = $comment->getRevisionID();
|
||||||
if (!array_key_exists($revision_id, $results)) {
|
$result = array(
|
||||||
$results[$revision_id] = array();
|
|
||||||
}
|
|
||||||
$results[$revision_id][] = array(
|
|
||||||
'revisionID' => $revision_id,
|
'revisionID' => $revision_id,
|
||||||
'action' => $comment->getAction(),
|
'action' => $comment->getAction(),
|
||||||
'authorPHID' => $comment->getAuthorPHID(),
|
'authorPHID' => $comment->getAuthorPHID(),
|
||||||
'dateCreated' => $comment->getDateCreated(),
|
'dateCreated' => $comment->getDateCreated(),
|
||||||
'content' => $comment->getContent(),
|
'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;
|
return $results;
|
||||||
|
|
Loading…
Add table
Reference in a new issue