[PATCH 9 of 9 RFC] exchange: call listkeys2 to fetch obsolescence data if available

Gregory Szorc gregory.szorc at gmail.com
Sun Aug 14 17:10:08 EDT 2016


# HG changeset patch
# User Gregory Szorc <gregory.szorc at gmail.com>
# Date 1471208941 25200
#      Sun Aug 14 14:09:01 2016 -0700
# Node ID f878f764517369b28d0dfd9bd9fb14514dc44862
# Parent  d2870bcbc43041909e9f637b294cb889f7ed4933
exchange: call listkeys2 to fetch obsolescence data if available

diff --git a/mercurial/exchange.py b/mercurial/exchange.py
--- a/mercurial/exchange.py
+++ b/mercurial/exchange.py
@@ -1454,23 +1454,30 @@ def _pullobsolete(pullop):
 
     Exists mostly to allow overriding for experimentation purpose"""
     if 'obsmarkers' in pullop.stepsdone:
         return
     pullop.stepsdone.add('obsmarkers')
     tr = None
     if obsolete.isenabled(pullop.repo, obsolete.exchangeopt):
         pullop.repo.ui.debug('fetching remote obsolete markers\n')
-        remoteobs = pullop.remote.listkeys('obsolete')
+        raw = pullop.remote.capable('listkeys2')
+        if raw:
+            fn = pullop.remote.listkeys2
+        else:
+            fn = pullop.remote.listkeys
+        remoteobs = fn('obsolete')
         if 'dump0' in remoteobs:
             tr = pullop.gettransaction()
             markers = []
             for key in sorted(remoteobs, reverse=True):
                 if key.startswith('dump'):
-                    data = base85.b85decode(remoteobs[key])
+                    data = remoteobs[key]
+                    if not raw:
+                        data = base85.b85decode(data)
                     version, newmarks = obsolete._readmarkers(data)
                     markers += newmarks
             if markers:
                 pullop.repo.obsstore.add(tr, markers)
             pullop.repo.invalidatevolatilesets()
     return tr
 
 def caps20to10(repo):


More information about the Mercurial-devel mailing list