[PATCH] mpatch: unify mpatchError (issue5182)
Augie Fackler
raf at durin42.com
Tue Apr 5 13:30:24 EDT 2016
On Mon, Apr 04, 2016 at 09:06:29PM -0500, timeless wrote:
> # HG changeset patch
> # User timeless <timeless at mozdev.org>
> # Date 1459389928 0
> # Thu Mar 31 02:05:28 2016 +0000
> # Node ID 3f972305323b084f81b2566f9612db17cf0d92e3
> # Parent ff0d3b6b287f89594bd8d0308fe2810d2a18ea01
> mpatch: unify mpatchError (issue5182)
I don't think pyd queued this, so I've done so. Thanks!
>
> The pure version was mpatch was throwing struct.error or ValueError
> for errors, whereas the C version was throwing an "mpatch.mpatchError".
>
> Introducing an mpatch.mpatchError into pure and using it consistently
> is fairly easy, but the actual form for it is mercurial.mpatch.mpatchError,
> so with this commit, we change the C implementation to match the naming
> convention too.
>
> diff --git a/mercurial/mpatch.c b/mercurial/mpatch.c
> --- a/mercurial/mpatch.c
> +++ b/mercurial/mpatch.c
> @@ -404,7 +404,8 @@
> if (m == NULL)
> return NULL;
>
> - mpatch_Error = PyErr_NewException("mpatch.mpatchError", NULL, NULL);
> + mpatch_Error = PyErr_NewException("mercurial.mpatch.mpatchError",
> + NULL, NULL);
> Py_INCREF(mpatch_Error);
> PyModule_AddObject(m, "mpatchError", mpatch_Error);
>
> @@ -415,6 +416,7 @@
> initmpatch(void)
> {
> Py_InitModule3("mpatch", methods, mpatch_doc);
> - mpatch_Error = PyErr_NewException("mpatch.mpatchError", NULL, NULL);
> + mpatch_Error = PyErr_NewException("mercurial.mpatch.mpatchError",
> + NULL, NULL);
> }
> #endif
> diff --git a/mercurial/pure/mpatch.py b/mercurial/pure/mpatch.py
> --- a/mercurial/pure/mpatch.py
> +++ b/mercurial/pure/mpatch.py
> @@ -12,6 +12,10 @@
>
> StringIO = cStringIO.StringIO
>
> +class mpatchError(Exception):
> + """error raised when a delta cannot be decoded
> + """
> +
> # This attempts to apply a series of patches in time proportional to
> # the total size of the patches, rather than patches * len(text). This
> # means rather than shuffling strings around, we shuffle around
> @@ -84,7 +88,10 @@
> last = 0
> while pos < end:
> m.seek(pos)
> - p1, p2, l = struct.unpack(">lll", m.read(12))
> + try:
> + p1, p2, l = struct.unpack(">lll", m.read(12))
> + except struct.error:
> + raise mpatchError("patch cannot be decoded")
> _pull(new, frags, p1 - last) # what didn't change
> _pull([], frags, p2 - p1) # what got deleted
> new.append((l, pos + 12)) # what got added
> @@ -114,7 +121,7 @@
> outlen += length
>
> if bin != binend:
> - raise ValueError("patch cannot be decoded")
> + raise mpatchError("patch cannot be decoded")
>
> outlen += orig - last
> return outlen
> diff --git a/tests/test-revlog.t b/tests/test-revlog.t
> --- a/tests/test-revlog.t
> +++ b/tests/test-revlog.t
> @@ -11,5 +11,5 @@
> rev offset length delta linkrev nodeid p1 p2
> 0 0 19 -1 2 99e0332bd498 000000000000 000000000000
> 1 19 12 0 3 6674f57a23d8 99e0332bd498 000000000000
> - $ hg debugdata a.i 1 2>&1 | grep decoded
> - mpatch.mpatchError: patch cannot be decoded
> + $ hg debugdata a.i 1 2>&1 | egrep 'Error:.*decoded'
> + mercurial.mpatch.mpatchError: patch cannot be decoded
> _______________________________________________
> Mercurial-devel mailing list
> Mercurial-devel at mercurial-scm.org
> https://www.mercurial-scm.org/mailman/listinfo/mercurial-devel
More information about the Mercurial-devel
mailing list