Page Menu
Home
Phabricator
Search
Configure Global Search
Log In
Files
F13960794
D8077.id18275.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
7 KB
Referenced Files
None
Subscribers
None
D8077.id18275.diff
View Options
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
@@ -168,6 +168,7 @@
'ConduitAPI_diffusion_lastmodifiedquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_lastmodifiedquery_Method.php',
'ConduitAPI_diffusion_looksoon_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_looksoon_Method.php',
'ConduitAPI_diffusion_mergedcommitsquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_mergedcommitsquery_Method.php',
+ 'ConduitAPI_diffusion_querycommits_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_querycommits.php',
'ConduitAPI_diffusion_rawdiffquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_rawdiffquery_Method.php',
'ConduitAPI_diffusion_readmequery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_readmequery_Method.php',
'ConduitAPI_diffusion_refsquery_Method' => 'applications/diffusion/conduit/ConduitAPI_diffusion_refsquery_Method.php',
@@ -2637,6 +2638,7 @@
'ConduitAPI_diffusion_lastmodifiedquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
'ConduitAPI_diffusion_looksoon_Method' => 'ConduitAPI_diffusion_Method',
'ConduitAPI_diffusion_mergedcommitsquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
+ 'ConduitAPI_diffusion_querycommits_Method' => 'ConduitAPI_diffusion_Method',
'ConduitAPI_diffusion_rawdiffquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
'ConduitAPI_diffusion_readmequery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
'ConduitAPI_diffusion_refsquery_Method' => 'ConduitAPI_diffusion_abstractquery_Method',
diff --git a/src/applications/conduit/method/ConduitAPIMethod.php b/src/applications/conduit/method/ConduitAPIMethod.php
--- a/src/applications/conduit/method/ConduitAPIMethod.php
+++ b/src/applications/conduit/method/ConduitAPIMethod.php
@@ -1,9 +1,8 @@
<?php
/**
- *
* @task status Method Status
- * @group conduit
+ * @task pager Paging Results
*/
abstract class ConduitAPIMethod
extends Phobject
@@ -167,6 +166,63 @@
}
+/* -( Paging Results )----------------------------------------------------- */
+
+
+ /**
+ * @task pager
+ */
+ protected function getPagerParamTypes() {
+ return array(
+ 'before' => 'optional string',
+ 'after' => 'optional string',
+ 'limit' => 'optional int (default = 100)',
+ );
+ }
+
+
+ /**
+ * @task pager
+ */
+ protected function newPager(ConduitAPIRequest $request) {
+ $limit = $request->getValue('limit', 100);
+ $limit = min(1000, $limit);
+ $limit = max(1, $limit);
+
+ $pager = id(new AphrontCursorPagerView())
+ ->setPageSize($limit);
+
+ $before_id = $request->getValue('before');
+ if ($before_id !== null) {
+ $pager->setBeforeID($before_id);
+ }
+
+ $after_id = $request->getValue('after');
+ if ($after_id !== null) {
+ $pager->setAfterID($after_id);
+ }
+
+ return $pager;
+ }
+
+
+ /**
+ * @task pager
+ */
+ protected function addPagerResults(
+ array $results,
+ AphrontCursorPagerView $pager) {
+
+ $results['cursor'] = array(
+ 'limit' => $pager->getPageSize(),
+ 'after' => $pager->getNextPageID(),
+ 'before' =>$pager->getPrevPageID(),
+ );
+
+ return $results;
+ }
+
+
/* -( PhabricatorPolicyInterface )----------------------------------------- */
diff --git a/src/applications/diffusion/conduit/ConduitAPI_diffusion_getcommits_Method.php b/src/applications/diffusion/conduit/ConduitAPI_diffusion_getcommits_Method.php
--- a/src/applications/diffusion/conduit/ConduitAPI_diffusion_getcommits_Method.php
+++ b/src/applications/diffusion/conduit/ConduitAPI_diffusion_getcommits_Method.php
@@ -7,7 +7,15 @@
extends ConduitAPI_diffusion_Method {
public function getMethodDescription() {
- return "Retrieve Diffusion commit information.";
+ return pht('Retrieve Diffusion commit information.');
+ }
+
+ public function getMethodStatus() {
+ return self::METHOD_STATUS_DEPRECATED;
+ }
+
+ public function getMethodStatusDescription() {
+ return pht('Obsoleted by diffusion.querycommits.');
}
public function defineParamTypes() {
diff --git a/src/applications/diffusion/conduit/ConduitAPI_diffusion_querycommits_Method.php b/src/applications/diffusion/conduit/ConduitAPI_diffusion_querycommits_Method.php
new file mode 100644
--- /dev/null
+++ b/src/applications/diffusion/conduit/ConduitAPI_diffusion_querycommits_Method.php
@@ -0,0 +1,83 @@
+<?php
+
+final class ConduitAPI_diffusion_querycommits_Method
+ extends ConduitAPI_diffusion_Method {
+
+ public function getMethodDescription() {
+ return pht('Retrieve information about commits.');
+ }
+
+ public function defineReturnType() {
+ return 'map<string, dict>';
+ }
+
+ public function defineParamTypes() {
+ return array(
+ 'ids' => 'optional list<int>',
+ 'phids' => 'optional list<phid>',
+ 'names' => 'optional list<string>',
+ 'repositoryPHID' => 'optional phid',
+ ) + $this->getPagerParamTypes();
+ }
+
+ public function defineErrorTypes() {
+ return array();
+ }
+
+ protected function execute(ConduitAPIRequest $request) {
+ $query = id(new DiffusionCommitQuery())
+ ->setViewer($request->getUser());
+
+ $repository_phid = $request->getValue('repositoryPHID');
+ if ($repository_phid) {
+ $repository = id(new PhabricatorRepositoryQuery())
+ ->setViewer($request->getUser())
+ ->withPHIDs(array($repository_phid))
+ ->executeOne();
+ if ($repository) {
+ $query->withRepository($repository);
+ }
+ }
+
+ $names = $request->getValue('names');
+ if ($names) {
+ $query->withIdentifiers($names);
+ }
+
+ $ids = $request->getValue('ids');
+ if ($ids) {
+ $query->withIDs($ids);
+ }
+
+ $phids = $request->getValue('phids');
+ if ($phids) {
+ $query->withPHIDs($phids);
+ }
+
+ $pager = $this->newPager($request);
+ $commits = $query->executeWithCursorPager($pager);
+
+ $map = $query->getIdentifierMap();
+ $map = mpull($map, 'getPHID');
+
+ $data = array();
+ foreach ($commits as $commit) {
+ $data[$commit->getPHID()] = array(
+ 'id' => $commit->getID(),
+ 'phid' => $commit->getPHID(),
+ 'repositoryPHID' => $commit->getRepository()->getPHID(),
+ 'identifier' => $commit->getCommitIdentifier(),
+ 'epoch' => $commit->getEpoch(),
+ 'isImporting' => !$commit->isImported(),
+ );
+ }
+
+ $result = array(
+ 'data' => $data,
+ 'identifierMap' => nonempty($map, (object)array()),
+ );
+
+ return $this->addPagerResults($result, $pager);
+ }
+
+}
diff --git a/src/applications/diffusion/query/DiffusionCommitQuery.php b/src/applications/diffusion/query/DiffusionCommitQuery.php
--- a/src/applications/diffusion/query/DiffusionCommitQuery.php
+++ b/src/applications/diffusion/query/DiffusionCommitQuery.php
@@ -259,7 +259,8 @@
// If we discarded all possible identifiers (e.g., they all referenced
// bogus repositories or were all too short), make sure the query finds
// nothing.
- throw new PhabricatorEmptyQueryException('No commit identifiers.');
+ throw new PhabricatorEmptyQueryException(
+ pht('No commit identifiers.'));
}
$where[] = '('.implode(' OR ', $sql).')';
@@ -286,6 +287,8 @@
$this->repositoryIDs);
}
+ $where[] = $this->buildPagingClause($conn_r);
+
return $this->formatWhereClause($where);
}
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Oct 16, 1:27 AM (4 w, 1 d ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
6715313
Default Alt Text
D8077.id18275.diff (7 KB)
Attached To
Mode
D8077: Add `diffusion.querycommits` and deprecate `diffusion.getcommits`
Attached
Detach File
Event Timeline
Log In to Comment