mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-22 21:40:55 +01:00
Correctly parse author and committer identities again
Summary: See D3977, a terrible diff where I made a huge messs. Test Plan: Ran `reparse.php --message --trace <revision>`, verified correct identification of author. Reviewers: edward, vrana Reviewed By: edward CC: aran Differential Revision: https://secure.phabricator.com/D4104
This commit is contained in:
parent
b4de56ef4b
commit
1a3bf098ae
3 changed files with 79 additions and 102 deletions
|
@ -1009,7 +1009,6 @@ phutil_register_library_map(array(
|
|||
'PhabricatorRepositoryCommitChangeParserWorker' => 'applications/repository/worker/commitchangeparser/PhabricatorRepositoryCommitChangeParserWorker.php',
|
||||
'PhabricatorRepositoryCommitData' => 'applications/repository/storage/PhabricatorRepositoryCommitData.php',
|
||||
'PhabricatorRepositoryCommitHeraldWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitHeraldWorker.php',
|
||||
'PhabricatorRepositoryCommitMessageDetailParser' => 'applications/repository/parser/PhabricatorRepositoryCommitMessageDetailParser.php',
|
||||
'PhabricatorRepositoryCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/PhabricatorRepositoryCommitMessageParserWorker.php',
|
||||
'PhabricatorRepositoryCommitOwnersWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitOwnersWorker.php',
|
||||
'PhabricatorRepositoryCommitParserWorker' => 'applications/repository/worker/PhabricatorRepositoryCommitParserWorker.php',
|
||||
|
|
|
@ -1,101 +0,0 @@
|
|||
<?php
|
||||
|
||||
abstract class PhabricatorRepositoryCommitMessageDetailParser {
|
||||
|
||||
private $commit;
|
||||
private $commitData;
|
||||
|
||||
final public function __construct(
|
||||
PhabricatorRepositoryCommit $commit,
|
||||
PhabricatorRepositoryCommitData $data) {
|
||||
$this->commit = $commit;
|
||||
$this->commitData = $data;
|
||||
}
|
||||
|
||||
final public function getCommit() {
|
||||
return $this->commit;
|
||||
}
|
||||
|
||||
final public function getCommitData() {
|
||||
return $this->commitData;
|
||||
}
|
||||
|
||||
/**
|
||||
* Try to link a commit name to a Phabricator account. Basically we throw it
|
||||
* at the wall and see if something sticks.
|
||||
*/
|
||||
public function resolveUserPHID($user_name) {
|
||||
if (!strlen($user_name)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$phid = $this->findUserByUserName($user_name);
|
||||
if ($phid) {
|
||||
return $phid;
|
||||
}
|
||||
$phid = $this->findUserByEmailAddress($user_name);
|
||||
if ($phid) {
|
||||
return $phid;
|
||||
}
|
||||
$phid = $this->findUserByRealName($user_name);
|
||||
if ($phid) {
|
||||
return $phid;
|
||||
}
|
||||
|
||||
// No hits yet, try to parse it as an email address.
|
||||
|
||||
$email = new PhutilEmailAddress($user_name);
|
||||
|
||||
$phid = $this->findUserByEmailAddress($email->getAddress());
|
||||
if ($phid) {
|
||||
return $phid;
|
||||
}
|
||||
|
||||
$display_name = $email->getDisplayName();
|
||||
if ($display_name) {
|
||||
$phid = $this->findUserByUserName($display_name);
|
||||
if ($phid) {
|
||||
return $phid;
|
||||
}
|
||||
$phid = $this->findUserByRealName($display_name);
|
||||
if ($phid) {
|
||||
return $phid;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
abstract public function parseCommitDetails();
|
||||
|
||||
private function findUserByUserName($user_name) {
|
||||
$by_username = id(new PhabricatorUser())->loadOneWhere(
|
||||
'userName = %s',
|
||||
$user_name);
|
||||
if ($by_username) {
|
||||
return $by_username->getPHID();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private function findUserByRealName($real_name) {
|
||||
// Note, real names are not guaranteed unique, which is why we do it this
|
||||
// way.
|
||||
$by_realname = id(new PhabricatorUser())->loadAllWhere(
|
||||
'realName = %s',
|
||||
$real_name);
|
||||
if (count($by_realname) == 1) {
|
||||
return reset($by_realname)->getPHID();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private function findUserByEmailAddress($email_address) {
|
||||
$by_email = PhabricatorUser::loadOneWithEmailAddress($email_address);
|
||||
if ($by_email) {
|
||||
return $by_email->getPHID();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
|
@ -20,10 +20,17 @@ abstract class PhabricatorRepositoryCommitMessageParserWorker
|
|||
}
|
||||
$data->setCommitID($commit->getID());
|
||||
$data->setAuthorName($author);
|
||||
$data->setCommitDetail(
|
||||
'authorPHID',
|
||||
$this->resolveUserPHID($author));
|
||||
|
||||
$data->setCommitMessage($message);
|
||||
|
||||
if ($committer) {
|
||||
$data->setCommitDetail('committer', $committer);
|
||||
$data->setCommitDetail(
|
||||
'committerPHID',
|
||||
$this->resolveUserPHID($committer));
|
||||
}
|
||||
|
||||
$repository = $this->repository;
|
||||
|
@ -436,4 +443,76 @@ abstract class PhabricatorRepositoryCommitMessageParserWorker
|
|||
return $event->getValue('result');
|
||||
}
|
||||
|
||||
private function resolveUserPHID($user_name) {
|
||||
if (!strlen($user_name)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$phid = $this->findUserByUserName($user_name);
|
||||
if ($phid) {
|
||||
return $phid;
|
||||
}
|
||||
$phid = $this->findUserByEmailAddress($user_name);
|
||||
if ($phid) {
|
||||
return $phid;
|
||||
}
|
||||
$phid = $this->findUserByRealName($user_name);
|
||||
if ($phid) {
|
||||
return $phid;
|
||||
}
|
||||
|
||||
// No hits yet, try to parse it as an email address.
|
||||
|
||||
$email = new PhutilEmailAddress($user_name);
|
||||
|
||||
$phid = $this->findUserByEmailAddress($email->getAddress());
|
||||
if ($phid) {
|
||||
return $phid;
|
||||
}
|
||||
|
||||
$display_name = $email->getDisplayName();
|
||||
if ($display_name) {
|
||||
$phid = $this->findUserByUserName($display_name);
|
||||
if ($phid) {
|
||||
return $phid;
|
||||
}
|
||||
$phid = $this->findUserByRealName($display_name);
|
||||
if ($phid) {
|
||||
return $phid;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function findUserByUserName($user_name) {
|
||||
$by_username = id(new PhabricatorUser())->loadOneWhere(
|
||||
'userName = %s',
|
||||
$user_name);
|
||||
if ($by_username) {
|
||||
return $by_username->getPHID();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private function findUserByRealName($real_name) {
|
||||
// Note, real names are not guaranteed unique, which is why we do it this
|
||||
// way.
|
||||
$by_realname = id(new PhabricatorUser())->loadAllWhere(
|
||||
'realName = %s',
|
||||
$real_name);
|
||||
if (count($by_realname) == 1) {
|
||||
return reset($by_realname)->getPHID();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private function findUserByEmailAddress($email_address) {
|
||||
$by_email = PhabricatorUser::loadOneWithEmailAddress($email_address);
|
||||
if ($by_email) {
|
||||
return $by_email->getPHID();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue