aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJussi Pakkanen <jpakkane@gmail.com>2016-10-13 00:09:17 +0300
committerJussi Pakkanen <jpakkane@gmail.com>2016-10-13 21:30:49 +0300
commitb6b8d561b84eb950d1503e682ca2eab3b656efa9 (patch)
treea3810e3d314d3836a1be904a910c041d913a0f85
parent779788ad82166db028488f68ec90258d4ca63c7d (diff)
downloadmeson-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.py14
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)