public function newDiffFromCommit(PhabricatorRepositoryCommit $commit) { $viewer = $this->getViewer(); $repository = $commit->getRepository(); $identifier = $commit->getCommitIdentifier(); $monogram = $commit->getMonogram(); $drequest = DiffusionRequest::newFromDictionary(array('user' => $viewer, 'repository' => $repository)); $raw_diff = DiffusionQuery::callConduitWithDiffusionRequest($viewer, $drequest, 'diffusion.rawdiffquery', array('commit' => $identifier)); // TODO: Support adds, deletes and moves under SVN. if (strlen($raw_diff)) { $changes = id(new ArcanistDiffParser())->parseDiff($raw_diff); } else { // This is an empty diff, maybe made with `git commit --allow-empty`. // NOTE: These diffs have the same tree hash as their ancestors, so // they may attach to revisions in an unexpected way. Just let this // happen for now, although it might make sense to special case it // eventually. $changes = array(); } $diff = DifferentialDiff::newFromRawChanges($viewer, $changes)->setRepositoryPHID($repository->getPHID())->setCreationMethod('commit')->setSourceControlSystem($repository->getVersionControlSystem())->setLintStatus(DifferentialLintStatus::LINT_AUTO_SKIP)->setUnitStatus(DifferentialUnitStatus::UNIT_AUTO_SKIP)->setDateCreated($commit->getEpoch())->setDescription($monogram); $author_phid = $this->getAuthorPHID(); if ($author_phid !== null) { $diff->setAuthorPHID($author_phid); } $parents = DiffusionQuery::callConduitWithDiffusionRequest($viewer, $drequest, 'diffusion.commitparentsquery', array('commit' => $identifier)); if ($parents) { $diff->setSourceControlBaseRevision(head($parents)); } // TODO: Attach binary files. return $diff->save(); }
protected function parseCommit(PhabricatorRepository $repository, PhabricatorRepositoryCommit $commit) { $this->log("%s\n", pht('Parsing "%s"...', $commit->getMonogram())); if ($this->isBadCommit($commit)) { $this->log(pht('This commit is marked bad!')); return; } $results = $this->parseCommitChanges($repository, $commit); if ($results) { $this->writeCommitChanges($repository, $commit, $results); } $this->finishParse(); }
protected function parseCommit(PhabricatorRepository $repository, PhabricatorRepositoryCommit $commit) { $this->log("%s\n", pht('Parsing "%s"...', $commit->getMonogram())); if ($this->isBadCommit($commit)) { $this->log(pht('This commit is marked bad!')); return; } if (!$this->shouldSkipImportStep()) { $results = $this->parseCommitChanges($repository, $commit); if ($results) { $this->writeCommitChanges($repository, $commit, $results); } $commit->writeImportStatusFlag($this->getImportStepFlag()); PhabricatorSearchWorker::queueDocumentForIndexing($commit->getPHID()); } $this->finishParse(); }
protected function isBadCommit(PhabricatorRepositoryCommit $commit) { $repository = new PhabricatorRepository(); $bad_commit = queryfx_one($repository->establishConnection('w'), 'SELECT * FROM %T WHERE fullCommitName = %s', PhabricatorRepository::TABLE_BADCOMMIT, $commit->getMonogram()); return (bool) $bad_commit; }
public static function getMailThreading(PhabricatorRepository $repository, PhabricatorRepositoryCommit $commit) { return array('diffusion-audit-' . $commit->getPHID(), pht('Commit %s', $commit->getMonogram())); }