diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index e7be13bcc8..dcddcd6005 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -82,6 +82,7 @@ phutil_register_library_map(array( 'ConduitAPI_differential_getcommitmessage_Method' => 'applications/conduit/method/differential/getcommitmessage', 'ConduitAPI_differential_getcommitpaths_Method' => 'applications/conduit/method/differential/getcommitpaths', 'ConduitAPI_differential_getdiff_Method' => 'applications/conduit/method/differential/getdiff', + 'ConduitAPI_differential_getrevision_Method' => 'applications/conduit/method/differential/getrevision', 'ConduitAPI_differential_getrevisionfeedback_Method' => 'applications/conduit/method/differential/getrevisionfeedback', 'ConduitAPI_differential_markcommitted_Method' => 'applications/conduit/method/differential/markcommitted', 'ConduitAPI_differential_parsecommitmessage_Method' => 'applications/conduit/method/differential/parsecommitmessage', @@ -531,6 +532,7 @@ phutil_register_library_map(array( 'ConduitAPI_differential_getcommitmessage_Method' => 'ConduitAPIMethod', 'ConduitAPI_differential_getcommitpaths_Method' => 'ConduitAPIMethod', 'ConduitAPI_differential_getdiff_Method' => 'ConduitAPIMethod', + 'ConduitAPI_differential_getrevision_Method' => 'ConduitAPIMethod', 'ConduitAPI_differential_getrevisionfeedback_Method' => 'ConduitAPIMethod', 'ConduitAPI_differential_markcommitted_Method' => 'ConduitAPIMethod', 'ConduitAPI_differential_parsecommitmessage_Method' => 'ConduitAPIMethod', diff --git a/src/applications/conduit/method/differential/getdiff/ConduitAPI_differential_getdiff_Method.php b/src/applications/conduit/method/differential/getdiff/ConduitAPI_differential_getdiff_Method.php index bb5e3f31ab..48428e18a2 100644 --- a/src/applications/conduit/method/differential/getdiff/ConduitAPI_differential_getdiff_Method.php +++ b/src/applications/conduit/method/differential/getdiff/ConduitAPI_differential_getdiff_Method.php @@ -69,6 +69,10 @@ class ConduitAPI_differential_getdiff_Method extends ConduitAPIMethod { $changeset->attachHunks($changeset->loadHunks()); } + return $this->createDiffDict($diff); + } + + public static function createDiffDict(DifferentialDiff $diff) { $dict = array( 'id' => $diff->getID(), 'parent' => $diff->getParentRevisionID(), diff --git a/src/applications/conduit/method/differential/getrevision/ConduitAPI_differential_getrevision_Method.php b/src/applications/conduit/method/differential/getrevision/ConduitAPI_differential_getrevision_Method.php new file mode 100644 index 0000000000..a59cc21de1 --- /dev/null +++ b/src/applications/conduit/method/differential/getrevision/ConduitAPI_differential_getrevision_Method.php @@ -0,0 +1,83 @@ + 'required id', + ); + } + + public function defineReturnType() { + return 'nonempty dict'; + } + + public function defineErrorTypes() { + return array( + 'ERR_BAD_REVISION' => 'No such revision exists.', + ); + } + + protected function execute(ConduitAPIRequest $request) { + $diff = null; + + $revision_id = $request->getValue('revision_id'); + $revision = id(new DifferentialRevision())->load($revision_id); + if (!$revision) { + throw new ConduitException('ERR_BAD_REVISION'); + } + + $diffs = $revision->loadDiffs(); + + $diff_dicts = array(); + foreach ($diffs as $diff) { + $diff->attachChangesets($diff->loadChangesets()); + // TODO: We could batch this to improve performance. + foreach ($diff->getChangesets() as $changeset) { + $changeset->attachHunks($changeset->loadHunks()); + } + $diff_dicts[] = + ConduitAPI_differential_getdiff_Method::createDiffDict($diff); + } + + $dict = array( + 'id' => $revision->getID(), + 'phid' => $revision->getPHID(), + 'authorPHID' => $revision->getAuthorPHID(), + 'title' => $revision->getTitle(), + 'status' => $revision->getStatus(), + 'statusName' => DifferentialRevisionStatus::getNameForRevisionStatus( + $revision->getStatus()), + 'summary' => $revision->getSummary(), + 'testPlan' => $revision->getTestPlan(), + 'revertPlan' => $revision->getRevertPlan(), + 'blameRevision' => $revision->getBlameRevision(), + 'dateCommitted' => $revision->getDateCommitted(), + 'lineCount' => $revision->getLineCount(), + 'diffs' => $diff_dicts, + ); + + return $dict; + } + +} diff --git a/src/applications/conduit/method/differential/getrevision/__init__.php b/src/applications/conduit/method/differential/getrevision/__init__.php new file mode 100644 index 0000000000..5434b75d52 --- /dev/null +++ b/src/applications/conduit/method/differential/getrevision/__init__.php @@ -0,0 +1,18 @@ +