mercurial/bundle2.py
changeset 25401 d29201352af7
parent 25336 7c60a42265fb
child 25481 6de96cb31176
--- a/mercurial/bundle2.py	Tue Jun 02 19:58:06 2015 -0700
+++ b/mercurial/bundle2.py	Mon Jun 01 20:23:22 2015 -0700
@@ -156,7 +156,7 @@
 import url
 import re
 
-import changegroup, error
+import changegroup, error, tags
 from i18n import _
 
 _pack = struct.pack
@@ -1110,6 +1110,7 @@
                 'pushkey': (),
                 'digests': tuple(sorted(util.DIGESTS.keys())),
                 'remote-changegroup': ('http', 'https'),
+                'hgtagsfnodes': (),
                }
 
 def getrepocaps(repo, allowpushback=False):
@@ -1360,3 +1361,24 @@
     ret = int(inpart.params['new'])
     partid = int(inpart.params['in-reply-to'])
     op.records.add('obsmarkers', {'new': ret}, partid)
+
+@parthandler('hgtagsfnodes')
+def handlehgtagsfnodes(op, inpart):
+    """Applies .hgtags fnodes cache entries to the local repo.
+
+    Payload is pairs of 20 byte changeset nodes and filenodes.
+    """
+    cache = tags.hgtagsfnodescache(op.repo.unfiltered())
+
+    count = 0
+    while True:
+        node = inpart.read(20)
+        fnode = inpart.read(20)
+        if len(node) < 20 or len(fnode) < 20:
+            op.ui.debug('received incomplete .hgtags fnodes data, ignoring\n')
+            break
+        cache.setfnode(node, fnode)
+        count += 1
+
+    cache.write()
+    op.ui.debug('applied %i hgtags fnodes cache entries\n' % count)