@@ -206,9 +206,7 @@ def parse_requirements(
206
206
207
207
# Return normalized names
208
208
ret_requirements = ret .setdefault (normalize_name (whl_name ), [])
209
-
210
- all_platforms = []
211
- common_sdist = None
209
+ sdists_by_sha = {}
212
210
213
211
for r in sorted (reqs .values (), key = lambda r : r .requirement_line ):
214
212
whls , sdist = _add_dists (
@@ -217,11 +215,16 @@ def parse_requirements(
217
215
logger = logger ,
218
216
)
219
217
220
- if sdist and not common_sdist :
221
- common_sdist = sdist
218
+ if sdist :
219
+ sha = sdist .sha256
220
+ if sha not in sdists_by_sha :
221
+ sdists_by_sha [sha ] = struct (
222
+ sdist = sdist ,
223
+ platforms = [],
224
+ )
225
+ sdists_by_sha [sha ].platforms .extend (r .target_platforms )
222
226
223
227
target_platforms = env_marker_target_platforms .get (r .requirement_line , r .target_platforms )
224
- all_platforms .extend (target_platforms )
225
228
226
229
ret_requirements .append (
227
230
struct (
@@ -235,15 +238,15 @@ def parse_requirements(
235
238
),
236
239
)
237
240
238
- if common_sdist :
241
+ for sha , sdist_info in sdists_by_sha . items () :
239
242
ret_requirements .append (
240
243
struct (
241
244
distribution = r .distribution ,
242
245
srcs = r .srcs ,
243
- target_platforms = sorted (all_platforms ),
246
+ target_platforms = sorted (sdist_info . platforms ),
244
247
extra_pip_args = r .extra_pip_args ,
245
248
whls = [],
246
- sdist = common_sdist ,
249
+ sdist = sdist_info . sdist ,
247
250
is_exposed = is_exposed ,
248
251
),
249
252
)
0 commit comments