Skip to content

Commit 3d6e2ff

Browse files
committed
Fix multi-extra issue
1 parent bf4a238 commit 3d6e2ff

File tree

4 files changed

+26
-14
lines changed

4 files changed

+26
-14
lines changed

python/private/pypi/extension.bzl

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,7 @@ def _whl_repo(
420420
return struct(
421421
repo_name = pypi_repo_name(
422422
normalize_name(src.distribution),
423+
src.extras,
423424
*target_platforms
424425
),
425426
args = args,
@@ -450,7 +451,7 @@ def _whl_repo(
450451
]
451452

452453
return struct(
453-
repo_name = whl_repo_name(src.filename, src.sha256),
454+
repo_name = whl_repo_name(src.filename, src.sha256, src.extras),
454455
args = args,
455456
config_setting = whl_config_setting(
456457
version = python_version,

python/private/pypi/parse_requirements.bzl

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,7 @@ def parse_requirements(
133133
extra_pip_args = options[target_platform]
134134

135135
for distribution, requirement_line in reqs_:
136+
req = requirement(requirement_line)
136137
for_whl = requirements_by_platform.setdefault(
137138
normalize_name(distribution),
138139
{},
@@ -146,6 +147,7 @@ def parse_requirements(
146147
struct(
147148
distribution = distribution,
148149
srcs = index_sources(requirement_line),
150+
extras = req.extras,
149151
requirement_line = requirement_line,
150152
target_platforms = [],
151153
extra_pip_args = extra_pip_args,
@@ -269,6 +271,7 @@ def _package_srcs(
269271
distribution = name,
270272
extra_pip_args = r.extra_pip_args,
271273
requirement_line = req_line,
274+
extras = r.extras,
272275
target_platforms = [],
273276
filename = dist.filename,
274277
sha256 = dist.sha256,

python/private/pypi/whl_repo_name.bzl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ def whl_repo_name(filename, sha256, extras):
3535
# Then the filename is basically foo-3.2.1.<ext>
3636
name, _, tail = filename.rpartition("-")
3737
parts.append(normalize_name(name))
38-
parts.extend(sorted(extras))
38+
parts.extend(sorted([e for e in extras if e]))
3939
if sha256:
4040
parts.append("sdist")
4141
version = ""
@@ -55,7 +55,7 @@ def whl_repo_name(filename, sha256, extras):
5555
parts.append(python_tag)
5656
parts.append(abi_tag)
5757
parts.append(platform_tag)
58-
parts.extend(sorted(extras))
58+
parts.extend(sorted([e for e in extras if e]))
5959

6060
if sha256:
6161
parts.append(sha256[:8])
@@ -81,7 +81,7 @@ def pypi_repo_name(whl_name, extras, *target_platforms):
8181
parts = [
8282
normalize_name(whl_name),
8383
]
84-
parts.extend(sorted(extras))
84+
parts.extend(sorted([e for e in extras if e]))
8585
parts.extend([p.partition("_")[-1] for p in target_platforms])
8686

8787
return "_".join(parts)

tests/pypi/extension/extension_tests.bzl

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -463,10 +463,13 @@ package[extra]==0.7.0 \
463463
"package": {
464464
"pypi_312_package_py3_none_any_62833036": [
465465
whl_config_setting(
466-
# TODO(hartikainen): I think all these platforms use the same `.whl`
467-
# and thus all three platforms should be included in the same
468-
# `target_platforms` here?
469-
target_platforms = ["cp312_linux_aarch64", "cp312_linux_x86_64"],
466+
target_platforms = ["cp312_linux_aarch64"],
467+
version = "3.12",
468+
),
469+
],
470+
"pypi_312_package_py3_none_any_extra_62833036": [
471+
whl_config_setting(
472+
target_platforms = ["cp312_linux_x86_64"],
470473
version = "3.12",
471474
),
472475
],
@@ -478,16 +481,21 @@ package[extra]==0.7.0 \
478481
# needs the extras to be included in it.
479482
"pypi_312_package_py3_none_any_62833036": {
480483
"dep_template": "@pypi//{name}:{target}",
481-
"download_only": True,
482-
"experimental_target_platforms": ["linux_aarch64", "linux_x86_64"],
484+
"experimental_target_platforms": ["linux_aarch64"],
485+
"filename": "package-0.7.0-py3-none-any.whl",
486+
"python_interpreter_target": "unit_test_interpreter_target",
487+
"requirement": "package==0.7.0",
488+
"sha256": "62833036cbaf4641d66ae94c61c0446890a91b2c0d153946583a0ebe04877a76",
489+
"urls": ["https://example.com/package/package-0.7.0-py3-none-any.whl"],
490+
},
491+
"pypi_312_package_py3_none_any_extra_62833036": {
492+
"dep_template": "@pypi//{name}:{target}",
493+
"experimental_target_platforms": ["linux_x86_64"],
483494
"filename": "package-0.7.0-py3-none-any.whl",
484495
"python_interpreter_target": "unit_test_interpreter_target",
485-
# NOTE(hartikainen): Perhaps this is part of the problem?
486-
# This should say `package[extra]==0.7.0` for `linux_x86_64` platform and
487-
# `package==0.7.0` for `linux_aarch64`
488496
"requirement": "package[extra]==0.7.0",
489497
"sha256": "62833036cbaf4641d66ae94c61c0446890a91b2c0d153946583a0ebe04877a76",
490-
"urls": ["https://example.com/package-0.7.0-py3-none-any.whl"],
498+
"urls": ["https://example.com/package/package-0.7.0-py3-none-any.whl"],
491499
},
492500
})
493501
pypi.whl_mods().contains_exactly({})

0 commit comments

Comments
 (0)