view mercurial/node.py @ 22309:a65697c3f20e

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.
author Gregory Szorc <gregory.szorc@gmail.com>
date Fri, 29 Aug 2014 18:00:44 +0200
parents 25e572394f5c
children 1a5211f2f87f
line wrap: on
line source

# node.py - basic nodeid manipulation for mercurial
#
# Copyright 2005, 2006 Matt Mackall <mpm@selenic.com>
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2 or any later version.

import binascii

nullrev = -1
nullid = "\0" * 20

# This ugly style has a noticeable effect in manifest parsing
hex = binascii.hexlify
bin = binascii.unhexlify

def short(node):
    return hex(node[:6])