1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-25 16:22:43 +01:00

Build "DiffusionCommitRef" objects from "internal.commit.search", not "diffusion.querycommits", in the message parser worker

Summary: Ref T13552. Swap the call we're using to build "CommitRef" objects here to the recently-introduced "internal.commit.search" method.

Test Plan: Used "bin/repository reparse --message ..." to reparse commits, added "var_dump()" to inspect results. Saw sensible CommitRef and CommitData objects get built.

Maniphest Tasks: T13552

Differential Revision: https://secure.phabricator.com/D21446
This commit is contained in:
epriestley 2020-08-12 12:00:13 -07:00
parent f6238f9d9b
commit 3a80efa440
5 changed files with 76 additions and 32 deletions

View file

@ -73,17 +73,11 @@ abstract class DiffusionQuery extends PhabricatorQuery {
$params = $params + $core_params;
$client = $repository->newConduitClient(
$future = $repository->newConduitFuture(
$user,
$method,
$params,
$drequest->getIsClusterRequest());
if (!$client) {
$result = id(new ConduitCall($method, $params))
->setUser($user)
->execute();
$future = new ImmediateFuture($result);
} else {
$future = $client->callMethod($method, $params);
}
if (!$return_future) {
return $future->resolve();

View file

@ -2258,6 +2258,28 @@ final class PhabricatorRepository extends PhabricatorRepositoryDAO
return $client;
}
public function newConduitFuture(
PhabricatorUser $viewer,
$method,
array $params,
$never_proxy = false) {
$client = $this->newConduitClient(
$viewer,
$never_proxy);
if (!$client) {
$result = id(new ConduitCall($method, $params))
->setUser($viewer)
->execute();
$future = new ImmediateFuture($result);
} else {
$future = $client->callMethod($method, $params);
}
return $future;
}
public function getPassthroughEnvironmentalVariables() {
$env = $_ENV;

View file

@ -523,6 +523,50 @@ final class PhabricatorRepositoryCommit
return $data->getCommitDetail('committer');
}
public function newCommitRef(PhabricatorUser $viewer) {
$repository = $this->getRepository();
$future = $repository->newConduitFuture(
$viewer,
'internal.commit.search',
array(
'constraints' => array(
'repositoryPHIDs' => array($repository->getPHID()),
'phids' => array($this->getPHID()),
),
));
$result = $future->resolve();
$commit_display = $this->getMonogram();
if (empty($result['data'])) {
throw new Exception(
pht(
'Unable to retrieve details for commit "%s"!',
$commit_display));
}
if (count($result['data']) !== 1) {
throw new Exception(
pht(
'Got too many results (%s) for commit "%s", expected %s.',
phutil_count($result['data']),
$commit_display,
1));
}
$record = head($result['data']);
$ref_record = idxv($record, array('fields', 'ref'));
if (!$ref_record) {
throw new Exception(
pht(
'Unable to retrieve CommitRef record for commit "%s".',
$commit_display));
}
return DiffusionCommitRef::newFromDictionary($ref_record);
}
/* -( PhabricatorPolicyInterface )----------------------------------------- */

View file

@ -124,4 +124,9 @@ abstract class PhabricatorRepositoryCommitParserWorker
return array($link, $suffix);
}
final public function getViewer() {
return PhabricatorUser::getOmnipotentUser();
}
}

View file

@ -14,31 +14,10 @@ abstract class PhabricatorRepositoryCommitMessageParserWorker
PhabricatorRepositoryCommit $commit) {
if (!$this->shouldSkipImportStep()) {
$viewer = PhabricatorUser::getOmnipotentUser();
$viewer = $this->getViewer();
$refs_raw = DiffusionQuery::callConduitWithDiffusionRequest(
$viewer,
DiffusionRequest::newFromDictionary(
array(
'repository' => $repository,
'user' => $viewer,
)),
'diffusion.querycommits',
array(
'repositoryPHID' => $repository->getPHID(),
'phids' => array($commit->getPHID()),
'bypassCache' => true,
'needMessages' => true,
));
$ref = $commit->newCommitRef($viewer);
if (empty($refs_raw['data'])) {
throw new Exception(
pht(
'Unable to retrieve details for commit "%s"!',
$commit->getPHID()));
}
$ref = DiffusionCommitRef::newFromConduitResult(head($refs_raw['data']));
$this->updateCommitData($ref);
}