Page MenuHomePhabricator

D19491.id46615.diff
No OneTemporary

D19491.id46615.diff

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,23 @@
}
}
+ if ($this->needIdentities) {
+ $identity_phids = array_merge(
+ mpull($commits, 'getAuthorIdentityPHID'),
+ mpull($commits, 'getCommitterIdentityPHID'));
+
+ $data = id(new PhabricatorRepositoryIdentity())->loadAllWhere(
+ 'phid in (%Ls)',
+ $identity_phids);
+ $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
@@ -124,6 +124,26 @@
return $where;
}
+ protected function didFilterPage(array $identities) {
+ $user_ids = array_filter(
+ mpull($identities, 'getCurrentEffectiveUserPHID', 'getID'));
+ if (!$user_ids) {
+ return $identities;
+ }
+
+ $users = id(new PhabricatorUser())->loadAllWhere(
+ 'phid IN (%Ls)', $user_ids);
+
+ foreach ($identities as $identity) {
+ if ($identity->hasEffectiveUser()) {
+ $user = idx($users, $identity->getID());
+ $identity->attachEffectiveUser($user);
+ }
+ }
+
+ return $identities;
+ }
+
public function getQueryApplicationClass() {
return 'PhabricatorDiffusionApplication';
}
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,20 @@
protected $manuallySetUserPHID;
protected $currentEffectiveUserPHID;
+ private $effectiveUser = self::ATTACHABLE;
+
+ public function attachEffectiveUser(PhabricatorUser $user) {
+ $this->effectiveUser = $user;
+ return $this;
+ }
+
+ public function getEffectiveUser($assert_attached = true) {
+ if ($assert_attached) {
+ return $this->assertAttached($this->effectiveUser);
+ }
+ return $this->effectiveUser;
+ }
+
protected function getConfiguration() {
return array(
self::CONFIG_AUX_PHID => true,
@@ -63,6 +77,10 @@
return '/diffusion/identity/view/'.$this->getID().'/';
}
+ public function hasEffectiveUser() {
+ return ($this->currentEffectiveUserPHID != null);
+ }
+
public function save() {
if ($this->manuallySetUserPHID) {
$this->currentEffectiveUserPHID = $this->manuallySetUserPHID;

File Metadata

Mime Type
text/plain
Expires
Mon, Mar 24, 3:59 AM (2 w, 15 h ago)
Storage Engine
blob
Storage Format
Encrypted (AES-256-CBC)
Storage Handle
7684738
Default Alt Text
D19491.id46615.diff (5 KB)

Event Timeline