# HG changeset patch # User Pierre-Yves David # Date 1370264259 -7200 # Node ID 5d368ae3d5a045c8000cdf0f3084adffb1a0b027 # Parent cb907cf3b5568c5db0708e46783fde43a0bbfed6 add notification at the end of push We have a dedicated hook to know when a push is done. diff -r cb907cf3b556 -r 5d368ae3d5a0 hgext/pushexperiment.py --- a/hgext/pushexperiment.py Mon Jun 03 14:53:24 2013 +0200 +++ b/hgext/pushexperiment.py Mon Jun 03 14:57:39 2013 +0200 @@ -2,6 +2,7 @@ - Add a new wire protocol command to exchange obsolescence marker. Sending the raw file as a binary instead of using pushkey hack. +- Add a "push done" notification """ @@ -12,6 +13,7 @@ from mercurial import extensions from mercurial import wireproto from mercurial import obsolete +from mercurial import localrepo def client_pushobsmarkers(self, obsfile): @@ -60,18 +62,43 @@ return orig(repo, remote) +def client_notifypushend(self): + """wire peer command to notify a push is done""" + self.requirecap('_push_experiment_notifypushend_0', _('hook once push is all done')) + return self._call('push_experiment_notifypushend_0') + + +def srv_notifypushend(repo, proto): + """wire protocol command to notify a push is done""" + proto.redirect() + repo.hook('notifypushend') + return wireproto.pushres(0) + + +def notifiedpush(orig, repo, remote, *args, **kwargs): + """push wrapped that call the wire protocol command""" + ret = orig(repo, remote, *args, **kwargs) + if remote.capable('_push_experiment_notifypushend_0'): + remote.push_experiment_notifypushend_0() + return ret + + def capabilities(orig, repo, proto): """wrapper to advertise new capability""" caps = orig(repo, proto) if obsolete._enabled: caps += ' _push_experiment_pushobsmarkers_0' + caps += ' _push_experiment_notifypushend_0' return caps def extsetup(ui): wireproto.wirepeer.push_experiment_pushobsmarkers_0 = client_pushobsmarkers + wireproto.wirepeer.push_experiment_notifypushend_0 = client_notifypushend wireproto.commands['push_experiment_pushobsmarkers_0'] = (srv_pushobsmarkers, '') + wireproto.commands['push_experiment_notifypushend_0'] = (srv_notifypushend, '') extensions.wrapfunction(wireproto, 'capabilities', capabilities) extensions.wrapfunction(obsolete, 'syncpush', syncpush) + extensions.wrapfunction(localrepo.localrepository, 'push', notifiedpush)