On Tue, 18 Oct 2016 17:50:16 -0700, Durham Goode wrote: > # HG changeset patch > # User Durham Goode <dur...@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? _______________________________________________ Mercurial-devel mailing list Mercurial-devel@mercurial-scm.org https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel