diff mercurial/bundle2.py @ 25484:a5192774e925

bundle2: introduce a PushkeyFail error to abort unbundle on pushkey error The pushkey code is generic and the server side has little context on what the client is trying to achieve. Generating interesting error messages server side would be challenging. Instead we introduce a dedicated exception that carries more data. In particular, it carries the id of the part which failed that will allow clients to display custom error messages depending on the part intent. The processing and transfer-over-the-wire of this exception is to be implemented in coming changesets.
author Pierre-Yves David <pierre-yves.david@fb.com>
date Wed, 27 May 2015 23:48:54 -0700
parents 6de96cb31176
children 8cd0159207df
line wrap: on
line diff
--- a/mercurial/bundle2.py	Fri Jun 05 13:31:18 2015 -0700
+++ b/mercurial/bundle2.py	Wed May 27 23:48:54 2015 -0700
@@ -1330,8 +1330,11 @@
         rpart.addparam('in-reply-to', str(inpart.id), mandatory=False)
         rpart.addparam('return', '%i' % ret, mandatory=False)
     if inpart.mandatory and not ret:
-        raise util.Abort(_('failed to update value for "%s/%s"')
-                         % (namespace, key))
+        kwargs = {}
+        for key in ('namespace', 'key', 'new', 'old', 'ret'):
+            if key in inpart.params:
+                kwargs[key] = inpart.params[key]
+        raise error.PushkeyFailed(partid=str(inpart.id), **kwargs)
 
 @parthandler('reply:pushkey', ('return', 'in-reply-to'))
 def handlepushkeyreply(op, inpart):