From b90e51ab0eddf16ca12503c9610b2c254c065213 Mon Sep 17 00:00:00 2001 From: epriestley Date: Mon, 4 Nov 2013 12:15:32 -0800 Subject: [PATCH] Clean up `hg --debug branches` calls Summary: Ref T1493. Consolidate these a bit; they might need some more magic once we do `--noupdate` checkouts. Mostly just trying to clean up and centralize this code a bit. Test Plan: Viewed and `bin/repository discover`'d Mercurial repos with and without any branches. Reviewers: btrahan Reviewed By: btrahan CC: aran Maniphest Tasks: T1493 Differential Revision: https://secure.phabricator.com/D7480 --- src/__phutil_library_map__.php | 2 ++ ...onduitAPI_diffusion_branchquery_Method.php | 16 +++-------- ...iffusionLowLevelMercurialBranchesQuery.php | 28 +++++++++++++++++++ .../PhabricatorRepositoryPullLocalDaemon.php | 11 +++----- 4 files changed, 38 insertions(+), 19 deletions(-) create mode 100644 src/applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialBranchesQuery.php diff --git a/src/__phutil_library_map__.php b/src/__phutil_library_map__.php index 565eb65b27..0ee3c6890b 100644 --- a/src/__phutil_library_map__.php +++ b/src/__phutil_library_map__.php @@ -496,6 +496,7 @@ phutil_register_library_map(array( 'DiffusionLintDetailsController' => 'applications/diffusion/controller/DiffusionLintDetailsController.php', 'DiffusionLintSaveRunner' => 'applications/diffusion/DiffusionLintSaveRunner.php', 'DiffusionLowLevelGitRefQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelGitRefQuery.php', + 'DiffusionLowLevelMercurialBranchesQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialBranchesQuery.php', 'DiffusionLowLevelQuery' => 'applications/diffusion/query/lowlevel/DiffusionLowLevelQuery.php', 'DiffusionMercurialCommitParentsQuery' => 'applications/diffusion/query/parents/DiffusionMercurialCommitParentsQuery.php', 'DiffusionMercurialExpandShortNameQuery' => 'applications/diffusion/query/expandshortname/DiffusionMercurialExpandShortNameQuery.php', @@ -2701,6 +2702,7 @@ phutil_register_library_map(array( 'DiffusionLintController' => 'DiffusionController', 'DiffusionLintDetailsController' => 'DiffusionController', 'DiffusionLowLevelGitRefQuery' => 'DiffusionLowLevelQuery', + 'DiffusionLowLevelMercurialBranchesQuery' => 'DiffusionLowLevelQuery', 'DiffusionLowLevelQuery' => 'Phobject', 'DiffusionMercurialCommitParentsQuery' => 'DiffusionCommitParentsQuery', 'DiffusionMercurialExpandShortNameQuery' => 'DiffusionExpandShortNameQuery', diff --git a/src/applications/diffusion/conduit/ConduitAPI_diffusion_branchquery_Method.php b/src/applications/diffusion/conduit/ConduitAPI_diffusion_branchquery_Method.php index 04fac8ad53..92f3b14165 100644 --- a/src/applications/diffusion/conduit/ConduitAPI_diffusion_branchquery_Method.php +++ b/src/applications/diffusion/conduit/ConduitAPI_diffusion_branchquery_Method.php @@ -65,17 +65,9 @@ final class ConduitAPI_diffusion_branchquery_Method $offset = $request->getValue('offset'); $limit = $request->getValue('limit'); - list($stdout) = $repository->execxLocalCommand( - '--debug branches'); - $branch_info = ArcanistMercurialParser::parseMercurialBranches($stdout); - - $branches = array(); - foreach ($branch_info as $name => $info) { - $branch = new DiffusionBranchInformation(); - $branch->setName($name); - $branch->setHeadCommitIdentifier($info['rev']); - $branches[] = $branch->toDictionary(); - } + $branches = id(new DiffusionLowLevelMercurialBranchesQuery()) + ->setRepository($repository) + ->execute(); if ($offset) { $branches = array_slice($branches, $offset); @@ -85,6 +77,6 @@ final class ConduitAPI_diffusion_branchquery_Method $branches = array_slice($branches, 0, $limit); } - return $branches; + return mpull($branches, 'toDictionary'); } } diff --git a/src/applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialBranchesQuery.php b/src/applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialBranchesQuery.php new file mode 100644 index 0000000000..cd1cbcd720 --- /dev/null +++ b/src/applications/diffusion/query/lowlevel/DiffusionLowLevelMercurialBranchesQuery.php @@ -0,0 +1,28 @@ +getRepository(); + + // NOTE: `--debug` gives us 40-character hashes. + list($stdout) = $repository->execxLocalCommand( + '--debug branches'); + + $branches = array(); + + $lines = ArcanistMercurialParser::parseMercurialBranches($stdout); + foreach ($lines as $name => $spec) { + $branches[] = id(new DiffusionBranchInformation()) + ->setName($name) + ->setHeadCommitIdentifier($spec['rev']); + } + + return $branches; + } + +} diff --git a/src/applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php b/src/applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php index 87e328949b..50ca2fb064 100644 --- a/src/applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php +++ b/src/applications/repository/daemon/PhabricatorRepositoryPullLocalDaemon.php @@ -743,15 +743,12 @@ final class PhabricatorRepositoryPullLocalDaemon private function executeHgDiscover(PhabricatorRepository $repository) { - // NOTE: "--debug" gives us 40-character hashes. - list($stdout) = $repository->execxLocalCommand('--debug branches'); - if (!trim($stdout)) { - // No branches; likely a newly initialized repository. - return false; - } + $branches = id(new DiffusionLowLevelMercurialBranchesQuery()) + ->setRepository($repository) + ->execute(); + $branches = mpull($branches, 'getHeadCommitIdentifier', 'getName'); - $branches = ArcanistMercurialParser::parseMercurialBranches($stdout); $got_something = false; foreach ($branches as $name => $branch) { $commit = $branch['rev'];