[ Index ]

PHP Cross Reference of Phabricator

title

Body

[close]

/src/applications/differential/conduit/ -> DifferentialCreateRawDiffConduitAPIMethod.php (source)

   1  <?php
   2  
   3  final class DifferentialCreateRawDiffConduitAPIMethod
   4    extends DifferentialConduitAPIMethod {
   5  
   6    public function getAPIMethodName() {
   7      return 'differential.createrawdiff';
   8    }
   9  
  10    public function getMethodDescription() {
  11      return pht('Create a new Differential diff from a raw diff source.');
  12    }
  13  
  14    public function defineParamTypes() {
  15      return array(
  16        'diff' => 'required string',
  17        'repositoryPHID' => 'optional string',
  18        'viewPolicy' => 'optional string',
  19      );
  20    }
  21  
  22    public function defineReturnType() {
  23      return 'nonempty dict';
  24    }
  25  
  26    public function defineErrorTypes() {
  27      return array(
  28      );
  29    }
  30  
  31    protected function execute(ConduitAPIRequest $request) {
  32      $viewer = $request->getUser();
  33      $raw_diff = $request->getValue('diff');
  34  
  35      $repository_phid = $request->getValue('repositoryPHID');
  36      if ($repository_phid) {
  37        $repository = id(new PhabricatorRepositoryQuery())
  38          ->setViewer($viewer)
  39          ->withPHIDs(array($repository_phid))
  40          ->executeOne();
  41        if (!$repository) {
  42          throw new Exception(
  43            pht('No such repository "%s"!', $repository_phid));
  44        }
  45      }
  46  
  47      $parser = new ArcanistDiffParser();
  48      $changes = $parser->parseDiff($raw_diff);
  49      $diff = DifferentialDiff::newFromRawChanges($viewer, $changes);
  50  
  51      $diff_data_dict = array(
  52        'creationMethod' => 'web',
  53        'authorPHID' => $viewer->getPHID(),
  54        'repositoryPHID' => $repository_phid,
  55        'lintStatus' => DifferentialLintStatus::LINT_SKIP,
  56        'unitStatus' => DifferentialUnitStatus::UNIT_SKIP,);
  57  
  58      $xactions = array(id(new DifferentialTransaction())
  59        ->setTransactionType(DifferentialDiffTransaction::TYPE_DIFF_CREATE)
  60        ->setNewValue($diff_data_dict),);
  61  
  62      if ($request->getValue('viewPolicy')) {
  63        $xactions[] = id(new DifferentialTransaction())
  64          ->setTransactionType(PhabricatorTransactions::TYPE_VIEW_POLICY)
  65          ->setNewValue($request->getValue('viewPolicy'));
  66      }
  67  
  68      id(new DifferentialDiffEditor())
  69        ->setActor($viewer)
  70        ->setContentSourceFromConduitRequest($request)
  71        ->setLookupRepository(false) // respect user choice
  72        ->applyTransactions($diff, $xactions);
  73  
  74      return $this->buildDiffInfoDictionary($diff);
  75    }
  76  
  77  }


Generated: Sun Nov 30 09:20:46 2014 Cross-referenced by PHPXref 0.7.1