[PATCH 3 of 4 STABLE] manifest: make manifestctx store the repo
Yuya Nishihara
yuya at tcha.org
Sat Oct 22 08:59:44 UTC 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