[PATCH 1 of 3] move filename encoding functions from util to filelog
Adrian Buehlmann
adrian at cadifra.com
Thu Jul 17 09:23:06 CDT 2008
# HG changeset patch
# User Adrian Buehlmann <adrian at cadifra.com>
# Date 1216299441 -7200
# Node ID 64d51f7facf9804d3b004f4eae7844ae7a1937ca
# Parent 2134d6c09432e4e3dbee18d93ec9242a332f7cdc
move filename encoding functions from util to filelog
diff --git a/mercurial/filelog.py b/mercurial/filelog.py
--- a/mercurial/filelog.py
+++ b/mercurial/filelog.py
@@ -81,3 +81,36 @@
return t2 != text
return revlog.cmp(self, node, text)
+
+def _buildencodefun():
+ e = '_'
+ win_reserved = [ord(x) for x in '\\:*?"<>|']
+ cmap = dict([ (chr(x), chr(x)) for x in xrange(127) ])
+ for x in (range(32) + range(126, 256) + win_reserved):
+ cmap[chr(x)] = "~%02x" % x
+ for x in range(ord("A"), ord("Z")+1) + [ord(e)]:
+ cmap[chr(x)] = e + chr(x).lower()
+ dmap = {}
+ for k, v in cmap.iteritems():
+ dmap[v] = k
+ def decode(s):
+ i = 0
+ while i < len(s):
+ for l in xrange(1, 4):
+ try:
+ yield dmap[s[i:i+l]]
+ i += l
+ break
+ except KeyError:
+ pass
+ else:
+ raise KeyError
+ return (lambda s: "".join([cmap[c] for c in s]),
+ lambda s: "".join(list(decode(s))))
+
+encodefilename, decodefilename = _buildencodefun()
+
+def encodedopener(openerfn, fn):
+ def o(path, *args, **kw):
+ return openerfn(fn(path), *args, **kw)
+ return o
diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
--- a/mercurial/localrepo.py
+++ b/mercurial/localrepo.py
@@ -62,8 +62,8 @@
# setup store
if "store" in requirements:
- self.encodefn = util.encodefilename
- self.decodefn = util.decodefilename
+ self.encodefn = filelog.encodefilename
+ self.decodefn = filelog.decodefilename
self.spath = os.path.join(self.path, "store")
else:
self.encodefn = lambda x: x
@@ -83,7 +83,7 @@
self.opener.createmode = mode
sopener = util.opener(self.spath)
sopener.createmode = mode
- self.sopener = util.encodedopener(sopener, self.encodefn)
+ self.sopener = filelog.encodedopener(sopener, self.encodefn)
self.ui = ui.ui(parentui=parentui)
try:
diff --git a/mercurial/statichttprepo.py b/mercurial/statichttprepo.py
--- a/mercurial/statichttprepo.py
+++ b/mercurial/statichttprepo.py
@@ -9,7 +9,7 @@
from i18n import _
import changelog, httprangereader
-import repo, localrepo, manifest, util
+import repo, localrepo, manifest, util, filelog
import urllib, urllib2, errno
class rangereader(httprangereader.httprangereader):
@@ -55,14 +55,14 @@
# setup store
if "store" in requirements:
- self.encodefn = util.encodefilename
- self.decodefn = util.decodefilename
+ self.encodefn = filelog.encodefilename
+ self.decodefn = filelog.decodefilename
self.spath = self.path + "/store"
else:
self.encodefn = lambda x: x
self.decodefn = lambda x: x
self.spath = self.path
- self.sopener = util.encodedopener(opener(self.spath), self.encodefn)
+ self.sopener = filelog.encodedopener(opener(self.spath), self.encodefn)
self.manifest = manifest.manifest(self.sopener)
self.changelog = changelog.changelog(self.sopener)
diff --git a/mercurial/util.py b/mercurial/util.py
--- a/mercurial/util.py
+++ b/mercurial/util.py
@@ -1345,39 +1345,6 @@
return name
return find_in_path(name, os.environ.get('PATH', ''), default=default)
-def _buildencodefun():
- e = '_'
- win_reserved = [ord(x) for x in '\\:*?"<>|']
- cmap = dict([ (chr(x), chr(x)) for x in xrange(127) ])
- for x in (range(32) + range(126, 256) + win_reserved):
- cmap[chr(x)] = "~%02x" % x
- for x in range(ord("A"), ord("Z")+1) + [ord(e)]:
- cmap[chr(x)] = e + chr(x).lower()
- dmap = {}
- for k, v in cmap.iteritems():
- dmap[v] = k
- def decode(s):
- i = 0
- while i < len(s):
- for l in xrange(1, 4):
- try:
- yield dmap[s[i:i+l]]
- i += l
- break
- except KeyError:
- pass
- else:
- raise KeyError
- return (lambda s: "".join([cmap[c] for c in s]),
- lambda s: "".join(list(decode(s))))
-
-encodefilename, decodefilename = _buildencodefun()
-
-def encodedopener(openerfn, fn):
- def o(path, *args, **kw):
- return openerfn(fn(path), *args, **kw)
- return o
-
def mktempcopy(name, emptyok=False, createmode=None):
"""Create a temporary file with the same contents from name
More information about the Mercurial-devel
mailing list