[PATCH 2 of 3] move store walking from streamclone.py into store.py
Matt Mackall
mpm at selenic.com
Mon Jul 21 16:19:08 CDT 2008
On Mon, 2008-07-21 at 23:08 +0200, Adrian Buehlmann wrote:
> >> - self.sopener = store.encodedopener(opener(self.spath), self.encodefn)
> >> + self.encodefn = store.encodefn(requirements)
> >> + so = opener(self.spath)
> >> + self.sopener = lambda path, *args, **kw: so(
> >> + self.encodefn(path), *args, **kw)
> >
> > What's happening here? Is there a reason we can't use a store object
> > here?
>
> Hmm. You are quoting:
>
> diff --git a/mercurial/statichttprepo.py b/mercurial/statichttprepo.py
> --- a/mercurial/statichttprepo.py
> +++ b/mercurial/statichttprepo.py
> @@ -55,14 +55,13 @@
>
> # setup store
> if "store" in requirements:
> - 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 = store.encodedopener(opener(self.spath), self.encodefn)
> + self.encodefn = store.encodefn(requirements)
> + so = opener(self.spath)
> + self.sopener = lambda path, *args, **kw: so(
> + self.encodefn(path), *args, **kw)
>
> self.manifest = manifest.manifest(self.sopener)
> self.changelog = changelog.changelog(self.sopener)
>
> Which uses a special opener (quote from statichttprepo.py#15):
>
> class rangereader(httprangereader.httprangereader):
> def read(self, size=None):
> try:
> return httprangereader.httprangereader.read(self, size)
> except urllib2.HTTPError, inst:
> num = inst.code == 404 and errno.ENOENT or None
> raise IOError(num, inst)
> except urllib2.URLError, inst:
> raise IOError(None, inst.reason[1])
>
> def opener(base):
> """return a function that opens files over http"""
> p = base
> def o(path, mode="r"):
> f = "/".join((p, urllib.quote(path)))
> return rangereader(f)
> return o
>
> I don't see how to integrate that into store.py.
Pass an opener to store?
--
Mathematics is the supreme nostalgia of our time.
More information about the Mercurial-devel
mailing list