##// END OF EJS Templates
compare grep result between target and its parent...
compare grep result between target and its parent I found that typical case is that grep target is added at (*) revision in the tree shown below. +--- 1(*) --- 3 0 +--- 2 ------ 4 Now, I expect 'hg grep --all' to show only rev:1 which is first appearance of target line. But 'hg grep --all' will tell: target line dis-appeared at 3 => 4 target line appeared at 2 => 3 target line dis-appeared at 1 => 2 target line appeared at 0 => 1 because current 'hg grep' implementation compares not between target revision and its parent, but between neighbor revisions in walkthrough order. I checked performance of this patch by "hg grep --follow --all walkchangerevs" on whole Mercurial repo, and patched version could complete as fast as un-patched one.

File last commit:

r8421:b6d0fa8c default
r8849:80cc4b1a default
Show More
osutil.py
52 lines | 1.4 KiB | text/x-python | PythonLexer
# osutil.py - pure Python version of osutil.c
#
# Copyright 2009 Matt Mackall <mpm@selenic.com> and others
#
# This software may be used and distributed according to the terms of the
# GNU General Public License version 2, incorporated herein by reference.
import os
import stat as _stat
posixfile = file
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, skip=None):
'''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
if not prefix.endswith(os.sep):
prefix += os.sep
names = os.listdir(path)
names.sort()
for fn in names:
st = os.lstat(prefix + fn)
if fn == skip and _stat.S_ISDIR(st.st_mode):
return []
if stat:
result.append((fn, _mode_to_kind(st.st_mode), st))
else:
result.append((fn, _mode_to_kind(st.st_mode)))
return result