Page MenuHomePhabricator

D18469.diff
No OneTemporary

D18469.diff

diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php
--- a/src/__phutil_library_map__.php
+++ b/src/__phutil_library_map__.php
@@ -544,6 +544,7 @@
'DifferentialRevisionHeraldField' => 'applications/differential/herald/DifferentialRevisionHeraldField.php',
'DifferentialRevisionHeraldFieldGroup' => 'applications/differential/herald/DifferentialRevisionHeraldFieldGroup.php',
'DifferentialRevisionIDCommitMessageField' => 'applications/differential/field/DifferentialRevisionIDCommitMessageField.php',
+ 'DifferentialRevisionInlineTransaction' => 'applications/differential/xaction/DifferentialRevisionInlineTransaction.php',
'DifferentialRevisionInlinesController' => 'applications/differential/controller/DifferentialRevisionInlinesController.php',
'DifferentialRevisionListController' => 'applications/differential/controller/DifferentialRevisionListController.php',
'DifferentialRevisionListView' => 'applications/differential/view/DifferentialRevisionListView.php',
@@ -5547,6 +5548,7 @@
'DifferentialRevisionHeraldField' => 'HeraldField',
'DifferentialRevisionHeraldFieldGroup' => 'HeraldFieldGroup',
'DifferentialRevisionIDCommitMessageField' => 'DifferentialCommitMessageField',
+ 'DifferentialRevisionInlineTransaction' => 'PhabricatorModularTransactionType',
'DifferentialRevisionInlinesController' => 'DifferentialController',
'DifferentialRevisionListController' => 'DifferentialController',
'DifferentialRevisionListView' => 'AphrontView',
diff --git a/src/applications/differential/xaction/DifferentialRevisionInlineTransaction.php b/src/applications/differential/xaction/DifferentialRevisionInlineTransaction.php
new file mode 100644
--- /dev/null
+++ b/src/applications/differential/xaction/DifferentialRevisionInlineTransaction.php
@@ -0,0 +1,53 @@
+<?php
+
+final class DifferentialRevisionInlineTransaction
+ extends PhabricatorModularTransactionType {
+
+ // NOTE: This class is NOT an actual Differential modular transaction type!
+ // It does not extend "DifferentialRevisionTransactionType". Some day it
+ // should, but for now it's just reducing the amount of hackiness around
+ // supporting inline comments in the "transaction.search" Conduit API method.
+
+ const TRANSACTIONTYPE = 'internal.pretend-inline';
+
+ public function getTransactionTypeForConduit($xaction) {
+ return 'inline';
+ }
+
+ public function loadTransactionTypeConduitData(array $xactions) {
+ $viewer = $this->getViewer();
+
+ $changeset_ids = array();
+ foreach ($xactions as $xaction) {
+ $changeset_ids[] = $xaction->getComment()->getChangesetID();
+ }
+
+ $changesets = id(new DifferentialChangesetQuery())
+ ->setViewer($viewer)
+ ->withIDs($changeset_ids)
+ ->execute();
+
+ $changesets = mpull($changesets, null, 'getID');
+
+ return $changesets;
+ }
+
+ public function getFieldValuesForConduit($object, $data) {
+ $comment = $object->getComment();
+
+ $changeset = $data[$comment->getChangesetID()];
+ $diff = $changeset->getDiff();
+
+ return array(
+ 'diff' => array(
+ 'id' => $diff->getID(),
+ 'phid' => $diff->getPHID(),
+ ),
+ 'path' => $changeset->getDisplayFilename(),
+ 'line' => (int)$comment->getLineNumber(),
+ 'length' => (int)($comment->getLineLength() + 1),
+ 'replyToCommentPHID' => $comment->getReplyToCommentPHID(),
+ );
+ }
+
+}
diff --git a/src/applications/transactions/conduit/TransactionSearchConduitAPIMethod.php b/src/applications/transactions/conduit/TransactionSearchConduitAPIMethod.php
--- a/src/applications/transactions/conduit/TransactionSearchConduitAPIMethod.php
+++ b/src/applications/transactions/conduit/TransactionSearchConduitAPIMethod.php
@@ -97,7 +97,18 @@
continue;
}
- $modular_template = $xaction->getModularType();
+ // TODO: Hack things so certain transactions which don't have a modular
+ // type yet can use a pseudotype until they modularize. Some day, we'll
+ // modularize everything and remove this.
+ switch ($xaction->getTransactionType()) {
+ case DifferentialTransaction::TYPE_INLINE:
+ $modular_template = new DifferentialRevisionInlineTransaction();
+ break;
+ default:
+ $modular_template = $xaction->getModularType();
+ break;
+ }
+
$modular_class = get_class($modular_template);
if (!isset($modular_objects[$modular_class])) {
try {
@@ -173,6 +184,16 @@
$fields = (object)$fields;
}
+ // If we haven't found a modular type, fallback for some simple core
+ // types. Ideally, we'll modularize everything some day.
+ if ($type === null) {
+ switch ($xaction->getTransactionType()) {
+ case PhabricatorTransactions::TYPE_COMMENT:
+ $type = 'comment';
+ break;
+ }
+ }
+
$data[] = array(
'id' => (int)$xaction->getID(),
'phid' => (string)$xaction->getPHID(),

File Metadata

Mime Type
text/plain
Expires
Tue, Mar 18, 5:14 PM (5 d, 12 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7710168
Default Alt Text
D18469.diff (4 KB)

Event Timeline