Patchwork D292: repair: move manifest strip to a separate function

login
register
mail settings
Submitter phabricator
Date Aug. 9, 2017, 12:33 a.m.
Message ID <differential-rev-PHID-DREV-ahbek2zpogcqgvnvgvja-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/22778/
State Superseded
Headers show

Comments

phabricator - Aug. 9, 2017, 12:33 a.m.
durham created this revision.
Herald added a subscriber: mercurial-devel.
Herald added a reviewer: hg-reviewers.

REVISION SUMMARY
  This moves manifest stripping to a separate function so implementations of the
  manifest that don't support stripping can replace this function with a no-op.
  
  I considered adding a strip api to the manifestlog, so other implementations
  could make it a no-op there, but it seems like strip might be unique to the
  revlog implementation, and therefore shouldn't be present on the generic api.

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D292

AFFECTED FILES
  mercurial/repair.py

CHANGE DETAILS




To: durham, #hg-reviewers
Cc: mercurial-devel
phabricator - Aug. 9, 2017, 12:35 p.m.
lothiraldan added a comment.


  LGTM

REPOSITORY
  rHG Mercurial

REVISION DETAIL
  https://phab.mercurial-scm.org/D292

To: durham, #hg-reviewers
Cc: lothiraldan, mercurial-devel

Patch

diff --git a/mercurial/repair.py b/mercurial/repair.py
--- a/mercurial/repair.py
+++ b/mercurial/repair.py
@@ -178,16 +178,13 @@ 
         tmpbundlefile = _bundle(repo, savebases, saveheads, node, 'temp',
                                 compress=False, obsolescence=False)
 
-    mfst = repo.manifestlog._revlog
-
     try:
         with repo.transaction("strip") as tr:
             offset = len(tr.entries)
 
             tr.startgroup()
             cl.strip(striprev, tr)
-            mfst.strip(striprev, tr)
-            striptrees(repo, tr, striprev, files)
+            stripmanifest(repo, striprev, tr, files)
 
             for fn in files:
                 repo.file(fn).strip(striprev, tr)
@@ -314,6 +311,11 @@ 
         callback.topic = topic
     callback.addnodes(nodelist)
 
+def stripmanifest(repo, striprev, tr, files):
+    revlog = repo.manifestlog._revlog
+    revlog.strip(striprev, tr)
+    striptrees(repo, tr, striprev, files)
+
 def striptrees(repo, tr, striprev, files):
     if 'treemanifest' in repo.requirements: # safe but unnecessary
                                             # otherwise