Mercurial > hg > mercurial-crew-with-dirclash
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 |