[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