@@ -127,6 +127,7 @@ def _combine_freezes(freezes, denylist=None):
127127 for py_version , freeze in freezes :
128128 if py_version in reference_versions :
129129 raise Exception ("Duplicate python %s" % py_version )
130+
130131 reference_versions .append (py_version )
131132 for package , version in freeze :
132133 packages .setdefault (
@@ -135,18 +136,29 @@ def _combine_freezes(freezes, denylist=None):
135136 for package , versions in sorted (packages .items ()):
136137 if package .lower () in excludes :
137138 continue
138- if (len (versions ) != 1 or
139- list (versions .values ())[0 ] != reference_versions ):
140- # markers
141- for version , py_versions in sorted (versions .items ()):
142- # Once the ecosystem matures, we can consider using OR.
139+
140+ if len (versions ) > 1 :
141+ # markers for packages with multiple versions - we use python
142+ # version ranges for these
143+ for idx , (version , py_versions ) in enumerate (sorted (versions .items ())): # noqa: E501
144+ if idx == 0 : # lower-bound
145+ marker = f"python_version<='{ py_versions [- 1 ]} '"
146+ elif idx + 1 != len (versions ): # intermediate version(s)
147+ marker = f"python_version>='{ py_versions [0 ]} ',<={ py_versions [- 1 ]} " # noqa: E501
148+ else : # upper-bound
149+ marker = f"python_version>='{ py_versions [0 ]} '"
150+
151+ yield f'{ package } ==={ version } ;{ marker } \n '
152+ elif list (versions .values ())[0 ] != reference_versions :
153+ # markers for packages with a single version - these are usually
154+ # version specific so we use strict python versions for these
155+ for idx , (version , py_versions ) in enumerate (sorted (versions .items ())): # noqa: E501
143156 for py_version in sorted (py_versions ):
144- yield (
145- "%s===%s;python_version=='%s'\n " %
146- (package , version , py_version ))
157+ marker = f"python_version=='{ py_version } '"
158+ yield f'{ package } ==={ version } ;{ marker } \n '
147159 else :
148160 # no markers
149- yield '%s ===%s \n ' % ( package , list (versions . keys ()) [0 ])
161+ yield f' { package } ==={ list (versions ) [0 ]} \n '
150162
151163
152164def _clone_versions (freezes , options ):
0 commit comments