Mercurial > evolve
view hgext/simple4server.py @ 827:f62ff54c893b
exchange: add test case for A.1
Testcase defined here: http://mercurial.selenic.com/wiki/ObsolescenceMarkersExchange
author | Pierre-Yves David <pierre-yves.david@fb.com> |
---|---|
date | Fri, 28 Feb 2014 16:21:22 -0800 |
parents | bee5e1105e6c |
children | aa722de36179 |
line wrap: on
line source
'''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 srv_pullobsmarkers(repo, proto, others): opts = wireproto.options('', ['heads', 'common'], others) for k, v in opts.iteritems(): if k in ('heads', 'common'): opts[k] = wireproto.decodelist(v) obsdata = _getobsmarkersstream(repo, **opts) length = '%20i' % len(obsdata.getvalue()) def data(): yield length for c in proto.groupchunks(obsdata): yield c return wireproto.streamres(data()) def capabilities(orig, repo, proto): """wrapper to advertise new capability""" caps = orig(repo, proto) if obsolete._enabled: caps += ' _evoext_pushobsmarkers_0' caps += ' _evoext_pullobsmarkers_0' return caps def extsetup(ui): wireproto.commands['evoext_pushobsmarkers_0'] = (srv_pushobsmarkers, '') wireproto.commands['evoext_pullobsmarkers_0'] = (srv_pullobsmarkers, '*') extensions.wrapfunction(wireproto, 'capabilities', capabilities)