diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 4fedfe1f08..80ac8d25a1 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -510,6 +510,7 @@ phutil_register_library_map(array( 'DiffusionLowLevelGitCommitQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelGitCommitQuery.php', 'DiffusionLowLevelGitRefQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php', 'DiffusionLowLevelMercurialBranchesQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialBranchesQuery.php', + 'DiffusionLowLevelMercurialCommitQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialCommitQuery.php', 'DiffusionLowLevelQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelQuery.php', 'DiffusionLowLevelResolveRefsQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelResolveRefsQuery.php', 'DiffusionMercurialCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionMercurialCommitParentsQuery.php', @@ -2893,6 +2894,7 @@ phutil_register_library_map(array( 'DiffusionLowLevelGitCommitQuery' => 'DiffusionLowLevelQuery', 'DiffusionLowLevelGitRefQuery' => 'DiffusionLowLevelQuery', 'DiffusionLowLevelMercurialBranchesQuery' => 'DiffusionLowLevelQuery', + 'DiffusionLowLevelMercurialCommitQuery' => 'DiffusionLowLevelQuery', 'DiffusionLowLevelQuery' => 'Phobject', 'DiffusionLowLevelResolveRefsQuery' => 'DiffusionLowLevelQuery', 'DiffusionMercurialCommitParentsQuery' => 'DiffusionCommitParentsQuery', diff --git a/src/applications/diffusion/data/DiffusionCommitRef.php b/src/applications/diffusion/data/DiffusionCommitRef.php index a111ba251f..a13175c51b 100644 --- a/src/applications/diffusion/data/DiffusionCommitRef.php +++ b/src/applications/diffusion/data/DiffusionCommitRef.php @@ -56,4 +56,24 @@ final class DiffusionCommitRef extends Phobject { return $this->message; } + public function getAuthor() { + return $this->formatUser($this->authorName, $this->authorEmail); + } + + public function getCommitter() { + return $this->formatUser($this->committerName, $this->committerEmail); + } + + private function formatUser($name, $email) { + if (strlen($name) && strlen($email)) { + return "{$name} <{$email}>"; + } else if (strlen($email)) { + return $email; + } else if (strlen($name)) { + return $name; + } else { + return null; + } + } + } diff --git a/src/applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialCommitQuery.php b/src/applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialCommitQuery.php new file mode 100644 index 0000000000..7a0d92d35a --- /dev/null +++ b/src/applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialCommitQuery.php @@ -0,0 +1,41 @@ +identifier = $identifier; + return $this; + } + + protected function executeQuery() { + $repository = $this->getRepository(); + + list($stdout) = $repository->execxLocalCommand( + 'log --template %s --rev %s', + '{author}\\n{desc}', + hgsprintf('%s', $this->identifier)); + + list($author, $message) = explode("\n", $stdout, 2); + + $author = phutil_utf8ize($author); + $message = phutil_utf8ize($message); + + $email = new PhutilEmailAddress($author); + if ($email->getDisplayName() || $email->getDomainName()) { + $author_name = $email->getDisplayName(); + $author_email = $email->getAddress(); + } else { + $author_name = $email->getAddress(); + $author_email = null; + } + + return id(new DiffusionCommitRef()) + ->setAuthorName($author_name) + ->setAuthorEmail($author_email) + ->setMessage($message); + } + +} diff --git a/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryGitCommitMessageParserWorker.php b/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryGitCommitMessageParserWorker.php index b897771be0..f437ff54fa 100644 --- a/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryGitCommitMessageParserWorker.php +++ b/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryGitCommitMessageParserWorker.php @@ -12,23 +12,9 @@ final class PhabricatorRepositoryGitCommitMessageParserWorker ->withIdentifier($commit->getCommitIdentifier()) ->execute(); - $committer_name = $ref->getCommitterName(); - $committer_email = $ref->getCommitterEmail(); - $author_name = $ref->getAuthorName(); - $author_email = $ref->getAuthorEmail(); - $message = $ref->getMessage(); - - if (strlen($author_email)) { - $author = "{$author_name} <{$author_email}>"; - } else { - $author = "{$author_name}"; - } - - if (strlen($committer_email)) { - $committer = "{$committer_name} <{$committer_email}>"; - } else { - $committer = "{$committer_name}"; - } + $committer = $ref->getCommitter(); + $author = $ref->getAuthor(); + $message = $ref->getMessage(); if ($committer == $author) { $committer = null; diff --git a/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryMercurialCommitMessageParserWorker.php b/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryMercurialCommitMessageParserWorker.php index 106570a419..e7b126d871 100644 --- a/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryMercurialCommitMessageParserWorker.php +++ b/src/applications/repository/worker/commitmessageparser/PhabricatorRepositoryMercurialCommitMessageParserWorker.php @@ -7,16 +7,13 @@ final class PhabricatorRepositoryMercurialCommitMessageParserWorker PhabricatorRepository $repository, PhabricatorRepositoryCommit $commit) { - list($stdout) = $repository->execxLocalCommand( - 'log --template %s --rev %s', - '{author}\\n{desc}', - $commit->getCommitIdentifier()); + $ref = id(new DiffusionLowLevelMercurialCommitQuery()) + ->setRepository($repository) + ->withIdentifier($commit->getCommitIdentifier()) + ->execute(); - list($author, $message) = explode("\n", $stdout, 2); - - $author = phutil_utf8ize($author); - $message = phutil_utf8ize($message); - $message = trim($message); + $author = $ref->getAuthor(); + $message = $ref->getMessage(); $this->updateCommitData($author, $message);