Mercurial > hg-stable
view mercurial/osutil.py @ 6146:e3dd35d3603b
Speed up hg grep by avoiding useless manifest parsing
In the kernel repo (tip = 2b89f7111b96), a "hg grep mpm MAINTAINERS" goes
from ~165s to 0.7s. This could get even a bit faster if we broke out of
the loop after the first match, but I'm not sure how that would interact
with the --follow code.
This is obviously an extreme example, but other cases should also benefit
from this patch.
author | Alexis S. L. Carvalho <alexis@cecm.usp.br> |
---|---|
date | Tue, 19 Feb 2008 19:20:10 -0300 |
parents | 5105b119edd2 |
children | 0d513661d6c2 |
line wrap: on
line source
import os, stat def _mode_to_kind(mode): if stat.S_ISREG(mode): return stat.S_IFREG if stat.S_ISDIR(mode): return stat.S_IFDIR if stat.S_ISLNK(mode): return stat.S_IFLNK if stat.S_ISBLK(mode): return stat.S_IFBLK if stat.S_ISCHR(mode): return stat.S_IFCHR if stat.S_ISFIFO(mode): return stat.S_IFIFO if stat.S_ISSOCK(mode): return stat.S_IFSOCK return mode def listdir(path, stat=False): '''listdir(path, stat=False) -> list_of_tuples Return a sorted list containing information about the entries in the directory. If stat is True, each element is a 3-tuple: (name, type, stat object) Otherwise, each element is a 2-tuple: (name, type) ''' result = [] prefix = path + os.sep names = os.listdir(path) names.sort() for fn in names: st = os.lstat(prefix + fn) if stat: result.append((fn, _mode_to_kind(st.st_mode), st)) else: result.append((fn, _mode_to_kind(st.st_mode))) return result