Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions src/apm_cli/commands/install.py
Original file line number Diff line number Diff line change
Expand Up @@ -442,8 +442,11 @@ def warning_handler(msg):
already_in_deps = identity in existing_identities

verbose = bool(logger and logger.verbose)
# An already-known registry identity also skips the probe.
if existing_source_is_registry or should_skip_github_probe_for_dep(
# Semver constraints must be resolved by the git semver resolver before
# any exact-ref probe. Registry-backed identities keep their own check.
if dep_ref.ref_kind == "semver":
package_accessible = True
elif existing_source_is_registry or should_skip_github_probe_for_dep(
dep_ref, default_registry
):
ref_ok, ref_err = validate_registry_ref(dep_ref)
Expand Down
23 changes: 23 additions & 0 deletions tests/unit/commands/test_install_resolve_refs.py
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,29 @@ def test_existing_unpinned_dependency_is_updated_when_cli_supplies_ref(self, moc
assert changed is True
assert current_deps == ["danielmeppiel/genesis#v0.4.0"]

@patch("apm_cli.commands.install._validate_package_exists")
@patch("apm_cli.commands.install.DependencyReference")
def test_git_semver_range_skips_literal_ref_preflight(self, mock_dep_cls, mock_validate):
ref = _make_dep_ref(
"owner/repo/packages/skill#>=1.0.0",
"github.com/owner/repo/packages/skill",
)
ref.ref_kind = "semver"
mock_dep_cls.parse.return_value = ref
mock_dep_cls.is_local_path.return_value = False
_disable_gitlab_direct_probe(mock_dep_cls)

valid, invalid, validated, _mkt, _entries, _changed = _resolve_package_references(
["owner/repo/packages/skill#>=1.0.0"],
[],
set(),
)

mock_validate.assert_not_called()
assert invalid == []
assert valid == [("owner/repo/packages/skill#>=1.0.0", False)]
assert validated == ["owner/repo/packages/skill#>=1.0.0"]


class TestResolvePackageReferencesInvalidInput:
"""Invalid packages must not mutate the identity set."""
Expand Down