Skip to content

Commit

Permalink
Implementation of Combining Match Specs
Browse files Browse the repository at this point in the history
  • Loading branch information
srilman committed Dec 15, 2022
1 parent 90b370a commit 3deb301
Showing 1 changed file with 19 additions and 2 deletions.
21 changes: 19 additions & 2 deletions conda_lock/src_parser/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import typing

from collections import defaultdict, namedtuple
from itertools import chain
from itertools import chain, product
from typing import (
TYPE_CHECKING,
AbstractSet,
Expand Down Expand Up @@ -538,10 +538,27 @@ def aggregate_lock_specs(
):
key = (dep.manager, dep.name)
if key in unique_deps:
prev_dep = unique_deps[key]

# Override existing, but merge selectors
previous_selectors = unique_deps[key].selectors
previous_selectors = prev_dep.selectors
previous_selectors |= dep.selectors
dep.selectors = previous_selectors

# If bold old and new are VersionedDependency, combine versions
if isinstance(prev_dep, VersionedDependency) and isinstance(
dep, VersionedDependency
):
prev_versions = [
set(sec.split(",")) for sec in prev_dep.version.split("|")
]
new_versions = [set(sec.split(",")) for sec in dep.version.split("|")]
cross_versions = [
prev | new for prev, new in product(prev_versions, new_versions)
]
final_versions = set(",".join(subset) for subset in cross_versions)
dep.version = "|".join(final_versions)

unique_deps[key] = dep

dependencies = list(unique_deps.values())
Expand Down

0 comments on commit 3deb301

Please sign in to comment.