aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2020-08-03 11:14:52 +0200
committerJussi Pakkanen <jpakkane@gmail.com>2020-08-04 17:15:37 +0300
commit6006987ce5081534a129ee2d9d55d993c7a76b29 (patch)
tree2fd7fc8455336f6c6a8286dd2e0fcb073426e0d1
parent2d218c289a6e95790c21106fe00655aa9f947f55 (diff)
downloadmeson-6006987ce5081534a129ee2d9d55d993c7a76b29.zip
meson-6006987ce5081534a129ee2d9d55d993c7a76b29.tar.gz
meson-6006987ce5081534a129ee2d9d55d993c7a76b29.tar.bz2
"Downgrade" warning when regenerating after version bump
There is nothing to "warn" about, this is a completely routine occurence. OTOH, when something is corrupted, we should warn. Keep the red color and "WARNING:" prefix in that case. Example output: $ ninja -C build Regenerating configuration from scratch: Build directory has been generated with Meson version 0.55.999, which is incompatible with current version 0.56.0. The Meson build system Version: 0.56.0 ...
-rw-r--r--mesonbuild/coredata.py14
-rw-r--r--mesonbuild/environment.py5
-rwxr-xr-xrun_unittests.py4
3 files changed, 18 insertions, 5 deletions
diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py
index cf418bb..ce03fbc 100644
--- a/mesonbuild/coredata.py
+++ b/mesonbuild/coredata.py
@@ -45,6 +45,16 @@ default_yielding = False
# Can't bind this near the class method it seems, sadly.
_T = T.TypeVar('_T')
+class MesonVersionMismatchException(MesonException):
+ '''Build directory generated with Meson version incompatible with current version'''
+ def __init__(self, old_version, current_version):
+ super().__init__('Build directory has been generated with Meson version {}, '
+ 'which is incompatible with current version {}.'
+ .format(old_version, current_version))
+ self.old_version = old_version
+ self.current_version = current_version
+
+
class UserOption(T.Generic[_T]):
def __init__(self, description, choices, yielding):
super().__init__()
@@ -982,9 +992,7 @@ def load(build_dir):
if not isinstance(obj, CoreData):
raise MesonException(load_fail_msg)
if major_versions_differ(obj.version, version):
- raise MesonException('Build directory has been generated with Meson version %s, '
- 'which is incompatible with current version %s.\n' %
- (obj.version, version))
+ raise MesonVersionMismatchException(obj.version, version)
return obj
def save(obj, build_dir):
diff --git a/mesonbuild/environment.py b/mesonbuild/environment.py
index 01fc8e4..6987863 100644
--- a/mesonbuild/environment.py
+++ b/mesonbuild/environment.py
@@ -523,6 +523,11 @@ class Environment:
self.first_invocation = False
except FileNotFoundError:
self.create_new_coredata(options)
+ except coredata.MesonVersionMismatchException as e:
+ # This is routine, but tell the user the update happened
+ mlog.log('Regenerating configuration from scratch:', str(e))
+ coredata.read_cmd_line_file(self.build_dir, options)
+ self.create_new_coredata(options)
except MesonException as e:
# If we stored previous command line options, we can recover from
# a broken/outdated coredata.
diff --git a/run_unittests.py b/run_unittests.py
index 0418ccf..49e2206 100755
--- a/run_unittests.py
+++ b/run_unittests.py
@@ -4030,7 +4030,7 @@ recommended as it is not supported on some platforms''')
self.__reconfigure()
out = self.init(testdir, extra_args=['--reconfigure', '-Dopt3=val3'])
- self.assertRegex(out, 'WARNING:.*Regenerating configuration from scratch')
+ self.assertRegex(out, 'Regenerating configuration from scratch')
self.assertRegex(out, 'opt1 val1')
self.assertRegex(out, 'opt2 val2')
self.assertRegex(out, 'opt3 val3')
@@ -4067,7 +4067,7 @@ recommended as it is not supported on some platforms''')
self.__reconfigure(change_minor=True)
out = self.init(testdir, extra_args=['--reconfigure', '-Dopt3=val3'])
- self.assertNotRegex(out, 'WARNING:.*Regenerating configuration from scratch')
+ self.assertNotRegex(out, 'Regenerating configuration from scratch')
self.assertRegex(out, 'opt1 val1')
self.assertRegex(out, 'opt2 val2')
self.assertRegex(out, 'opt3 val3')