diff --git a/src/poetry/packages/locker.py b/src/poetry/packages/locker.py index 46eae599982..14972eb2172 100644 --- a/src/poetry/packages/locker.py +++ b/src/poetry/packages/locker.py @@ -472,7 +472,7 @@ def _get_lock_data(self) -> TOMLDocument: def _lock_packages(self, packages: list[Package]) -> list: locked = [] - for package in sorted(packages, key=lambda x: x.name): + for package in sorted(packages, key=lambda x: (x.name, x.version)): spec = self._dump_package(package) locked.append(spec) diff --git a/tests/packages/test_locker.py b/tests/packages/test_locker.py index 61213c59e26..4b6fd224b6a 100644 --- a/tests/packages/test_locker.py +++ b/tests/packages/test_locker.py @@ -42,6 +42,8 @@ def test_lock_file_data_is_ordered(locker: Locker, root: ProjectPackage): package_a = get_package("A", "1.0.0") package_a.add_dependency(Factory.create_dependency("B", "^1.0")) package_a.files = [{"file": "foo", "hash": "456"}, {"file": "bar", "hash": "123"}] + package_a2 = get_package("A", "2.0.0") + package_a2.files = [{"file": "baz", "hash": "345"}] package_git = Package( "git-package", "1.2.3", @@ -50,14 +52,15 @@ def test_lock_file_data_is_ordered(locker: Locker, root: ProjectPackage): source_reference="develop", source_resolved_reference="123456", ) - packages = [package_a, get_package("B", "1.2"), package_git] + packages = [package_a2, package_a, get_package("B", "1.2"), package_git] locker.set_lock_data(root, packages) with locker.lock.open(encoding="utf-8") as f: content = f.read() - expected = """[[package]] + expected = """\ +[[package]] name = "A" version = "1.0.0" description = "" @@ -68,6 +71,14 @@ def test_lock_file_data_is_ordered(locker: Locker, root: ProjectPackage): [package.dependencies] B = "^1.0" +[[package]] +name = "A" +version = "2.0.0" +description = "" +category = "main" +optional = false +python-versions = "*" + [[package]] name = "B" version = "1.2" @@ -100,6 +111,7 @@ def test_lock_file_data_is_ordered(locker: Locker, root: ProjectPackage): A = [ {file = "bar", hash = "123"}, {file = "foo", hash = "456"}, + {file = "baz", hash = "345"}, ] B = [] git-package = []