# HG changeset patch # User Adrian Buehlmann # Date 2008-07-24 14:32:51 # Node ID 01db3e1013626620917f830d2c5c0a0b623dd3d0 # Parent 15ee8066bf5bee65de725ae6410d52e0f4f28d27 move filename encoding functions from util.py to new store.py diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py --- a/mercurial/localrepo.py +++ b/mercurial/localrepo.py @@ -9,7 +9,7 @@ from node import bin, hex, nullid, nullr from i18n import _ import repo, changegroup import changelog, dirstate, filelog, manifest, context, weakref -import lock, transaction, stat, errno, ui +import lock, transaction, stat, errno, ui, store import os, revlog, time, util, extensions, hook, inspect import match as match_ @@ -62,8 +62,8 @@ class localrepository(repo.repository): # setup store if "store" in requirements: - self.encodefn = util.encodefilename - self.decodefn = util.decodefilename + self.encodefn = store.encodefilename + self.decodefn = store.decodefilename self.spath = os.path.join(self.path, "store") else: self.encodefn = lambda x: x @@ -83,7 +83,7 @@ class localrepository(repo.repository): self.opener.createmode = mode sopener = util.opener(self.spath) sopener.createmode = mode - self.sopener = util.encodedopener(sopener, self.encodefn) + self.sopener = store.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, store import urllib, urllib2, errno class rangereader(httprangereader.httprangereader): @@ -55,14 +55,14 @@ class statichttprepository(localrepo.loc # setup store if "store" in requirements: - self.encodefn = util.encodefilename - self.decodefn = util.decodefilename + self.encodefn = store.encodefilename + self.decodefn = store.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 = store.encodedopener(opener(self.spath), self.encodefn) self.manifest = manifest.manifest(self.sopener) self.changelog = changelog.changelog(self.sopener) diff --git a/mercurial/store.py b/mercurial/store.py new file mode 100644 --- /dev/null +++ b/mercurial/store.py @@ -0,0 +1,39 @@ +# store.py - repository store handling for Mercurial +# +# Copyright 2008 Matt Mackall +# +# This software may be used and distributed according to the terms +# of the GNU General Public License, incorporated herein by reference. + +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/util.py b/mercurial/util.py --- a/mercurial/util.py +++ b/mercurial/util.py @@ -1345,39 +1345,6 @@ def find_exe(name, default=None): 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