From 93b3bc8e891a3ec0ffeb7525f7276af3cb07c43c Mon Sep 17 00:00:00 2001 From: epriestley Date: Fri, 16 Sep 2011 09:37:15 -0700 Subject: [PATCH] Add a Mercurial message parser Summary: See D943, this is the second parse stage. This will mark Differential revisions as "Committed" among other things. Almost all the logic here is shared between VCSes so the implementation itself is straightforward. Test Plan: Parsed all messages for the official Mercurial repository. Reviewers: Makinde, jungejason, nh, tuomaspelkonen, aran Reviewed By: Makinde CC: aran, Makinde Differential Revision: 944 --- src/__phutil_library_map__.php | 2 + .../PhabricatorRepositoryCommitTaskDaemon.php | 25 ++++----- ...toryMercurialCommitMessageParserWorker.php | 53 +++++++++++++++++++ .../mercurial/__init__.php | 15 ++++++ 4 files changed, 81 insertions(+), 14 deletions(-) create mode 100644 src/applications/repository/worker/commitmessageparser/mercurial/PhabricatorRepositoryMercurialCommitMessageParserWorker.php create mode 100644 src/applications/repository/worker/commitmessageparser/mercurial/__init__.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 1436e99dae..ab26999da9 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -579,6 +579,7 @@ phutil_register_library_map(array( 'PhabricatorRepositoryGitHubPostReceiveController' => 'applications/repository/controller/github-post-receive', 'PhabricatorRepositoryListController' => 'applications/repository/controller/list', 'PhabricatorRepositoryMercurialCommitDiscoveryDaemon' => 'applications/repository/daemon/commitdiscovery/mercurial', + 'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'applications/repository/worker/commitmessageparser/mercurial', 'PhabricatorRepositoryMercurialPullDaemon' => 'applications/repository/daemon/mercurialpull', 'PhabricatorRepositoryPullLocalDaemon' => 'applications/repository/daemon/pulllocal', 'PhabricatorRepositoryShortcut' => 'applications/repository/storage/shortcut', @@ -1180,6 +1181,7 @@ phutil_register_library_map(array( 'PhabricatorRepositoryGitHubPostReceiveController' => 'PhabricatorRepositoryController', 'PhabricatorRepositoryListController' => 'PhabricatorRepositoryController', 'PhabricatorRepositoryMercurialCommitDiscoveryDaemon' => 'PhabricatorRepositoryCommitDiscoveryDaemon', + 'PhabricatorRepositoryMercurialCommitMessageParserWorker' => 'PhabricatorRepositoryCommitMessageParserWorker', 'PhabricatorRepositoryMercurialPullDaemon' => 'PhabricatorRepositoryPullLocalDaemon', 'PhabricatorRepositoryPullLocalDaemon' => 'PhabricatorRepositoryDaemon', 'PhabricatorRepositoryShortcut' => 'PhabricatorRepositoryDAO', diff --git a/src/applications/repository/daemon/committask/PhabricatorRepositoryCommitTaskDaemon.php b/src/applications/repository/daemon/committask/PhabricatorRepositoryCommitTaskDaemon.php index 751f435446..c9ce60ca0a 100644 --- a/src/applications/repository/daemon/committask/PhabricatorRepositoryCommitTaskDaemon.php +++ b/src/applications/repository/daemon/committask/PhabricatorRepositoryCommitTaskDaemon.php @@ -51,28 +51,25 @@ class PhabricatorRepositoryCommitTaskDaemon switch ($vcs) { case PhabricatorRepositoryType::REPOSITORY_TYPE_GIT: $class = 'PhabricatorRepositoryGitCommitMessageParserWorker'; - $task = new PhabricatorWorkerTask(); - $task->setTaskClass($class); - $task->setData( - array( - 'commitID' => $commit->getID(), - )); - $task->save(); break; case PhabricatorRepositoryType::REPOSITORY_TYPE_SVN: $class = 'PhabricatorRepositorySvnCommitMessageParserWorker'; - $task = new PhabricatorWorkerTask(); - $task->setTaskClass($class); - $task->setData( - array( - 'commitID' => $commit->getID(), - )); - $task->save(); + break; + case PhabricatorRepositoryType::REPOSITORY_TYPE_MERCURIAL: + $class = 'PhabricatorRepositoryMercurialCommitMessageParserWorker'; break; default: throw new Exception("Unknown repository type."); } + $task = new PhabricatorWorkerTask(); + $task->setTaskClass($class); + $task->setData( + array( + 'commitID' => $commit->getID(), + )); + $task->save(); + $this->stillWorking(); } sleep(1); diff --git a/src/applications/repository/worker/commitmessageparser/mercurial/PhabricatorRepositoryMercurialCommitMessageParserWorker.php b/src/applications/repository/worker/commitmessageparser/mercurial/PhabricatorRepositoryMercurialCommitMessageParserWorker.php new file mode 100644 index 0000000000..70bc86d8ca --- /dev/null +++ b/src/applications/repository/worker/commitmessageparser/mercurial/PhabricatorRepositoryMercurialCommitMessageParserWorker.php @@ -0,0 +1,53 @@ +getDetail('local-path'); + + list($stdout) = $repository->execxLocalCommand( + 'log --template %s --rev %s', + '{author}\\n{desc}', + $commit->getCommitIdentifier()); + + list($author, $message) = explode("\n", $stdout, 2); + + $author = phutil_utf8ize($author); + $message = phutil_utf8ize($message); + $message = trim($message); + + $this->updateCommitData($author, $message); + + if ($this->shouldQueueFollowupTasks()) { + $task = new PhabricatorWorkerTask(); + $task->setTaskClass( + 'PhabricatorRepositoryMercurialCommitChangeParserWorker'); + $task->setData( + array( + 'commitID' => $commit->getID(), + )); + $task->save(); + } + } + +} diff --git a/src/applications/repository/worker/commitmessageparser/mercurial/__init__.php b/src/applications/repository/worker/commitmessageparser/mercurial/__init__.php new file mode 100644 index 0000000000..1f22433b1c --- /dev/null +++ b/src/applications/repository/worker/commitmessageparser/mercurial/__init__.php @@ -0,0 +1,15 @@ +