[PATCH 2 of 3 V2] bundle2: use bundleerrorparts for error parts with unbounded parameters
Pierre-Yves David
pierre-yves.david at ens-lyon.org
Thu Apr 6 08:50:36 EDT 2017
On 04/05/2017 05:49 AM, Siddharth Agarwal wrote:
> # HG changeset patch
> # User Siddharth Agarwal <sid0 at fb.com>
> # Date 1491349293 25200
> # Tue Apr 04 16:41:33 2017 -0700
> # Node ID 21c811d141254489398a83affa46e066bf2f6b94
> # Parent ad6196e3370572b9d0b436ab9d901f26884633f4
> bundle2: use bundleerrorparts for error parts with unbounded parameters
>
> Clients do not know how to read these error parts yet -- that's why they will
> only be able to print out truncated messages. In the next diff we'll be able to
> provide the full message.
>
> diff --git a/mercurial/wireproto.py b/mercurial/wireproto.py
> --- a/mercurial/wireproto.py
> +++ b/mercurial/wireproto.py
> @@ -1033,18 +1033,17 @@ def unbundle(repo, proto, heads):
> if exc.ret is not None:
> part.addparam('ret', exc.ret, mandatory=False)
> except error.BundleValueError as exc:
> - errpart = bundler.newpart('error:unsupportedcontent')
> + errpart = bundler.newerrorpart('error:unsupportedcontent')
> if exc.parttype is not None:
> errpart.addparam('parttype', exc.parttype)
> if exc.params:
> - errpart.addparam('params', '\0'.join(exc.params))
> + errpart.addlongparam('params', '\0'.join(exc.params))
> except error.Abort as exc:
> - manargs = [('message', str(exc))]
> - advargs = []
> + part = bundler.newerrorpart('error:abort')
> + part.addlongparam('message', str(exc))
> if exc.hint is not None:
> - advargs.append(('hint', exc.hint))
> - bundler.addpart(bundle2.bundlepart('error:abort',
> - manargs, advargs))
> + part.addlongparam('hint', exc.hint, mandatory=False)
> except error.PushRaced as exc:
> - bundler.newpart('error:pushraced', [('message', str(exc))])
> + part = bundler.newerrorpart('error:pushraced')
> + part.addlongparam('message', str(exc))
> return streamres(gen=bundler.getchunks())
> diff --git a/tests/test-bundle2-exchange.t b/tests/test-bundle2-exchange.t
> --- a/tests/test-bundle2-exchange.t
> +++ b/tests/test-bundle2-exchange.t
> @@ -462,6 +462,8 @@ Setting up
> > part = None
> > if reason == 'abort':
> > bundler.newpart('test:abort')
> + > if reason == 'abort-long':
> + > bundler.newpart('test:abort-long')
> > if reason == 'unknown':
> > bundler.newpart('test:unknown')
> > if reason == 'race':
> @@ -472,6 +474,12 @@ Setting up
> > def handleabort(op, part):
> > raise error.Abort('Abandon ship!', hint="don't panic")
> >
> + > @bundle2.parthandler("test:abort-long")
> + > def handleabortlong(op, part):
> + > # Make sure error messages are more than 4k long to ensure they work
> + > # across payload chunks
> + > raise error.Abort('a' * 8192, hint="don't panic")
small note: This test seems to be checking the bundle2 format and API
more than the target feature. This seems superfluous or at least wrongly
located.
> + >
> > def uisetup(ui):
> > exchange.b2partsgenmapping['failpart'] = _pushbundle2failpart
> > exchange.b2partsgenorder.insert(0, 'failpart')
> @@ -530,6 +538,20 @@ Doing the actual push: Abort error
> abort: push failed on remote
> [255]
>
> +Doing the actual push: Abort error (message too long to fit in a param)
> +
> + $ cat << EOF >> $HGRCPATH
> + > [failpush]
> + > reason = abort-long
> + > EOF
> +
> + $ hg -R main push ssh://user@dummy/other -r e7ec4e813ba6
> + pushing to ssh://user@dummy/other
> + searching for changes
> + remote: (a){252}... (re)
> + remote: (don't panic)
> + abort: push failed on remote
> + [255]
>
> Doing the actual push: unknown mandatory parts
>
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
>
--
Pierre-Yves David
More information about the Mercurial-devel
mailing list