From c2bab89bf7d4d1cd86fe83ed4240ec1e0cdd0c24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Eustace?= Date: Fri, 24 Jul 2020 18:50:44 +0200 Subject: [PATCH] Fix compatibility check for lock files (#2717) --- poetry/packages/locker.py | 4 +++- tests/packages/test_locker.py | 26 ++++++++++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/poetry/packages/locker.py b/poetry/packages/locker.py index b06fd60b7a0..4cb6c67c72e 100644 --- a/poetry/packages/locker.py +++ b/poetry/packages/locker.py @@ -234,8 +234,10 @@ def _get_lock_data(self): # type: () -> dict lock_version = Version.parse(lock_data["metadata"].get("lock-version", "1.0")) current_version = Version.parse(self._VERSION) + # We expect the locker to be able to read lock files + # from the same semantic versioning range accepted_versions = parse_constraint( - "^{}".format(Version(current_version.major, current_version.minor)) + "^{}".format(Version(current_version.major, 0)) ) lock_version_allowed = accepted_versions.allows(lock_version) if lock_version_allowed and current_version < lock_version: diff --git a/tests/packages/test_locker.py b/tests/packages/test_locker.py index 726cabe050a..79362142957 100644 --- a/tests/packages/test_locker.py +++ b/tests/packages/test_locker.py @@ -340,3 +340,29 @@ def test_extras_dependencies_are_ordered(locker, root): content = f.read() assert expected == content + + +def test_locker_should_neither_emit_warnings_nor_raise_error_for_lower_compatible_versions( + locker, caplog +): + current_version = Version.parse(Locker._VERSION) + older_version = ".".join( + [str(current_version.major), str(current_version.minor - 1)] + ) + content = """\ +[metadata] +content-hash = "c3d07fca33fba542ef2b2a4d75bf5b48d892d21a830e2ad9c952ba5123a52f77" +lock-version = "{version}" +python-versions = "~2.7 || ^3.4" + +[metadata.files] +""".format( + version=older_version + ) + caplog.set_level(logging.WARNING, logger="poetry.packages.locker") + + locker.lock.write(tomlkit.parse(content)) + + _ = locker.lock_data + + assert 0 == len(caplog.records)