diff --git a/mercurial/revlogutils/deltas.py b/mercurial/revlogutils/deltas.py
--- a/mercurial/revlogutils/deltas.py
+++ b/mercurial/revlogutils/deltas.py
@@ -630,6 +630,19 @@ def _findsnapshots(revlog, cache, start_
 
 def _refinedgroups(revlog, p1, p2, cachedelta):
     good = None
+    # First we try to reuse a the delta contained in the bundle.
+    # (or from the source revlog)
+    #
+    # This logic only applies to general delta repositories and can be disabled
+    # through configuration. Disabling reuse source delta is useful when
+    # we want to make sure we recomputed "optimal" deltas.
+    if cachedelta and revlog._generaldelta and revlog._lazydeltabase:
+        # Assume what we received from the server is a good choice
+        # build delta will reuse the cache
+        good = yield (cachedelta[0],)
+        if good is not None:
+            yield None
+            return
     for candidates in _rawgroups(revlog, p1, p2, cachedelta):
         good = yield candidates
         if good is not None:
@@ -651,17 +664,6 @@ def _rawgroups(revlog, p1, p2, cachedelt
     prev = curr - 1
     deltachain = lambda rev: revlog._deltachain(rev)[0]
 
-    # First we try to reuse a the delta contained in the bundle.
-    # (or from the source revlog)
-    #
-    # This logic only applies to general delta repositories and can be disabled
-    # through configuration. Disabling reuse of source delta is useful when
-    # we want to make sure we recomputed "optimal" deltas.
-    if cachedelta and gdelta and revlog._lazydeltabase:
-        # Assume what we received from the server is a good choice
-        # build delta will reuse the cache
-        yield (cachedelta[0],)
-
     if gdelta:
         # exclude already lazy tested base if any
         parents = [p for p in (p1, p2) if p != nullrev]