[PATCH 2 of 3] move store walking from streamclone.py into store.py

Matt Mackall mpm at selenic.com
Mon Jul 21 15:15:13 CDT 2008


On Mon, 2008-07-21 at 21:43 +0200, Adrian Buehlmann wrote:
> # HG changeset patch
> # User Adrian Buehlmann <adrian at cadifra.com>
> # Date 1216645162 -7200
> # Node ID 00e5d2425f873233e06ed3c6631211ce49935c84
> # Parent  a7f1babd458d9cb5b6db1b6d326624ab355b4268
> move store walking from streamclone.py into store.py

This is looking quite promising.

> diff --git a/mercurial/localrepo.py b/mercurial/localrepo.py
> --- a/mercurial/localrepo.py
> +++ b/mercurial/localrepo.py
> @@ -60,14 +60,9 @@
>              if r not in self.supported:
>                  raise repo.RepoError(_("requirement '%s' not supported") % r)
>  
> -        # setup store
>          if "store" in requirements:
> -            self.encodefn = store.encodefilename
> -            self.decodefn = store.decodefilename
>              self.spath = os.path.join(self.path, "store")
>          else:
> -            self.encodefn = lambda x: x
> -            self.decodefn = lambda x: x
>              self.spath = self.path

Seems like we ought to get spath from store.path, no? Then this if logic
can vanish entirely.
 
>          try:
> @@ -81,9 +76,10 @@
>  
>          self._createmode = mode
>          self.opener.createmode = mode
> -        sopener = util.opener(self.spath)
> -        sopener.createmode = mode
> -        self.sopener = store.encodedopener(sopener, self.encodefn)
> +
> +        self.store = store.store(requirements, self.spath, mode)
> +        self.sopener = self.store.opener
> +        self.encodefn = self.store.encodefn

Do we need encodefn for anything? Looks like only for spath. And that
looks like it ought to be a store method. In other words:

 self.sjoin = self.store.join
 
> -        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?

-- 
Mathematics is the supreme nostalgia of our time.



More information about the Mercurial-devel mailing list