Mercurial > kallithea
changeset 4444:52e8c4da4768
hg: optimize get_ref_revision
Avoid expensive branch(x) iterating over whole repo just to take max.
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Tue, 12 Aug 2014 13:08:23 +0200 |
parents | 38a4035426ac |
children | f9bc28c44f30 |
files | kallithea/lib/vcs/backends/hg/repository.py |
diffstat | 1 files changed, 4 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/kallithea/lib/vcs/backends/hg/repository.py Tue Aug 12 13:08:23 2014 +0200 +++ b/kallithea/lib/vcs/backends/hg/repository.py Tue Aug 12 13:08:23 2014 +0200 @@ -451,6 +451,7 @@ """ Returns revision number for the given reference. """ + ref_name = safe_str(ref_name) # lookup up the exact node id _revset_predicates = { 'branch': 'branch', @@ -458,9 +459,10 @@ 'tag': 'tag', 'rev': 'id', } - rev_spec = "max(%s(%%s))" % _revset_predicates[ref_type] + # avoid expensive branch(x) iteration over whole repo + rev_spec = "%%s & %s(%%s)" % _revset_predicates[ref_type] try: - revs = self._repo.revs(rev_spec, safe_str(ref_name)) + revs = self._repo.revs(rev_spec, ref_name, ref_name) except (LookupError, ): msg = ("Ambiguous identifier %s:%s for %s" % (ref_type, ref_name, self.name)) raise ChangesetDoesNotExistError(msg)