mirror of
https://we.phorge.it/source/arcanist.git
synced 2024-11-22 06:42:41 +01:00
Refactor author handling in the Mercurial API
Summary: There were two callsites which needed some information from the username. Only one worked "correctly", causing `arc diff` to not amend commits anymore because the author could not be parser. Test Plan: run `arc diff` with changes Reviewers: #blessed_reviewers, epriestley Reviewed By: #blessed_reviewers, epriestley Subscribers: epriestley, Korvin Differential Revision: https://secure.phabricator.com/D9797
This commit is contained in:
parent
ca5f05e62b
commit
792204db95
1 changed files with 24 additions and 12 deletions
|
@ -247,16 +247,7 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI {
|
||||||
list($node, $rev, $full_author, $date, $branch, $tag,
|
list($node, $rev, $full_author, $date, $branch, $tag,
|
||||||
$parents, $desc) = explode("\1", $log, 9);
|
$parents, $desc) = explode("\1", $log, 9);
|
||||||
|
|
||||||
// Not everyone enters their email address as a part of the username
|
list ($author, $author_email) = $this->parseFullAuthor($full_author);
|
||||||
// field. Try to make it work when it's obvious
|
|
||||||
if (strpos($full_author, '@') === false) {
|
|
||||||
$author = $full_author;
|
|
||||||
$author_email = null;
|
|
||||||
} else {
|
|
||||||
$email = new PhutilEmailAddress($full_author);
|
|
||||||
$author = $email->getDisplayName();
|
|
||||||
$author_email = $email->getAddress();
|
|
||||||
}
|
|
||||||
|
|
||||||
// NOTE: If a commit has only one parent, {parents} returns empty.
|
// NOTE: If a commit has only one parent, {parents} returns empty.
|
||||||
// If it has two parents, {parents} returns revs and short hashes, not
|
// If it has two parents, {parents} returns revs and short hashes, not
|
||||||
|
@ -735,11 +726,32 @@ final class ArcanistMercurialAPI extends ArcanistRepositoryAPI {
|
||||||
|
|
||||||
public function getAuthor() {
|
public function getAuthor() {
|
||||||
$full_author = $this->getMercurialConfig('ui.username');
|
$full_author = $this->getMercurialConfig('ui.username');
|
||||||
$email = new PhutilEmailAddress($full_author);
|
list($author, $author_email) = $this->parseFullAuthor($full_author);
|
||||||
$author = $email->getDisplayName();
|
|
||||||
return $author;
|
return $author;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parse the Mercurial author field
|
||||||
|
*
|
||||||
|
* Not everyone enters their email address as a part of the username
|
||||||
|
* field. Try to make it work when it's obvious
|
||||||
|
*
|
||||||
|
* @param string $full_author
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
protected function parseFullAuthor($full_author) {
|
||||||
|
if (strpos($full_author, '@') === false) {
|
||||||
|
$author = $full_author;
|
||||||
|
$author_email = null;
|
||||||
|
} else {
|
||||||
|
$email = new PhutilEmailAddress($full_author);
|
||||||
|
$author = $email->getDisplayName();
|
||||||
|
$author_email = $email->getAddress();
|
||||||
|
}
|
||||||
|
|
||||||
|
return array($author, $author_email);
|
||||||
|
}
|
||||||
|
|
||||||
public function addToCommit(array $paths) {
|
public function addToCommit(array $paths) {
|
||||||
$this->execxLocal(
|
$this->execxLocal(
|
||||||
'addremove -- %Ls',
|
'addremove -- %Ls',
|
||||||
|
|
Loading…
Reference in a new issue