diff --git a/src/applications/diffusion/query/DiffusionCommitQuery.php b/src/applications/diffusion/query/DiffusionCommitQuery.php --- a/src/applications/diffusion/query/DiffusionCommitQuery.php +++ b/src/applications/diffusion/query/DiffusionCommitQuery.php @@ -26,6 +26,7 @@ private $needCommitData; private $needDrafts; + private $needIdentities; private $mustFilterRefs = false; private $refRepository; @@ -110,6 +111,11 @@ return $this; } + public function needIdentities($need) { + $this->needIdentities = $need; + return $this; + } + public function needAuditRequests($need) { $this->needAuditRequests = $need; return $this; @@ -393,6 +399,24 @@ } } + if ($this->needIdentities) { + $identity_phids = array_merge( + mpull($commits, 'getAuthorIdentityPHID'), + mpull($commits, 'getCommitterIdentityPHID')); + + $data = id(new PhabricatorRepositoryIdentityQuery()) + ->withPHIDs($identity_phids) + ->setViewer($this->getViewer()) + ->execute(); + $data = mpull($data, null, 'getPHID'); + + foreach ($commits as $commit) { + $author_identity = idx($data, $commit->getAuthorIdentityPHID()); + $committer_identity = idx($data, $commit->getCommitterIdentityPHID()); + $commit->attachIdentities($author_identity, $committer_identity); + } + } + if ($this->needDrafts) { PhabricatorDraftEngine::attachDrafts( $viewer, diff --git a/src/applications/repository/phid/PhabricatorRepositoryIdentityPHIDType.php b/src/applications/repository/phid/PhabricatorRepositoryIdentityPHIDType.php --- a/src/applications/repository/phid/PhabricatorRepositoryIdentityPHIDType.php +++ b/src/applications/repository/phid/PhabricatorRepositoryIdentityPHIDType.php @@ -28,6 +28,18 @@ public function loadHandles( PhabricatorHandleQuery $query, array $handles, - array $objects) {} + array $objects) { + + foreach ($handles as $phid => $handle) { + $identity = $objects[$phid]; + + $id = $identity->getID(); + $name = $identity->getIdentityNameRaw(); + + $handle->setObjectName(pht('Identity %d', $id)); + $handle->setName($name); + $handle->setURI($identity->getURI()); + } + } } diff --git a/src/applications/repository/query/PhabricatorRepositoryIdentityQuery.php b/src/applications/repository/query/PhabricatorRepositoryIdentityQuery.php --- a/src/applications/repository/query/PhabricatorRepositoryIdentityQuery.php +++ b/src/applications/repository/query/PhabricatorRepositoryIdentityQuery.php @@ -131,8 +131,10 @@ return $identities; } - $users = id(new PhabricatorUser())->loadAllWhere( - 'phid IN (%Ls)', $user_ids); + $users = id(new PhabricatorPeopleQuery()) + ->withPHIDs($user_ids) + ->setViewer($this->getViewer()) + ->execute(); $users = mpull($users, null, 'getPHID'); foreach ($identities as $identity) { diff --git a/src/applications/repository/storage/PhabricatorRepositoryCommit.php b/src/applications/repository/storage/PhabricatorRepositoryCommit.php --- a/src/applications/repository/storage/PhabricatorRepositoryCommit.php +++ b/src/applications/repository/storage/PhabricatorRepositoryCommit.php @@ -44,6 +44,9 @@ private $audits = self::ATTACHABLE; private $repository = self::ATTACHABLE; private $customFields = self::ATTACHABLE; + private $authorIdentity = self::ATTACHABLE; + private $committerIdentity = self::ATTACHABLE; + private $drafts = array(); private $auditAuthorityPHIDs = array(); @@ -191,6 +194,21 @@ return ($this->audits !== self::ATTACHABLE); } + public function attachIdentities( + PhabricatorRepositoryIdentity $author, + $committer = null) { + $this->authorIdentity = $author; + $this->committerIdentity = $committer; + } + + public function getAuthorIdentity() { + return $this->assertAttached($this->authorIdentity); + } + + public function getCommiterIdentity() { + return $this->assertAttached($this->committerIdentity); + } + public function loadAndAttachAuditAuthority( PhabricatorUser $viewer, $actor_phid = null) { diff --git a/src/applications/repository/storage/PhabricatorRepositoryIdentity.php b/src/applications/repository/storage/PhabricatorRepositoryIdentity.php --- a/src/applications/repository/storage/PhabricatorRepositoryIdentity.php +++ b/src/applications/repository/storage/PhabricatorRepositoryIdentity.php @@ -14,6 +14,17 @@ protected $manuallySetUserPHID; protected $currentEffectiveUserPHID; + private $effectiveUser = self::ATTACHABLE; + + public function attachEffectiveUser(PhabricatorUser $user) { + $this->effectiveUser = $user; + return $this; + } + + public function getEffectiveUser() { + return $this->assertAttached($this->effectiveUser); + } + protected function getConfiguration() { return array( self::CONFIG_AUX_PHID => true, @@ -63,6 +74,10 @@ return '/diffusion/identity/view/'.$this->getID().'/'; } + public function hasEffectiveUser() { + return ($this->currentEffectiveUserPHID != null); + } + public function save() { if ($this->manuallySetUserPHID) { $this->currentEffectiveUserPHID = $this->manuallySetUserPHID;