Differential D20910 Diff 49854 src/applications/repository/management/PhabricatorRepositoryManagementRebuildIdentitiesWorkflow.php
Changeset View
Changeset View
Standalone View
Standalone View
src/applications/repository/management/PhabricatorRepositoryManagementRebuildIdentitiesWorkflow.php
<?php | <?php | ||||
final class PhabricatorRepositoryManagementRebuildIdentitiesWorkflow | final class PhabricatorRepositoryManagementRebuildIdentitiesWorkflow | ||||
extends PhabricatorRepositoryManagementWorkflow { | extends PhabricatorRepositoryManagementWorkflow { | ||||
private $identityCache = array(); | |||||
protected function didConstruct() { | protected function didConstruct() { | ||||
$this | $this | ||||
->setName('rebuild-identities') | ->setName('rebuild-identities') | ||||
->setExamples( | ->setExamples( | ||||
'**rebuild-identities** [__options__] __repository__') | '**rebuild-identities** [__options__] __repository__') | ||||
->setSynopsis(pht('Rebuild repository identities from commits.')) | ->setSynopsis(pht('Rebuild repository identities from commits.')) | ||||
->setArguments( | ->setArguments( | ||||
array( | array( | ||||
▲ Show 20 Lines • Show All 75 Lines • ▼ Show 20 Lines | foreach ($iterator as $commit) { | ||||
"No changes for %s.\n", | "No changes for %s.\n", | ||||
$commit->getDisplayName()); | $commit->getDisplayName()); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
private function getIdentityForCommit( | private function getIdentityForCommit( | ||||
PhabricatorRepositoryCommit $commit, $identity_name) { | PhabricatorRepositoryCommit $commit, | ||||
$raw_identity) { | |||||
static $seen = array(); | if (!isset($this->identityCache[$raw_identity])) { | ||||
$identity_key = PhabricatorHash::digestForIndex($identity_name); | $viewer = $this->getViewer(); | ||||
if (empty($seen[$identity_key])) { | |||||
try { | $identity = id(new DiffusionRepositoryIdentityEngine()) | ||||
$user_phid = id(new DiffusionResolveUserQuery()) | ->setViewer($viewer) | ||||
->withName($identity_name) | ->setSourcePHID($commit->getPHID()) | ||||
->execute(); | ->newResolvedIdentity($raw_identity); | ||||
$identity = id(new PhabricatorRepositoryIdentity()) | $this->identityCache[$raw_identity] = $identity; | ||||
->setAuthorPHID($commit->getPHID()) | |||||
->setIdentityName($identity_name) | |||||
->setAutomaticGuessedUserPHID($user_phid) | |||||
->save(); | |||||
} catch (AphrontDuplicateKeyQueryException $ex) { | |||||
// Somehow this identity already exists? | |||||
$identity = id(new PhabricatorRepositoryIdentityQuery()) | |||||
->setViewer(PhabricatorUser::getOmnipotentUser()) | |||||
->withIdentityNames(array($identity_name)) | |||||
->executeOne(); | |||||
} | |||||
$seen[$identity_key] = $identity; | |||||
} | } | ||||
return $seen[$identity_key]; | return $this->identityCache[$raw_identity]; | ||||
} | } | ||||
} | } |