[PATCH 1 of 3] move filename encoding functions from util to filelog
Matt Mackall
mpm at selenic.com
Thu Jul 17 11:26:19 CDT 2008
On Thu, 2008-07-17 at 16:23 +0200, Adrian Buehlmann wrote:
> # 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
Looks great. Though it might want to end up in a store.py as per my
other email. That will allow us to actually build the encode functions
on demand.
> 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
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at selenic.com
> http://selenic.com/mailman/listinfo/mercurial-devel
--
Mathematics is the supreme nostalgia of our time.
More information about the Mercurial-devel
mailing list