diff options
author | Jussi Pakkanen <jpakkane@gmail.com> | 2018-03-01 21:52:30 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-03-01 21:52:30 +0200 |
commit | a383c5c1a5821b87abaa93ea083ca96317b410ff (patch) | |
tree | 3ea1be716edbc2e79adb932748e777774056ecd3 /mesonbuild/build.py | |
parent | 5f0aeafa387894b0893877a92db5122b86c2244d (diff) | |
parent | e0d0c0166a5d9ab008de43ad65cedd529e5e16a6 (diff) | |
download | meson-a383c5c1a5821b87abaa93ea083ca96317b410ff.zip meson-a383c5c1a5821b87abaa93ea083ca96317b410ff.tar.gz meson-a383c5c1a5821b87abaa93ea083ca96317b410ff.tar.bz2 |
Merge pull request #3150 from trhd/setups2
Fix a data pickling bug.
Diffstat (limited to 'mesonbuild/build.py')
-rw-r--r-- | mesonbuild/build.py | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/mesonbuild/build.py b/mesonbuild/build.py index 6ed8843..9eb74e9 100644 --- a/mesonbuild/build.py +++ b/mesonbuild/build.py @@ -15,6 +15,7 @@ import copy, os, re from collections import OrderedDict import itertools, pathlib +import pickle from . import environment from . import dependencies @@ -1928,3 +1929,22 @@ def get_sources_string_names(sources): else: raise AssertionError('Unknown source type: {!r}'.format(s)) return names + +def load(build_dir): + filename = os.path.join(build_dir, 'meson-private', 'build.dat') + load_fail_msg = 'Build data file {!r} is corrupted. Try with a fresh build tree.'.format(filename) + nonexisting_fail_msg = 'No such build data file as "{!r}".'.format(filename) + try: + with open(filename, 'rb') as f: + obj = pickle.load(f) + except FileNotFoundError: + raise MesonException(nonexisting_fail_msg) + except pickle.UnpicklingError: + raise MesonException(load_fail_msg) + if not isinstance(obj, Build): + raise MesonException(load_fail_msg) + return obj + +def save(obj, filename): + with open(filename, 'wb') as f: + pickle.dump(obj, f) |