aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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)