diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2016-10-13 00:09:17 +0300 |
---|---|---|
committer | Jussi Pakkanen <jpakkane@gmail.com> | 2016-10-13 21:30:49 +0300 |
commit | b6b8d561b84eb950d1503e682ca2eab3b656efa9 (patch) | |
tree | a3810e3d314d3836a1be904a910c041d913a0f85 | |
parent | 779788ad82166db028488f68ec90258d4ca63c7d (diff) | |
download | meson-b6b8d561b84eb950d1503e682ca2eab3b656efa9.zip meson-b6b8d561b84eb950d1503e682ca2eab3b656efa9.tar.gz meson-b6b8d561b84eb950d1503e682ca2eab3b656efa9.tar.bz2 |
Raise proper exception type and improve error messages. Closes #322.
-rw-r--r-- | mesonbuild/coredata.py | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py index 109bb32..eb6f06d 100644 --- a/mesonbuild/coredata.py +++ b/mesonbuild/coredata.py @@ -149,18 +149,22 @@ class CoreData(): raise RuntimeError('Tried to set unknown builtin option %s.' % optname) def load(filename): - with open(filename, 'rb') as f: - obj = pickle.load(f) + load_fail_msg = 'Coredata file {!r} is corrupted. Try with a fresh build tree.'.format(filename) + try: + with open(filename, 'rb') as f: + obj = pickle.load(f) + except pickle.UnpicklingError: + raise MesonException(load_fail_msg) if not isinstance(obj, CoreData): - raise RuntimeError('Core data file is corrupted.') + raise MesonException(load_fail_msg) if obj.version != version: - raise RuntimeError('Build tree has been generated with Meson version %s, which is incompatible with current version %s.'% + raise MesonException('Build directory has been generated with Meson version %s, which is incompatible with current version %s.\nPlease delete this build directory AND create a new one.'% (obj.version, version)) return obj def save(obj, filename): if obj.version != version: - raise RuntimeError('Fatal version mismatch corruption.') + raise MesonException('Fatal version mismatch corruption.') with open(filename, 'wb') as f: pickle.dump(obj, f) |