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)
'''enable experimental obsolescence feature of Mercurial
OBSOLESCENCE IS AN EXPERIMENTAL FEATURE MAKE SURE YOU UNDERSTOOD THE INVOLVED
CONCEPT BEFORE USING IT.
/!\ THIS EXTENSION IS INTENDED FOR SERVER SIDE ONLY USAGE /!\
For client side usages it is recommended to use the evolve extension for
improved user interface.'''
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)