From patchwork Sun May 28 16:32:04 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [03,of,11] obsolete: raise richer exception on unknown version From: Pierre-Yves David X-Patchwork-Id: 20988 Message-Id: To: mercurial-devel@mercurial-scm.org Date: Sun, 28 May 2017 18:32:04 +0200 # HG changeset patch # User Pierre-Yves David # Date 1495723823 -7200 # Thu May 25 16:50:23 2017 +0200 # Node ID b97c492388f6b14c346600e1c1ed4e400f6b47ca # Parent dbce9b63b68d45706d9c269543070e0eee88b376 # EXP-Topic obsstrip # Available At https://www.mercurial-scm.org/repo/users/marmoute/mercurial/ # hg pull https://www.mercurial-scm.org/repo/users/marmoute/mercurial/ -r b97c492388f6 obsolete: raise richer exception on unknown version We raise a more precise subclass of Abort with details about the faulty version. This will be used to detect this case and display some information in debugbundle. diff --git a/mercurial/error.py b/mercurial/error.py --- a/mercurial/error.py +++ b/mercurial/error.py @@ -138,6 +138,14 @@ class UnsupportedMergeRecords(Abort): hint=_('see https://mercurial-scm.org/wiki/MergeStateRecords for ' 'more information')) +class UnknownVersion(Abort): + """generic exception for aborting from an encounter with an unknown version + """ + + def __init__(self, *args, **kwargs): + self.version = kwargs.pop('version') + super(UnknownVersion, self).__init__(*args, **kwargs) + class LockError(IOError): def __init__(self, errno, strerror, filename, desc): IOError.__init__(self, errno, strerror, filename) diff --git a/mercurial/obsolete.py b/mercurial/obsolete.py --- a/mercurial/obsolete.py +++ b/mercurial/obsolete.py @@ -446,8 +446,8 @@ def _readmarkers(data): diskversion = _unpack('>B', data[off:off + 1])[0] off += 1 if diskversion not in formats: - raise error.Abort(_('parsing obsolete marker: unknown version %r') - % diskversion) + msg = _('parsing obsolete marker: unknown version %r') % diskversion + raise error.UnknownVersion(msg, version=diskversion) return diskversion, formats[diskversion][0](data, off) def encodemarkers(markers, addheader=False, version=_fm0version):