[PATCH 12 of 19] snapshot: also use None as a stop value for `_refinegroup`

Boris Feld boris.feld at octobus.net
Sat Sep 8 06:57:06 EDT 2018


# HG changeset patch
# User Boris Feld <boris.feld at octobus.net>
# Date 1536333453 14400
#      Fri Sep 07 11:17:33 2018 -0400
# Node ID f79dc24022976ab6ba0a8f7183651e0e4d9877d5
# Parent  db3775d10e1167be3487eed8b915ca2bf8c4bccb
# EXP-Topic sparse-snapshot
# Available At https://bitbucket.org/octobus/mercurial-devel/
#              hg pull https://bitbucket.org/octobus/mercurial-devel/ -r f79dc2402297
snapshot: also use None as a stop value for `_refinegroup`

This is yet another small step toward turning `_refinegroups` into a co-routine.

diff --git a/mercurial/revlogutils/deltas.py b/mercurial/revlogutils/deltas.py
--- a/mercurial/revlogutils/deltas.py
+++ b/mercurial/revlogutils/deltas.py
@@ -587,7 +587,11 @@ def _candidategroups(revlog, textlen, p1
     deltas_limit = textlen * LIMIT_DELTA2TEXT
 
     tested = set([nullrev])
-    for temptative in _refinedgroups(revlog, p1, p2, cachedelta):
+    candidates = _refinedgroups(revlog, p1, p2, cachedelta)
+    while True:
+        temptative = next(candidates)
+        if temptative is None:
+            break
         group = []
         for rev in temptative:
             # skip over empty delta (no need to include them in a chain)
@@ -632,6 +636,8 @@ def _refinedgroups(revlog, p1, p2, cache
         good = yield candidates
         if good is not None:
             break
+    # we have found nothing
+    yield None
 
 def _rawgroups(revlog, p1, p2, cachedelta):
     """Provides group of revision to be tested as delta base


More information about the Mercurial-devel mailing list