Patchwork D291: repair: refactor broken linkrev collection

login
register
mail settings
Submitter phabricator
Date Aug. 9, 2017, 12:33 a.m.
Message ID <differential-rev-PHID-DREV-4lf6en7u4piuexdetu5z-req@phab.mercurial-scm.org>
Download mbox | patch
Permalink /patch/22777/
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 refactors broken linkrev collection such that manifest collection is in a
  separate function. This allows extensions to replace the manifest collection
  with a non-revlog oriented version.
  
  I considered moving the collect changes function onto the manifestlog itself, so
  it would be behind the abstraction, but since the store we're building doesn't
  even have the concept of strip, embeding that concept in the manifestlog api
  seemed odd.

REPOSITORY
  rHG Mercurial

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

AFFECTED FILES
  mercurial/repair.py

CHANGE DETAILS




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


  LGTM

REPOSITORY
  rHG Mercurial

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

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
@@ -67,16 +67,20 @@ 
 
     return sorted(files)
 
+def _collectrevlog(revlog, striprev):
+    _, brokenset = revlog.getstrippoint(striprev)
+    return [revlog.linkrev(r) for r in brokenset]
+
+def _collectmanifest(repo, striprev):
+    return _collectrevlog(repo.manifestlog._revlog, striprev)
+
 def _collectbrokencsets(repo, files, striprev):
     """return the changesets which will be broken by the truncation"""
     s = set()
-    def collectone(revlog):
-        _, brokenset = revlog.getstrippoint(striprev)
-        s.update([revlog.linkrev(r) for r in brokenset])
 
-    collectone(repo.manifestlog._revlog)
+    s.update(_collectmanifest(repo, striprev))
     for fname in files:
-        collectone(repo.file(fname))
+        s.update(_collectrevlog(repo.file(fname), striprev))
 
     return s