mercurial/store.py
changeset 37409 4c15bee42e9c
parent 35582 72b91f905065
child 38661 8ac0c9cd4c48
equal deleted inserted replaced
37408:dd2753729853 37409:4c15bee42e9c
   317     return mode
   317     return mode
   318 
   318 
   319 _data = ('data meta 00manifest.d 00manifest.i 00changelog.d 00changelog.i'
   319 _data = ('data meta 00manifest.d 00manifest.i 00changelog.d 00changelog.i'
   320          ' phaseroots obsstore')
   320          ' phaseroots obsstore')
   321 
   321 
       
   322 def isrevlog(f, kind, st):
       
   323     return kind == stat.S_IFREG and f[-2:] in ('.i', '.d')
       
   324 
   322 class basicstore(object):
   325 class basicstore(object):
   323     '''base class for local repository stores'''
   326     '''base class for local repository stores'''
   324     def __init__(self, path, vfstype):
   327     def __init__(self, path, vfstype):
   325         vfs = vfstype(path)
   328         vfs = vfstype(path)
   326         self.path = vfs.base
   329         self.path = vfs.base
   331         self.opener = self.vfs
   334         self.opener = self.vfs
   332 
   335 
   333     def join(self, f):
   336     def join(self, f):
   334         return self.path + '/' + encodedir(f)
   337         return self.path + '/' + encodedir(f)
   335 
   338 
   336     def _walk(self, relpath, recurse):
   339     def _walk(self, relpath, recurse, filefilter=isrevlog):
   337         '''yields (unencoded, encoded, size)'''
   340         '''yields (unencoded, encoded, size)'''
   338         path = self.path
   341         path = self.path
   339         if relpath:
   342         if relpath:
   340             path += '/' + relpath
   343             path += '/' + relpath
   341         striplen = len(self.path) + 1
   344         striplen = len(self.path) + 1
   345             readdir = self.rawvfs.readdir
   348             readdir = self.rawvfs.readdir
   346             while visit:
   349             while visit:
   347                 p = visit.pop()
   350                 p = visit.pop()
   348                 for f, kind, st in readdir(p, stat=True):
   351                 for f, kind, st in readdir(p, stat=True):
   349                     fp = p + '/' + f
   352                     fp = p + '/' + f
   350                     if kind == stat.S_IFREG and f[-2:] in ('.d', '.i'):
   353                     if filefilter(f, kind, st):
   351                         n = util.pconvert(fp[striplen:])
   354                         n = util.pconvert(fp[striplen:])
   352                         l.append((decodedir(n), n, st.st_size))
   355                         l.append((decodedir(n), n, st.st_size))
   353                     elif kind == stat.S_IFDIR and recurse:
   356                     elif kind == stat.S_IFDIR and recurse:
   354                         visit.append(fp)
   357                         visit.append(fp)
   355         l.sort()
   358         l.sort()