protected function execute(ConduitAPIRequest $request)
 {
     $diff = id(new DifferentialDiff())->load($request->getValue('diffid'));
     if (!$diff) {
         throw new ConduitException('ERR_BAD_DIFF');
     }
     $revision = id(new DifferentialRevision())->load($request->getValue('id'));
     if (!$revision) {
         throw new ConduitException('ERR_BAD_REVISION');
     }
     if ($request->getUser()->getPHID() !== $revision->getAuthorPHID()) {
         throw new ConduitException('ERR_WRONG_USER');
     }
     if ($revision->getStatus() == ArcanistDifferentialRevisionStatus::CLOSED) {
         throw new ConduitException('ERR_CLOSED');
     }
     $content_source = PhabricatorContentSource::newForSource(PhabricatorContentSource::SOURCE_CONDUIT, array());
     $editor = new DifferentialRevisionEditor($revision, $revision->getAuthorPHID());
     $editor->setContentSource($content_source);
     $fields = $request->getValue('fields');
     $editor->copyFieldsFromConduit($fields);
     $editor->addDiff($diff, $request->getValue('message'));
     $editor->save();
     return array('revisionid' => $revision->getID(), 'uri' => PhabricatorEnv::getURI('/D' . $revision->getID()));
 }
 public static function newRevisionFromConduitWithDiff(array $fields, DifferentialDiff $diff, $user_phid)
 {
     $revision = new DifferentialRevision();
     $revision->setPHID($revision->generatePHID());
     $revision->setAuthorPHID($user_phid);
     $revision->setStatus(ArcanistDifferentialRevisionStatus::NEEDS_REVIEW);
     $editor = new DifferentialRevisionEditor($revision, $user_phid);
     $editor->copyFieldsFromConduit($fields);
     $editor->addDiff($diff, null);
     $editor->save();
     return $revision;
 }
 public static function newRevisionFromConduitWithDiff(array $fields, DifferentialDiff $diff, $user_phid)
 {
     $revision = new DifferentialRevision();
     $revision->setPHID($revision->generatePHID());
     $revision->setAuthorPHID($user_phid);
     $revision->setStatus(DifferentialRevisionStatus::NEEDS_REVIEW);
     $editor = new DifferentialRevisionEditor($revision, $user_phid);
     $editor->copyFieldsFromConduit($fields);
     $editor->addDiff($diff, null);
     $editor->save();
     // Tasks can only be updated after revision has been saved to the
     // database. Currently tasks are updated only when a revision is created.
     // UI must be used to modify tasks after creating one.
     $editor->updateTasks();
     return $revision;
 }
 protected function execute(ConduitAPIRequest $request)
 {
     $diff = id(new DifferentialDiff())->load($request->getValue('diffid'));
     if (!$diff) {
         throw new ConduitException('ERR_BAD_DIFF');
     }
     $revision = id(new DifferentialRevision())->load($request->getValue('id'));
     if ($request->getUser()->getPHID() !== $revision->getAuthorPHID()) {
         throw new ConduitException('ERR_WRONG_USER');
     }
     if ($revision->getStatus() == DifferentialRevisionStatus::COMMITTED) {
         throw new ConduitException('ERR_COMMITTED');
     }
     $editor = new DifferentialRevisionEditor($revision, $revision->getAuthorPHID());
     $fields = $request->getValue('fields');
     $editor->copyFieldsFromConduit($fields);
     $editor->addDiff($diff, $request->getValue('message'));
     $editor->save();
     return array('revisionid' => $revision->getID(), 'uri' => PhabricatorEnv::getURI('/D' . $revision->getID()));
 }