##// END OF EJS Templates
obsolete: avoid slow, generic date parsing...
obsolete: avoid slow, generic date parsing Simple profiling of `hg log -r .` revealed ~18,000 calls to mercurial.i18n.gettext() on the author's repository. The culprit was 3 _() calls in util.parsedate() multiplied by ~6000 obsmarkers originating from the parsing of obsmarkers. Changing the obsmarker code to parse the stored format of dates instead of going through a generic path eliminates these gettext() lookups and makes `hg log -r .` execute ~10% faster on the author's repo. The performance gain is proportional to the number of obsmarkers. The author attempted to patch util.parsedate() to avoid the gettext() lookups. However, that code is whacky and the author is jet lagged, so the approach was not attempted.

File last commit:

r17273:4ed6b3a2 stable
r22309:a65697c3 default
Show More
peer.py
46 lines | 1.3 KiB | text/x-python | PythonLexer
# peer.py - repository base classes for mercurial
#
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
# Copyright 2006 Vadim Gelfer <vadim.gelfer@gmail.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.
from i18n import _
import error
class peerrepository(object):
def capable(self, name):
'''tell whether repo supports named capability.
return False if not supported.
if boolean capability, return True.
if string capability, return string.'''
caps = self._capabilities()
if name in caps:
return True
name_eq = name + '='
for cap in caps:
if cap.startswith(name_eq):
return cap[len(name_eq):]
return False
def requirecap(self, name, purpose):
'''raise an exception if the given capability is not present'''
if not self.capable(name):
raise error.CapabilityError(
_('cannot %s; remote repository does not '
'support the %r capability') % (purpose, name))
def local(self):
'''return peer as a localrepo, or None'''
return None
def peer(self):
return self
def canpush(self):
return True
def close(self):
pass