mercurial/localrepo.py
changeset 4004 c83c35f2f4e2
parent 4003 616806f74f0f
child 4005 656e06eebda7
equal deleted inserted replaced
4003:616806f74f0f 4004:c83c35f2f4e2
   115         self.revlogversion = v
   115         self.revlogversion = v
   116 
   116 
   117         self.tagscache = None
   117         self.tagscache = None
   118         self.branchcache = None
   118         self.branchcache = None
   119         self.nodetagscache = None
   119         self.nodetagscache = None
   120         self.encodepats = None
   120         self.filterpats = {}
   121         self.decodepats = None
       
   122         self.transhandle = None
   121         self.transhandle = None
   123 
   122 
   124         self._link = lambda x: False
   123         self._link = lambda x: False
   125         if util.checklink(self.root):
   124         if util.checklink(self.root):
   126             r = self.root # avoid circular reference in lambda
   125             r = self.root # avoid circular reference in lambda
   481         return self.dirstate.getcwd()
   480         return self.dirstate.getcwd()
   482 
   481 
   483     def wfile(self, f, mode='r'):
   482     def wfile(self, f, mode='r'):
   484         return self.wopener(f, mode)
   483         return self.wopener(f, mode)
   485 
   484 
   486     def wread(self, filename):
   485     def _filter(self, filter, filename, data):
   487         if self.encodepats == None:
   486         if filter not in self.filterpats:
   488             l = []
   487             l = []
   489             for pat, cmd in self.ui.configitems("encode"):
   488             for pat, cmd in self.ui.configitems(filter):
   490                 mf = util.matcher(self.root, "", [pat], [], [])[1]
   489                 mf = util.matcher(self.root, "", [pat], [], [])[1]
   491                 l.append((mf, cmd))
   490                 l.append((mf, cmd))
   492             self.encodepats = l
   491             self.filterpats[filter] = l
   493 
   492 
       
   493         for mf, cmd in self.filterpats[filter]:
       
   494             if mf(filename):
       
   495                 self.ui.debug(_("filtering %s through %s\n") % (filename, cmd))
       
   496                 data = util.filter(data, cmd)
       
   497                 break
       
   498 
       
   499         return data
       
   500 
       
   501     def wread(self, filename):
   494         if self._link(filename):
   502         if self._link(filename):
   495             data = os.readlink(self.wjoin(filename))
   503             data = os.readlink(self.wjoin(filename))
   496         else:
   504         else:
   497             data = self.wopener(filename, 'r').read()
   505             data = self.wopener(filename, 'r').read()
   498 
   506         return self._filter("encode", filename, data)
   499         for mf, cmd in self.encodepats:
       
   500             if mf(filename):
       
   501                 self.ui.debug(_("filtering %s through %s\n") % (filename, cmd))
       
   502                 data = util.filter(data, cmd)
       
   503                 break
       
   504 
       
   505         return data
       
   506 
   507 
   507     def wwrite(self, filename, data, fd=None):
   508     def wwrite(self, filename, data, fd=None):
   508         if self.decodepats == None:
   509         data = self._filter("decode", filename, data)
   509             l = []
       
   510             for pat, cmd in self.ui.configitems("decode"):
       
   511                 mf = util.matcher(self.root, "", [pat], [], [])[1]
       
   512                 l.append((mf, cmd))
       
   513             self.decodepats = l
       
   514 
       
   515         for mf, cmd in self.decodepats:
       
   516             if mf(filename):
       
   517                 self.ui.debug(_("filtering %s through %s\n") % (filename, cmd))
       
   518                 data = util.filter(data, cmd)
       
   519                 break
       
   520 
       
   521         if fd:
   510         if fd:
   522             return fd.write(data)
   511             return fd.write(data)
   523         return self.wopener(filename, 'w').write(data)
   512         return self.wopener(filename, 'w').write(data)
   524 
   513 
   525     def transaction(self):
   514     def transaction(self):