diff --git a/mercurial/upgrade_utils/engine.py b/mercurial/upgrade_utils/engine.py --- a/mercurial/upgrade_utils/engine.py +++ b/mercurial/upgrade_utils/engine.py @@ -468,6 +468,13 @@ def upgrade(ui, srcrepo, dstrepo, upgrad unfi = srcrepo.unfiltered() cl = unfi.changelog nodemap.persist_nodemap(tr, cl, force=True) + # we want to directly operate on the underlying revlog to force + # create a nodemap file. This is fine since this is upgrade code + # and it heavily relies on repository being revlog based + # hence accessing private attributes can be justified + nodemap.persist_nodemap( + tr, unfi.manifestlog._rootstore._revlog, force=True + ) scmutil.writereporequirements(srcrepo, upgrade_op.new_requirements) else: with dstrepo.transaction(b'upgrade') as tr: diff --git a/tests/test-persistent-nodemap.t b/tests/test-persistent-nodemap.t --- a/tests/test-persistent-nodemap.t +++ b/tests/test-persistent-nodemap.t @@ -641,6 +641,8 @@ upgrading $ ls -1 .hg/store/ | egrep '00(changelog|manifest)(\.n|-.*\.nd)' 00changelog-*.nd (glob) 00changelog.n + 00manifest-*.nd (glob) + 00manifest.n $ hg debugnodemap --metadata uid: * (glob)