hgweb: convert _siblings to a factory function of mappinggenerator
authorYuya Nishihara <yuya@tcha.org>
Sun, 01 Apr 2018 23:50:34 +0900
changeset 37700 495fbeae63cc
parent 37699 0e02eb838b96
child 37701 492531ff81bc
hgweb: convert _siblings to a factory function of mappinggenerator IIUC, only reason it was a class is to make the generator restartable, which is now served by the mappinggenerator.
mercurial/hgweb/webutil.py
--- a/mercurial/hgweb/webutil.py	Sun Apr 01 23:47:43 2018 +0900
+++ b/mercurial/hgweb/webutil.py	Sun Apr 01 23:50:34 2018 +0900
@@ -183,7 +183,7 @@
 
 # TODO: maybe this can be a wrapper class for changectx/filectx list, which
 # yields {'ctx': ctx}
-def _ctxsgen(ctxs):
+def _ctxsgen(context, ctxs):
     for s in ctxs:
         d = {
             'node': s.hex(),
@@ -197,19 +197,13 @@
             d['file'] = s.path()
         yield d
 
-class _siblings(object):
-    def __init__(self, siblings=None, hiderev=None):
-        if siblings is None:
-            siblings = []
-        self.siblings = [s for s in siblings if s.node() != nullid]
-        if len(self.siblings) == 1 and self.siblings[0].rev() == hiderev:
-            self.siblings = []
-
-    def __iter__(self):
-        return _ctxsgen(self.siblings)
-
-    def __len__(self):
-        return len(self.siblings)
+def _siblings(siblings=None, hiderev=None):
+    if siblings is None:
+        siblings = []
+    siblings = [s for s in siblings if s.node() != nullid]
+    if len(siblings) == 1 and siblings[0].rev() == hiderev:
+        siblings = []
+    return templateutil.mappinggenerator(_ctxsgen, args=(siblings,))
 
 def difffeatureopts(req, ui, section):
     diffopts = patch.difffeatureopts(ui, untrusted=True,