[PATCH 7 of 7] hgweb: convert _siblings to a factory function of mappinggenerator

Yuya Nishihara yuya at tcha.org
Sat Apr 14 08:49:17 EDT 2018


# HG changeset patch
# User Yuya Nishihara <yuya at tcha.org>
# Date 1522594234 -32400
#      Sun Apr 01 23:50:34 2018 +0900
# Node ID fe959b32685068231cad8ef26387c7c16fe0961a
# Parent  8e479b1d96bf94e81f76c78605c16b2864b219a5
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.

diff --git a/mercurial/hgweb/webutil.py b/mercurial/hgweb/webutil.py
--- a/mercurial/hgweb/webutil.py
+++ b/mercurial/hgweb/webutil.py
@@ -183,7 +183,7 @@ class filerevnav(revnav):
 
 # 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 @@ def _ctxsgen(ctxs):
             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,


More information about the Mercurial-devel mailing list