1
0
Fork 0
mirror of https://we.phorge.it/source/phorge.git synced 2024-11-10 08:52:39 +01:00

Speed up diffusion_browsequery for mercurial repositories

Summary:
Ref T4387. By using `hg locate` to attempt to only list files in the given path
browsing diffusion is a bit faster. In a repo of about 600M it shaves a rough 100ms
off viewing the root of the project.

Test Plan: Looked around in diffusion and saw it showed everything including .files, which was nice

Reviewers: epriestley, #blessed_reviewers

Reviewed By: epriestley

CC: Korvin, epriestley, aran

Maniphest Tasks: T4387

Differential Revision: https://secure.phabricator.com/D8163
This commit is contained in:
Richard van Velzen 2014-02-07 09:39:48 -08:00 committed by epriestley
parent df98ea3ba9
commit 5771d13952

View file

@ -197,25 +197,18 @@ final class ConduitAPI_diffusion_browsequery_Method
$commit = $request->getValue('commit');
$result = $this->getEmptyResultSet();
// TODO: This is a really really awful mess but Mercurial doesn't offer
// an equivalent of "git ls-files -- directory". If it's any comfort, this
// is what "hgweb" does too, see:
//
// http://selenic.com/repo/hg/file/91dc8878f888/mercurial/hgweb/webcommands.py#l320
//
// derp derp derp derp
//
// Anyway, figure out what's in this path by applying massive amounts
// of brute force.
$match_against = trim($path, '/');
$prefix = trim('./'.$match_against, '/');
list($entire_manifest) = $repository->execxLocalCommand(
'manifest --rev %s',
hgsprintf('%s', $commit));
$entire_manifest = explode("\n", $entire_manifest);
'locate --print0 --rev %s -I %s',
hgsprintf('%s', $commit),
$prefix);
$entire_manifest = explode("\0", $entire_manifest);
$results = array();
$match_against = trim($path, '/');
$match_len = strlen($match_against);
// For the root, don't trim. For other paths, trim the "/" after we match.