From 3b9364fa31a565492fb81ca276448543b0fe9ea0 Mon Sep 17 00:00:00 2001 From: Robin Fisher Date: Sun, 20 Aug 2023 17:33:10 -0600 Subject: [PATCH] Persist packages from original lockfile for platforms not requested for lock Addresses #196: for requested platforms replaces lock content without erroneously persisting packages. Co-authored-by: Arie Knoester Reviewed-by: Matt Fisher --- conda_lock/conda_lock.py | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/conda_lock/conda_lock.py b/conda_lock/conda_lock.py index ff398783d..132d1e262 100644 --- a/conda_lock/conda_lock.py +++ b/conda_lock/conda_lock.py @@ -361,6 +361,7 @@ def make_lock_files( # noqa: C901 or not check_input_hash or lock_spec.content_hash_for_platform(platform) != lock_content.metadata.content_hash[platform] + # TODO: Modify above line to allow for quick fail on differing environments ): platforms_to_lock.append(platform) if platform in platforms_already_locked: @@ -378,7 +379,8 @@ def make_lock_files( # noqa: C901 if platforms_to_lock: print(f"Locking dependencies for {platforms_to_lock}...", file=sys.stderr) - lock_content = lock_content | create_lockfile_from_spec( + + new_lock_content = create_lockfile_from_spec( conda=conda, spec=lock_spec, platforms=platforms_to_lock, @@ -389,6 +391,21 @@ def make_lock_files( # noqa: C901 strip_auth=strip_auth, ) + if not lock_content: + lock_content = new_lock_content + else: + # Persist packages from original lockfile for platforms not requested for lock + packages_not_to_lock = [ + dep + for dep in lock_content.package + if dep.platform not in platforms_to_lock + ] + filtered_lock_content = lock_content.copy( + deep=True, + update={"package": packages_not_to_lock}, + ) + lock_content = filtered_lock_content | new_lock_content + if "lock" in kinds: write_conda_lock_file( lock_content,