diff hgext/simple4server.py @ 822:5f5d269278e9

exchange: add the pushmarker wireproto command to simple4server This will allow simple server side support. (yes, code duplication is bad, I won't do it too much mom)
author Pierre-Yves David <pierre-yves.david@fb.com>
date Fri, 28 Feb 2014 00:55:34 -0800
parents e6e47c432ffd
children bee5e1105e6c
line wrap: on
line diff
--- a/hgext/simple4server.py	Fri Feb 28 00:40:29 2014 -0800
+++ b/hgext/simple4server.py	Fri Feb 28 00:55:34 2014 -0800
@@ -10,3 +10,36 @@
 
 import mercurial.obsolete
 mercurial.obsolete._enabled = True
+
+from mercurial import wireproto
+from mercurial import extension
+
+def srv_pushobsmarkers(repo, proto):
+    """wireprotocol command"""
+    fp = StringIO()
+    proto.redirect()
+    proto.getfile(fp)
+    data = fp.getvalue()
+    fp.close()
+    lock = repo.lock()
+    try:
+        tr = repo.transaction('pushkey: obsolete markers')
+        try:
+            repo.obsstore.mergemarkers(tr, data)
+            tr.close()
+        finally:
+            tr.release()
+    finally:
+        lock.release()
+    return wireproto.pushres(0)
+
+def capabilities(orig, repo, proto):
+    """wrapper to advertise new capability"""
+    caps = orig(repo, proto)
+    if obsolete._enabled:
+        caps += ' _evoext_pushobsmarkers_0'
+    return caps
+
+def extsetup(ui):
+    wireproto.commands['evoext_pushobsmarkers_0'] = (srv_pushobsmarkers, '')
+    extensions.wrapfunction(wireproto, 'capabilities', capabilities)