[ Index ] |
PHP Cross Reference of Phabricator |
[Summary view] [Print] [Text view]
1 <?php 2 3 final class PhabricatorRepositoryCommitHeraldWorker 4 extends PhabricatorRepositoryCommitParserWorker { 5 6 7 public function getRequiredLeaseTime() { 8 // Herald rules may take a long time to process. 9 return phutil_units('4 hours in seconds'); 10 } 11 12 public function parseCommit( 13 PhabricatorRepository $repository, 14 PhabricatorRepositoryCommit $commit) { 15 16 // Reload the commit to pull commit data and audit requests. 17 $commit = id(new DiffusionCommitQuery()) 18 ->setViewer(PhabricatorUser::getOmnipotentUser()) 19 ->withIDs(array($commit->getID())) 20 ->needCommitData(true) 21 ->needAuditRequests(true) 22 ->executeOne(); 23 $data = $commit->getCommitData(); 24 25 if (!$data) { 26 throw new PhabricatorWorkerPermanentFailureException( 27 pht( 28 'Unable to load commit data. The data for this task is invalid '. 29 'or no longer exists.')); 30 } 31 32 $commit->attachRepository($repository); 33 34 $content_source = PhabricatorContentSource::newForSource( 35 PhabricatorContentSource::SOURCE_DAEMON, 36 array()); 37 38 $committer_phid = $data->getCommitDetail('committerPHID'); 39 $author_phid = $data->getCommitDetail('authorPHID'); 40 $acting_as_phid = nonempty( 41 $committer_phid, 42 $author_phid, 43 id(new PhabricatorDiffusionApplication())->getPHID()); 44 45 $editor = id(new PhabricatorAuditEditor()) 46 ->setActor(PhabricatorUser::getOmnipotentUser()) 47 ->setActingAsPHID($acting_as_phid) 48 ->setContentSource($content_source); 49 50 $xactions = array(); 51 $xactions[] = id(new PhabricatorAuditTransaction()) 52 ->setTransactionType(PhabricatorAuditTransaction::TYPE_COMMIT) 53 ->setDateCreated($commit->getEpoch()) 54 ->setNewValue(array( 55 'description' => $data->getCommitMessage(), 56 'summary' => $data->getSummary(), 57 'authorName' => $data->getAuthorName(), 58 'authorPHID' => $commit->getAuthorPHID(), 59 'committerName' => $data->getCommitDetail('committer'), 60 'committerPHID' => $data->getCommitDetail('committerPHID'), 61 )); 62 try { 63 $raw_patch = $this->loadRawPatchText($repository, $commit); 64 } catch (Exception $ex) { 65 $raw_patch = pht('Unable to generate patch: %s', $ex->getMessage()); 66 } 67 $editor->setRawPatch($raw_patch); 68 return $editor->applyTransactions($commit, $xactions); 69 } 70 71 private function loadRawPatchText( 72 PhabricatorRepository $repository, 73 PhabricatorRepositoryCommit $commit) { 74 75 $drequest = DiffusionRequest::newFromDictionary( 76 array( 77 'user' => PhabricatorUser::getOmnipotentUser(), 78 'initFromConduit' => false, 79 'repository' => $repository, 80 'commit' => $commit->getCommitIdentifier(), 81 )); 82 83 $raw_query = DiffusionRawDiffQuery::newFromDiffusionRequest($drequest); 84 $raw_query->setLinesOfContext(3); 85 86 $time_key = 'metamta.diffusion.time-limit'; 87 $byte_key = 'metamta.diffusion.byte-limit'; 88 $time_limit = PhabricatorEnv::getEnvConfig($time_key); 89 $byte_limit = PhabricatorEnv::getEnvConfig($byte_key); 90 91 if ($time_limit) { 92 $raw_query->setTimeout($time_limit); 93 } 94 95 $raw_diff = $raw_query->loadRawDiff(); 96 97 $size = strlen($raw_diff); 98 if ($byte_limit && $size > $byte_limit) { 99 $pretty_size = phutil_format_bytes($size); 100 $pretty_limit = phutil_format_bytes($byte_limit); 101 throw new Exception(pht( 102 'Patch size of %s exceeds configured byte size limit (%s) of %s.', 103 $pretty_size, 104 $byte_key, 105 $pretty_limit)); 106 } 107 108 return $raw_diff; 109 } 110 111 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Sun Nov 30 09:20:46 2014 | Cross-referenced by PHPXref 0.7.1 |