[PATCH 2 of 3] store: eliminate reference cycle in fncachestore
Adrian Buehlmann
adrian at cadifra.com
Mon Jul 13 15:06:46 UTC 2009
On 13.07.2009 16:15, Simon Heimberg wrote:
> # HG changeset patch
> # User Simon Heimberg <simohe at besonet.ch>
> # Date 1247241244 -7200
> # Node ID d0d02a480e6a65cac1c86f7e74445c3e71ed173a
> # Parent a9ab0e06c244d08c1308b843d8b3385e9051788e
> store: eliminate reference cycle in fncachestore
>
> override method instead of passing a bound method
> pass defversion in store because it is not possible to add a property to a
> method
>
> diff -r a9ab0e06c244 -r d0d02a480e6a mercurial/localrepo.py
> --- a/mercurial/localrepo.py Don Jul 09 13:23:27 2009 +0200
> +++ b/mercurial/localrepo.py Fre Jul 10 17:54:04 2009 +0200
> @@ -106,7 +106,7 @@
> p = os.environ['HG_PENDING']
> if p.startswith(self.root):
> c.readpending('00changelog.i.a')
> - self.sopener.defversion = c.version
> + self.store.defversion = c.version
> return c
>
> @propertycache
> diff -r a9ab0e06c244 -r d0d02a480e6a mercurial/revlog.py
> --- a/mercurial/revlog.py Don Jul 09 13:23:27 2009 +0200
> +++ b/mercurial/revlog.py Fre Jul 10 17:54:04 2009 +0200
> @@ -430,11 +430,12 @@
> self.nodemap = {nullid: nullrev}
> self.index = []
>
> - v = REVLOG_DEFAULT_VERSION
> - if hasattr(opener, "defversion"):
> - v = opener.defversion
> + try:
> + v = opener.im_self.defversion
> if v & REVLOGNG:
> v |= REVLOGNGINLINEDATA
> + except AttributeError:
> + v = REVLOG_DEFAULT_VERSION
>
> i = ''
> try:
What does this have to do with the change in store.py?
> diff -r a9ab0e06c244 -r d0d02a480e6a mercurial/store.py
> --- a/mercurial/store.py Don Jul 09 13:23:27 2009 +0200
> +++ b/mercurial/store.py Fre Jul 10 17:54:04 2009 +0200
> @@ -171,9 +171,11 @@
> self.pathjoiner = pathjoiner
> self.path = path
> self.createmode = _calcmode(path)
> - op = opener(self.path)
> - op.createmode = self.createmode
> - self.opener = lambda f, *args, **kw: op(encodedir(f), *args, **kw)
> + self._opener = opener(self.path)
> + self._opener.createmode = self.createmode
> +
> + def opener(self, name, *args, **kw):
> + return self._opener(encodedir(name), *args, **kw)
>
> def join(self, f):
> return self.pathjoiner(self.path, encodedir(f))
> @@ -216,9 +218,11 @@
> self.pathjoiner = pathjoiner
> self.path = self.pathjoiner(path, 'store')
> self.createmode = _calcmode(self.path)
> - op = opener(self.path)
> - op.createmode = self.createmode
> - self.opener = lambda f, *args, **kw: op(encodefilename(f), *args, **kw)
> + self._opener = opener(self.path)
> + self._opener.createmode = self.createmode
> +
> + def opener(self, name, *args, **kw):
> + return self._opener(encodefilename(name), *args, **kw)
>
> def datafiles(self):
> for a, b, size in self._walk('data', True):
> @@ -284,17 +288,16 @@
> self.pathjoiner = pathjoiner
> self.path = self.pathjoiner(path, 'store')
> self.createmode = _calcmode(self.path)
> - self._op = opener(self.path)
> - self._op.createmode = self.createmode
> - self.fncache = fncache(self._op)
> + self._opener = opener(self.path)
> + self._opener.createmode = self.createmode
> + self.fncache = fncache(self._opener)
>
> - def fncacheopener(path, mode='r', *args, **kw):
> - if (mode not in ('r', 'rb')
> - and path.startswith('data/')
> - and path not in self.fncache):
> - self.fncache.add(path)
> - return self._op(hybridencode(path), mode, *args, **kw)
> - self.opener = fncacheopener
> + def opener(self, path, mode='r', *args, **kw):
> + if (mode not in ('r', 'rb')
> + and path.startswith('data/')
> + and path not in self.fncache):
> + self.fncache.add(path)
> + return self._opener(hybridencode(path), mode, *args, **kw)
>
> def join(self, f):
> return self.pathjoiner(self.path, hybridencode(f))
More information about the Mercurial-devel
mailing list