Previously, the walking mechanism assumed the use of revlogs for
storage.
Making the file filter configurable will enable custom stores
to override _walk() so it recognizes additional files.
hg-reviewers |
Previously, the walking mechanism assumed the use of revlogs for
storage.
Making the file filter configurable will enable custom stores
to override _walk() so it recognizes additional files.
Automatic diff as part of commit; lint not applicable. |
Automatic diff as part of commit; unit tests not applicable. |
Path | Packages | |||
---|---|---|---|---|
M | mercurial/store.py (7 lines) |
Status | Author | Revision | |
---|---|---|---|
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Abandoned | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg | ||
Closed | indygreg |
mode = None | mode = None | ||||
except OSError: | except OSError: | ||||
mode = None | mode = None | ||||
return mode | return mode | ||||
_data = ('data meta 00manifest.d 00manifest.i 00changelog.d 00changelog.i' | _data = ('data meta 00manifest.d 00manifest.i 00changelog.d 00changelog.i' | ||||
' phaseroots obsstore') | ' phaseroots obsstore') | ||||
def isrevlog(f, kind, st): | |||||
return kind == stat.S_IFREG and f[-2:] in ('.i', '.d') | |||||
class basicstore(object): | class basicstore(object): | ||||
'''base class for local repository stores''' | '''base class for local repository stores''' | ||||
def __init__(self, path, vfstype): | def __init__(self, path, vfstype): | ||||
vfs = vfstype(path) | vfs = vfstype(path) | ||||
self.path = vfs.base | self.path = vfs.base | ||||
self.createmode = _calcmode(vfs) | self.createmode = _calcmode(vfs) | ||||
vfs.createmode = self.createmode | vfs.createmode = self.createmode | ||||
self.rawvfs = vfs | self.rawvfs = vfs | ||||
self.vfs = vfsmod.filtervfs(vfs, encodedir) | self.vfs = vfsmod.filtervfs(vfs, encodedir) | ||||
self.opener = self.vfs | self.opener = self.vfs | ||||
def join(self, f): | def join(self, f): | ||||
return self.path + '/' + encodedir(f) | return self.path + '/' + encodedir(f) | ||||
def _walk(self, relpath, recurse): | def _walk(self, relpath, recurse, filefilter=isrevlog): | ||||
'''yields (unencoded, encoded, size)''' | '''yields (unencoded, encoded, size)''' | ||||
path = self.path | path = self.path | ||||
if relpath: | if relpath: | ||||
path += '/' + relpath | path += '/' + relpath | ||||
striplen = len(self.path) + 1 | striplen = len(self.path) + 1 | ||||
l = [] | l = [] | ||||
if self.rawvfs.isdir(path): | if self.rawvfs.isdir(path): | ||||
visit = [path] | visit = [path] | ||||
readdir = self.rawvfs.readdir | readdir = self.rawvfs.readdir | ||||
while visit: | while visit: | ||||
p = visit.pop() | p = visit.pop() | ||||
for f, kind, st in readdir(p, stat=True): | for f, kind, st in readdir(p, stat=True): | ||||
fp = p + '/' + f | fp = p + '/' + f | ||||
if kind == stat.S_IFREG and f[-2:] in ('.d', '.i'): | if filefilter(f, kind, st): | ||||
n = util.pconvert(fp[striplen:]) | n = util.pconvert(fp[striplen:]) | ||||
l.append((decodedir(n), n, st.st_size)) | l.append((decodedir(n), n, st.st_size)) | ||||
elif kind == stat.S_IFDIR and recurse: | elif kind == stat.S_IFDIR and recurse: | ||||
visit.append(fp) | visit.append(fp) | ||||
l.sort() | l.sort() | ||||
return l | return l | ||||
def datafiles(self): | def datafiles(self): |