cmdutil: make walkchangerevs() call prepare with matcher instead of filenames
authorYuya Nishihara <yuya@tcha.org>
Thu, 10 Sep 2020 16:14:48 +0900
changeset 45648 3a024d7cd08e
parent 45647 9fead7d97069
child 45649 bba730d7a6f4
cmdutil: make walkchangerevs() call prepare with matcher instead of filenames Prepares for migrating walkchangerevs() to logcmdutil's logic, which provides matcher-based interface.
hgext/churn.py
mercurial/cmdutil.py
mercurial/commands.py
--- a/hgext/churn.py	Thu Sep 10 18:40:01 2020 +0900
+++ b/hgext/churn.py	Thu Sep 10 16:14:48 2020 +0900
@@ -36,9 +36,8 @@
 testedwith = b'ships-with-hg-core'
 
 
-def changedlines(ui, repo, ctx1, ctx2, fns):
+def changedlines(ui, repo, ctx1, ctx2, fmatch):
     added, removed = 0, 0
-    fmatch = scmutil.matchfiles(repo, fns)
     diff = b''.join(patch.diff(repo, ctx1.node(), ctx2.node(), fmatch))
     for l in diff.split(b'\n'):
         if l.startswith(b"+") and not l.startswith(b"+++ "):
@@ -79,7 +78,7 @@
 
     m = scmutil.match(repo[None], pats, opts)
 
-    def prep(ctx, fns):
+    def prep(ctx, fmatch):
         rev = ctx.rev()
         if df and not df(ctx.date()[0]):  # doesn't match date format
             return
@@ -95,7 +94,7 @@
                 return
 
             ctx1 = parents[0]
-            lines = changedlines(ui, repo, ctx1, ctx, fns)
+            lines = changedlines(ui, repo, ctx1, ctx, fmatch)
             rate[key] = [r + l for r, l in zip(rate.get(key, (0, 0)), lines)]
 
         progress.increment()
--- a/mercurial/cmdutil.py	Thu Sep 10 18:40:01 2020 +0900
+++ b/mercurial/cmdutil.py	Thu Sep 10 16:14:48 2020 +0900
@@ -2574,7 +2574,7 @@
                                     yield f
 
                     fns = fns_generator()
-                prepare(ctx, fns)
+                prepare(ctx, scmutil.matchfiles(repo, fns))
             for rev in nrevs:
                 yield change(rev)
 
--- a/mercurial/commands.py	Thu Sep 10 18:40:01 2020 +0900
+++ b/mercurial/commands.py	Thu Sep 10 16:14:48 2020 +0900
@@ -3606,7 +3606,7 @@
                     % {b'filename': fn, b'revnum': pycompat.bytestr(rev),}
                 )
 
-    def prep(ctx, fns):
+    def prep(ctx, fmatch):
         rev = ctx.rev()
         pctx = ctx.p1()
         matches.setdefault(rev, {})
@@ -3621,7 +3621,8 @@
         else:
             contextmanager = util.nullcontextmanager
         with contextmanager():
-            for fn in fns:
+            assert fmatch.isexact()
+            for fn in fmatch.files():
                 # fn might not exist in the revision (could be a file removed by
                 # the revision). We could check `fn not in ctx` even when rev is
                 # None, but it's less racy to protect againt that in readfile.