[PATCH 3 of 4 STABLE] manifest: make manifestctx store the repo

Yuya Nishihara yuya at tcha.org
Sat Oct 22 04:59:44 EDT 2016


On Tue, 18 Oct 2016 17:50:16 -0700, Durham Goode wrote:
> # HG changeset patch
> # User Durham Goode <durham at fb.com>
> # Date 1476837866 25200
> #      Tue Oct 18 17:44:26 2016 -0700
> # Branch stable
> # Node ID 3efece5c59853908d65de53635488361dbf20c49
> # Parent  ed607426a3ff4deda8c7f2de8b86d5b6ca976d67
> manifest: make manifestctx store the repo
> 
> The old manifestctx stored a reference to the revlog. If the inmemory revlog
> became invalid, the ctx now held an old copy and would be incorrect. To fix
> this, we need the ctx to go through the manifestlog for each access.
> 
> This is the same pattern that changectx already uses (it stores the repo, and
> accesses commit data through self._repo.changelog).
> 
> diff --git a/mercurial/manifest.py b/mercurial/manifest.py
> --- a/mercurial/manifest.py
> +++ b/mercurial/manifest.py
> @@ -1276,7 +1276,7 @@ class manifestlog(object):
>          if self._treeinmem:
>              m = treemanifestctx(self._revlog, '', node)
>          else:
> -            m = manifestctx(self._revlog, node)
> +            m = manifestctx(self._repo, node)
>          if node != revlog.nullid:
>              self._mancache[node] = m

This will create a reference cycle, but I don't know if the situation gets
better or worse after this patch.

  repo -> manifestlog -> _mancache -> manifestctx -> repo

Is _mancache valid after the manifestlog is recreated?


More information about the Mercurial-devel mailing list