diff --git a/src/applications/diffusion/conduit/ConduitAPI_diffusion_abstractquery_Method.php b/src/applications/diffusion/conduit/ConduitAPI_diffusion_abstractquery_Method.php --- a/src/applications/diffusion/conduit/ConduitAPI_diffusion_abstractquery_Method.php +++ b/src/applications/diffusion/conduit/ConduitAPI_diffusion_abstractquery_Method.php @@ -23,57 +23,18 @@ private $diffusionRequest; private $repository; - private $shouldCreateDiffusionRequest = true; protected function setDiffusionRequest(DiffusionRequest $request) { $this->diffusionRequest = $request; return $this; } + protected function getDiffusionRequest() { return $this->diffusionRequest; } - /** - * A wee bit of magic here. If @{method:shouldCreateDiffusionRequest} - * returns false, this function grabs a repository object based on the - * callsign directly. Otherwise, the repository was loaded when we created a - * @{class:DiffusionRequest}, so this function just pulls it out of the - * @{class:DiffusionRequest}. - * - * @return @{class:PhabricatorRepository} $repository - */ protected function getRepository(ConduitAPIRequest $request) { - if (!$this->repository) { - if ($this->shouldCreateDiffusionRequest()) { - $this->repository = $this->getDiffusionRequest()->getRepository(); - } else { - $callsign = $request->getValue('callsign'); - $repository = id(new PhabricatorRepositoryQuery()) - ->setViewer($request->getUser()) - ->withCallsigns(array($callsign)) - ->executeOne(); - if (!$repository) { - throw new ConduitException('ERR-UNKNOWN-REPOSITORY'); - } - $this->repository = $repository; - } - } - return $this->repository; - } - - /** - * You should probably not mess with this unless your conduit method is - * involved with the creation / validation / etc. of - * @{class:DiffusionRequest}s. If you are dealing with - * @{class:DiffusionRequest}, setting this to false should help avoid - * infinite loops. - */ - protected function setShouldCreateDiffusionRequest($should) { - $this->shouldCreateDiffusionRequest = $should; - return $this; - } - private function shouldCreateDiffusionRequest() { - return $this->shouldCreateDiffusionRequest; + return $this->getDiffusionRequest()->getRepository(); } final public function defineErrorTypes() { @@ -132,27 +93,19 @@ * @{method:getResult} should be overridden by subclasses as necessary, e.g. * there is a common operation across all version control systems that * should occur after @{method:getResult}, like formatting a timestamp. - * - * In the rare cases where one does not want to create a - * @{class:DiffusionRequest} - suppose to avoid infinite loops in the - * creation of a @{class:DiffusionRequest} - make sure to call - * - * $this->setShouldCreateDiffusionRequest(false); - * - * in the constructor of the pertinent Conduit method. */ final protected function execute(ConduitAPIRequest $request) { - if ($this->shouldCreateDiffusionRequest()) { - $drequest = DiffusionRequest::newFromDictionary( - array( - 'user' => $request->getUser(), - 'callsign' => $request->getValue('callsign'), - 'branch' => $request->getValue('branch'), - 'path' => $request->getValue('path'), - 'commit' => $request->getValue('commit'), - )); - $this->setDiffusionRequest($drequest); - } + $drequest = DiffusionRequest::newFromDictionary( + array( + 'user' => $request->getUser(), + 'callsign' => $request->getValue('callsign'), + 'branch' => $request->getValue('branch'), + 'path' => $request->getValue('path'), + 'commit' => $request->getValue('commit'), + 'initFromConduit' => false, + )); + + $this->setDiffusionRequest($drequest); return $this->getResult($request); }