public static final function callConduitWithDiffusionRequest(PhabricatorUser $user, DiffusionRequest $drequest, $method, array $params = array()) { $repository = $drequest->getRepository(); $core_params = array('repository' => $repository->getPHID()); if ($drequest->getBranch() !== null) { $core_params['branch'] = $drequest->getBranch(); } // If the method we're calling doesn't actually take some of the implicit // parameters we derive from the DiffusionRequest, omit them. $method_object = ConduitAPIMethod::getConduitMethod($method); $method_params = $method_object->getParamTypes(); foreach ($core_params as $key => $value) { if (empty($method_params[$key])) { unset($core_params[$key]); } } $params = $params + $core_params; $client = $repository->newConduitClient($user, $drequest->getIsClusterRequest()); if (!$client) { return id(new ConduitCall($method, $params))->setUser($user)->execute(); } else { return $client->callMethodSynchronous($method, $params); } }