Mercurial > hg
comparison mercurial/util.py @ 3852:8a9a1a7e1698
create the encode and decode functions for the store
author | Benoit Boissinot <benoit.boissinot@ens-lyon.org> |
---|---|
date | Sun, 10 Dec 2006 00:07:02 +0100 |
parents | 1427949b8f80 |
children | c0b449154a90 |
comparison
equal
deleted
inserted
replaced
3851:8f18e31c4441 | 3852:8a9a1a7e1698 |
---|---|
867 """ | 867 """ |
868 if st is None: | 868 if st is None: |
869 st = fstat(f) | 869 st = fstat(f) |
870 return st.st_uid == os.getuid() | 870 return st.st_uid == os.getuid() |
871 | 871 |
872 def _buildencodefun(): | |
873 e = '_' | |
874 win_reserved = [ord(x) for x in '|\?*<":>+[]'] | |
875 cmap = dict([ (chr(x), chr(x)) for x in xrange(127) ]) | |
876 for x in (range(32) + range(126, 256) + win_reserved): | |
877 cmap[chr(x)] = "~%02x" % x | |
878 for x in range(ord("A"), ord("Z")+1) + [ord(e)]: | |
879 cmap[chr(x)] = e + chr(x).lower() | |
880 dmap = {} | |
881 for k, v in cmap.iteritems(): | |
882 dmap[v] = k | |
883 def decode(s): | |
884 i = 0 | |
885 while i < len(s): | |
886 for l in xrange(1, 4): | |
887 try: | |
888 yield dmap[s[i:i+l]] | |
889 i += l | |
890 break | |
891 except KeyError: | |
892 pass | |
893 else: | |
894 raise KeyError | |
895 return (lambda s: "".join([cmap[c] for c in s]), | |
896 lambda s: "".join(list(decode(s)))) | |
897 | |
898 encodefilename, decodefilename = _buildencodefun() | |
899 | |
872 | 900 |
873 def opener(base, audit=True): | 901 def opener(base, audit=True): |
874 """ | 902 """ |
875 return a function that opens files relative to base | 903 return a function that opens files relative to base |
876 | 904 |