Skip to content

Commit 2944eea

Browse files
committed
Alias cargo and gem installer packages
Signed-off-by: Nick Sweeting <git@sweeting.me>
1 parent 8c845ba commit 2944eea

4 files changed

Lines changed: 59 additions & 4 deletions

File tree

abxpkg/binprovider_apt.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,8 @@
44
import sys
55
import time
66

7-
from pydantic import TypeAdapter
7+
from pydantic import TypeAdapter, model_validator
8+
from typing import Self
89

910
from .base_types import BinProviderName, PATHStr, BinName, InstallArgs
1011
from .semver import SemVer
@@ -21,11 +22,18 @@ class AptProvider(BinProvider):
2122
INSTALLER_BIN: BinName = "apt-get"
2223

2324
PATH: PATHStr = "" # Starts empty; setup_PATH() discovers package runtime bin dirs via dpkg and replaces PATH with those dirs.
24-
2525
euid: int | None = (
2626
0 # Import-time default that forces every apt subprocess through the root/sudo execution path.
2727
)
2828

29+
@model_validator(mode="after")
30+
def add_package_aliases(self) -> Self:
31+
self.overrides["gem"] = {
32+
**self.overrides.get("gem", {}),
33+
"install_args": ["ruby"],
34+
}
35+
return self
36+
2937
def setup_PATH(self, no_cache: bool = False) -> None:
3038
"""Populate PATH on first use from dpkg-discovered package runtime bin dirs, not from apt-get itself."""
3139
# Rebuild PATH on first use, when the caller forces no_cache, or when

abxpkg/binprovider_brew.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,8 @@
77
import platform
88
from pathlib import Path
99

10-
from pydantic import Field, TypeAdapter, computed_field
10+
from pydantic import Field, TypeAdapter, computed_field, model_validator
11+
from typing import Self
1112

1213
from .base_types import (
1314
BinProviderName,
@@ -57,6 +58,18 @@ class BrewProvider(BinProvider):
5758
# to ``<install_root>/bin`` for the shim/link refresh paths used by load().
5859
bin_dir: Path | None = None
5960

61+
@model_validator(mode="after")
62+
def add_formula_aliases(self) -> Self:
63+
self.overrides["cargo"] = {
64+
**self.overrides.get("cargo", {}),
65+
"install_args": ["rust"],
66+
}
67+
self.overrides["gem"] = {
68+
**self.overrides.get("gem", {}),
69+
"install_args": ["ruby"],
70+
}
71+
return self
72+
6073
@computed_field
6174
@property
6275
def ENV(self) -> "dict[str, str]":

abxpkg/binprovider_cargo.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ class CargoProvider(BinProvider):
3030
INSTALLER_BIN: BinName = "cargo"
3131
INSTALLER_BINPROVIDERS: ClassVar[tuple[BinProviderName, ...] | None] = (
3232
"env",
33-
"apt",
3433
"brew",
34+
"apt",
3535
"nix",
3636
)
3737

tests/test_cli.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1690,6 +1690,40 @@ def test_build_binary_uses_installer_provider_preferences_for_default_provider_s
16901690
] == expected_provider_names
16911691

16921692

1693+
@pytest.mark.parametrize(
1694+
("binary_name", "expected_overrides"),
1695+
[
1696+
("cargo", {"brew": {"install_args": ["rust"]}}),
1697+
(
1698+
"gem",
1699+
{
1700+
"apt": {"install_args": ["ruby"]},
1701+
"brew": {"install_args": ["ruby"]},
1702+
},
1703+
),
1704+
],
1705+
)
1706+
def test_build_binary_merges_provider_aliases_for_installer_binaries(
1707+
tmp_path,
1708+
binary_name,
1709+
expected_overrides,
1710+
):
1711+
options = cli_module.CliOptions(
1712+
lib_dir=tmp_path,
1713+
provider_names=list(cli_module.DEFAULT_PROVIDER_NAMES),
1714+
dry_run=False,
1715+
debug=False,
1716+
no_cache=False,
1717+
)
1718+
1719+
binary = cli_module.build_binary(binary_name, options, dry_run=False)
1720+
1721+
for provider_name, expected_override in expected_overrides.items():
1722+
if provider_name not in cli_module.DEFAULT_PROVIDER_NAMES:
1723+
continue
1724+
assert binary.overrides[provider_name] == expected_override
1725+
1726+
16931727
def test_build_binary_preserves_explicit_provider_order_for_installer_binaries(
16941728
tmp_path,
16951729
):

0 commit comments

Comments
 (0)