comparison mercurial/util.py @ 3854:4f6db0233606

Merge Benoit's .hg/store support
author Matt Mackall <mpm@selenic.com>
date Sun, 10 Dec 2006 02:11:02 -0600
parents abaa2cd00d2b c0b449154a90
children 8c24b6fd5866
comparison
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