# HG changeset patch # User Martin von Zweigbergk # Date 1567836628 25200 # Node ID 6d0fdba635e5337f0bb6e5a7cfc459c9c6be22c9 # Parent 31dcd9b8ef40b9ec414b8426ee0008454d695d2d repair: extract a helper for generating all manifest revlogs We'll need to walk the manifest revlogs also to figure out which manifests have linkrevs out of order (for fixing the bug shown in the previous patch). By the way, perhaps it would be more efficient in many cases to find only the relevant directory manifest revlogs based on the files instead of walking the entire store, but that can be changed later. Differential Revision: https://phab.mercurial-scm.org/D6794 diff -r 31dcd9b8ef40 -r 6d0fdba635e5 mercurial/repair.py --- a/mercurial/repair.py Fri Sep 06 22:53:14 2019 -0700 +++ b/mercurial/repair.py Fri Sep 06 23:10:28 2019 -0700 @@ -364,11 +364,11 @@ callback.addnodes(nodelist) def stripmanifest(repo, striprev, tr, files): - revlog = repo.manifestlog.getstorage(b'') - revlog.strip(striprev, tr) - striptrees(repo, tr, striprev, files) + for revlog in manifestrevlogs(repo): + revlog.strip(striprev, tr) -def striptrees(repo, tr, striprev, files): +def manifestrevlogs(repo): + yield repo.manifestlog.getstorage(b'') if 'treemanifest' in repo.requirements: # This logic is safe if treemanifest isn't enabled, but also # pointless, so we skip it if treemanifest isn't enabled. @@ -376,7 +376,7 @@ if (unencoded.startswith('meta/') and unencoded.endswith('00manifest.i')): dir = unencoded[5:-12] - repo.manifestlog.getstorage(dir).strip(striprev, tr) + yield repo.manifestlog.getstorage(dir) def rebuildfncache(ui, repo): """Rebuilds the fncache file from repo history.