mercurial/store.py
changeset 17591 9a5c2ecd1158
parent 17590 eb0884680f5c
child 17592 64c6a0d4d4bd
equal deleted inserted replaced
17590:eb0884680f5c 17591:9a5c2ecd1158
   394     def __call__(self, path, mode='r', *args, **kw):
   394     def __call__(self, path, mode='r', *args, **kw):
   395         if mode not in ('r', 'rb') and path.startswith('data/'):
   395         if mode not in ('r', 'rb') and path.startswith('data/'):
   396             self.fncache.add(path)
   396             self.fncache.add(path)
   397         return self.opener(self.encode(path), mode, *args, **kw)
   397         return self.opener(self.encode(path), mode, *args, **kw)
   398 
   398 
       
   399 def _plainhybridencode(f):
       
   400     return _hybridencode(f, False)
       
   401 
       
   402 def _dothybridencode(f):
       
   403     return _hybridencode(f, True)
       
   404 
   399 class fncachestore(basicstore):
   405 class fncachestore(basicstore):
   400     def __init__(self, path, openertype, encode):
   406     def __init__(self, path, openertype, dotencode):
       
   407         if dotencode:
       
   408             encode = _dothybridencode
       
   409         else:
       
   410             encode = _plainhybridencode
   401         self.encode = encode
   411         self.encode = encode
   402         self.path = path + '/store'
   412         self.path = path + '/store'
   403         self.pathsep = self.path + '/'
   413         self.pathsep = self.path + '/'
   404         self.createmode = _calcmode(self.path)
   414         self.createmode = _calcmode(self.path)
   405         op = openertype(self.path)
   415         op = openertype(self.path)
   442         self.fncache.write()
   452         self.fncache.write()
   443 
   453 
   444 def store(requirements, path, openertype):
   454 def store(requirements, path, openertype):
   445     if 'store' in requirements:
   455     if 'store' in requirements:
   446         if 'fncache' in requirements:
   456         if 'fncache' in requirements:
   447             de = 'dotencode' in requirements
   457             return fncachestore(path, openertype, 'dotencode' in requirements)
   448             encode = lambda f: _hybridencode(f, de)
       
   449             return fncachestore(path, openertype, encode)
       
   450         return encodedstore(path, openertype)
   458         return encodedstore(path, openertype)
   451     return basicstore(path, openertype)
   459     return basicstore(path, openertype)