# HG changeset patch # User Mads Kiilerich # Date 1407841703 -7200 # Node ID 52e8c4da476829873e282a20df0e894db07afb36 # Parent 38a4035426ac5e251474cbb6f3db458389c3cf36 hg: optimize get_ref_revision Avoid expensive branch(x) iterating over whole repo just to take max. diff -r 38a4035426ac -r 52e8c4da4768 kallithea/lib/vcs/backends/hg/repository.py --- 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)