# HG changeset patch # User RhodeCode Admin # Date 2023-03-22 13:03:14 # Node ID f2aec1d661a1a8d9f96ab60c9a7f7fd9ecbbb110 # Parent 0eb4128e05cf7400aa70748e30af91662db6d009 git: speed up extraction of git children call - don't use all refs, - break early if we found the children diff --git a/vcsserver/remote/git.py b/vcsserver/remote/git.py --- a/vcsserver/remote/git.py +++ b/vcsserver/remote/git.py @@ -944,17 +944,22 @@ class GitRemote(RemoteBase): cache_on, context_uid, repo_id = self._cache_on(wire) region = self._region(wire) + head = self.head(wire) + @region.conditional_cache_on_arguments(condition=cache_on) def _children(_repo_id, _commit_id): + output, __ = self.run_git_command( - wire, ['rev-list', '--all', '--children']) + wire, ['rev-list', '--all', '--children', f'{commit_id}^..{head}']) child_ids = [] - pat = re.compile(r'^%s' % commit_id) - for l in output.splitlines(): - if pat.match(l): - found_ids = l.split(' ')[1:] + pat = re.compile(r'^{}'.format(commit_id)) + for line in output.splitlines(): + line = safe_str(line) + if pat.match(line): + found_ids = line.split(' ')[1:] child_ids.extend(found_ids) + break return child_ids return _children(repo_id, commit_id)