Mercurial > hg
view mercurial/node.py @ 18878:3cfaace0441e
copies._forwardcopies: use set operations to find missing files
This is a performance win for a number of reasons:
- We don't iterate over contexts, which avoids a completely unnecessary sorted
call + the O(number of files) abstraction cost of doing that.
- We don't check membership in a context, which avoids another
O(number of files) abstraction cost.
- We iterate over the manifests in C instead of Python.
For a large repo with 170,000 files, this improves perfpathcopies from 0.34
seconds to 0.07. Anything that uses pathcopies, such as rebase or diff --git
between two revisions, benefits.
author | Siddharth Agarwal <sid0@fb.com> |
---|---|
date | Thu, 04 Apr 2013 20:22:29 -0700 |
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])