diff --git a/mesonbuild/coredata.py b/mesonbuild/coredata.py index 20a4ccb3f..3abba6d1f 100644 --- a/mesonbuild/coredata.py +++ b/mesonbuild/coredata.py @@ -43,6 +43,7 @@ if T.TYPE_CHECKING: KeyedOptionDictType = T.Union[T.Dict['OptionKey', 'UserOption[T.Any]'], OptionOverrideProxy] CompilerCheckCacheKey = T.Tuple[T.Tuple[str, ...], str, FileOrString, T.Tuple[str, ...], str] +# Check major_versions_differ() if changing versioning scheme. version = '0.59.99' backendlist = ['ninja', 'vs', 'vs2010', 'vs2012', 'vs2013', 'vs2015', 'vs2017', 'vs2019', 'xcode'] @@ -990,7 +991,10 @@ def format_cmd_line_options(options: argparse.Namespace) -> str: return ' '.join([shlex.quote(x) for x in cmdline]) def major_versions_differ(v1: str, v2: str) -> bool: - return v1.split('.')[0:2] != v2.split('.')[0:2] + v1_major, v1_minor = v1.rsplit('.', 1) + v2_major, v2_minor = v2.rsplit('.', 1) + # Major version differ, or one is development version but not the other. + return v1_major != v2_major or ('99' in {v1_minor, v2_minor} and v1_minor != v2_minor) def load(build_dir: str) -> CoreData: filename = os.path.join(build_dir, 'meson-private', 'coredata.dat') diff --git a/unittests/allplatformstests.py b/unittests/allplatformstests.py index 524f0d01b..7afa98977 100644 --- a/unittests/allplatformstests.py +++ b/unittests/allplatformstests.py @@ -2356,16 +2356,12 @@ class AllPlatformTests(BasePlatformTests): self.wipe() self.init(testdir, extra_args=['-Dstart_native=true'], override_envvars=env) - def __reconfigure(self, change_minor=False): + def __reconfigure(self): # Set an older version to force a reconfigure from scratch filename = os.path.join(self.privatedir, 'coredata.dat') with open(filename, 'rb') as f: obj = pickle.load(f) - if change_minor: - v = mesonbuild.coredata.version.split('.') - obj.version = '.'.join(v[0:2] + [str(int(v[2]) + 1)]) - else: - obj.version = '0.47.0' + obj.version = '0.47.0' with open(filename, 'wb') as f: pickle.dump(obj, f) @@ -2405,25 +2401,7 @@ class AllPlatformTests(BasePlatformTests): testdir = os.path.join(self.common_test_dir, '157 custom target subdir depend files') self.init(testdir) self.__reconfigure() - - with Path(self.builddir): - self.init(testdir, extra_args=['--wipe']) - - def test_minor_version_does_not_reconfigure_wipe(self): - testdir = os.path.join(self.unit_test_dir, '48 reconfigure') - self.init(testdir, extra_args=['-Dopt1=val1']) - self.setconf('-Dopt2=val2') - - self.__reconfigure(change_minor=True) - - out = self.init(testdir, extra_args=['--reconfigure', '-Dopt3=val3']) - self.assertNotRegex(out, 'Regenerating configuration from scratch') - self.assertRegex(out, 'opt1 val1') - self.assertRegex(out, 'opt2 val2') - self.assertRegex(out, 'opt3 val3') - self.assertRegex(out, 'opt4 default4') - self.build() - self.run_tests() + self.init(testdir, extra_args=['--wipe'], workdir=self.builddir) def test_target_construct_id_from_path(self): # This id is stable but not guessable. diff --git a/unittests/internaltests.py b/unittests/internaltests.py index 8cebeb8ea..a6f1ca523 100644 --- a/unittests/internaltests.py +++ b/unittests/internaltests.py @@ -34,8 +34,8 @@ import mesonbuild.dependencies.factory import mesonbuild.compilers import mesonbuild.envconfig import mesonbuild.environment -import mesonbuild.coredata import mesonbuild.modules.gnome +from mesonbuild import coredata from mesonbuild.interpreterbase import typed_pos_args, InvalidArguments, ObjectHolder from mesonbuild.interpreterbase import typed_pos_args, InvalidArguments, typed_kwargs, ContainerTypeInfo, KwargInfo from mesonbuild.mesonlib import ( @@ -1527,3 +1527,17 @@ class InternalTests(unittest.TestCase): self.assertRaises(mesonbuild.mesonlib.MesonBugException): i = mesonbuild.interpreter.Interpreter(build, mock=True) pickle.dumps(i) + + def test_major_versions_differ(self) -> None: + # Return True when going to next major release, when going to dev cycle, + # when going to rc cycle or when going out of rc cycle. + self.assertTrue(coredata.major_versions_differ('0.59.0', '0.60.0')) + self.assertTrue(coredata.major_versions_differ('0.59.0', '0.59.99')) + self.assertTrue(coredata.major_versions_differ('0.59.0', '0.60.0.rc1')) + self.assertTrue(coredata.major_versions_differ('0.59.99', '0.60.0.rc1')) + self.assertTrue(coredata.major_versions_differ('0.60.0.rc1', '0.60.0')) + # Return False when going to next point release or when staying in dev/rc cycle. + self.assertFalse(coredata.major_versions_differ('0.60.0', '0.60.0')) + self.assertFalse(coredata.major_versions_differ('0.60.0', '0.60.1')) + self.assertFalse(coredata.major_versions_differ('0.59.99', '0.59.99')) + self.assertFalse(coredata.major_versions_differ('0.60.0.rc1', '0.60.0.rc2'))