From 92bc76aae05310474ea786a6c1fac586c1d8f4b2 Mon Sep 17 00:00:00 2001 From: epriestley Date: Wed, 18 Dec 2013 17:48:19 -0800 Subject: [PATCH] Move mercurial commit metadata parsing into a LowLevel query Summary: Ref T4195. Same as D7793, but for mercurial. (As usual, SVN needs some goofy nonsense instead, so the next diff will just make this field work.) Test Plan: Ran `reparse.php` on Git and Mercurial commits, var_dump'd the output and it looked correct. Reviewers: btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T4195 Differential Revision: https://secure.phabricator.com/D7795 --- src/__phutil_library_map__.php | 2 + .../diffusion/data/DiffusionCommitRef.php | 20 +++++++++ .../DiffusionLowLevelMercurialCommitQuery.php | 41 +++++++++++++++++++ ...RepositoryGitCommitMessageParserWorker.php | 20 ++------- ...toryMercurialCommitMessageParserWorker.php | 15 +++---- 5 files changed, 72 insertions(+), 26 deletions(-) create mode 100644 src/applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialCommitQuery.php 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); -- 2.51.2