mercurial/util.py
changeset 3854 4f6db0233606
parent 3843 abaa2cd00d2b
parent 3853 c0b449154a90
child 3859 8c24b6fd5866
equal deleted inserted replaced
3848:8cbf060f637e 3854:4f6db0233606
   903         """
   903         """
   904         if st is None:
   904         if st is None:
   905             st = fstat(f)
   905             st = fstat(f)
   906         return st.st_uid == os.getuid()
   906         return st.st_uid == os.getuid()
   907 
   907 
       
   908 def _buildencodefun():
       
   909     e = '_'
       
   910     win_reserved = [ord(x) for x in '|\?*<":>+[]']
       
   911     cmap = dict([ (chr(x), chr(x)) for x in xrange(127) ])
       
   912     for x in (range(32) + range(126, 256) + win_reserved):
       
   913         cmap[chr(x)] = "~%02x" % x
       
   914     for x in range(ord("A"), ord("Z")+1) + [ord(e)]:
       
   915         cmap[chr(x)] = e + chr(x).lower()
       
   916     dmap = {}
       
   917     for k, v in cmap.iteritems():
       
   918         dmap[v] = k
       
   919     def decode(s):
       
   920         i = 0
       
   921         while i < len(s):
       
   922             for l in xrange(1, 4):
       
   923                 try:
       
   924                     yield dmap[s[i:i+l]]
       
   925                     i += l
       
   926                     break
       
   927                 except KeyError:
       
   928                     pass
       
   929             else:
       
   930                 raise KeyError
       
   931     return (lambda s: "".join([cmap[c] for c in s]),
       
   932             lambda s: "".join(list(decode(s))))
       
   933 
       
   934 encodefilename, decodefilename = _buildencodefun()
       
   935 
       
   936 def encodedopener(openerfn, fn):
       
   937     def o(path, *args, **kw):
       
   938         return openerfn(fn(path), *args, **kw)
       
   939     return o
   908 
   940 
   909 def opener(base, audit=True):
   941 def opener(base, audit=True):
   910     """
   942     """
   911     return a function that opens files relative to base
   943     return a function that opens files relative to base
   912 
   944