diff --git a/pulp_rust/app/utils.py b/pulp_rust/app/utils.py index 70a4fc5..07c32d7 100644 --- a/pulp_rust/app/utils.py +++ b/pulp_rust/app/utils.py @@ -37,6 +37,9 @@ def _normalize_req(version_str): return f"^{version_str}" +CRATES_IO_INDEX = "https://github.com/rust-lang/crates.io-index" + + def parse_dep(name, spec, kind="normal", target=None): """Convert a single Cargo.toml dependency entry to index format.""" if isinstance(spec, str): @@ -49,7 +52,7 @@ def parse_dep(name, spec, kind="normal", target=None): "default_features": True, "target": target, "kind": kind, - "registry": None, + "registry": CRATES_IO_INDEX, "package": None, } @@ -62,7 +65,7 @@ def parse_dep(name, spec, kind="normal", target=None): "default_features": spec.get("default-features", True), "target": target, "kind": kind, - "registry": spec.get("registry"), + "registry": spec.get("registry-index") or CRATES_IO_INDEX, "package": None, } # If the dep was renamed, "name" in the index is the alias (the key), diff --git a/pulp_rust/tests/unit/test_utils.py b/pulp_rust/tests/unit/test_utils.py index 086fbee..f59d017 100644 --- a/pulp_rust/tests/unit/test_utils.py +++ b/pulp_rust/tests/unit/test_utils.py @@ -10,6 +10,7 @@ django.setup() from pulp_rust.app.utils import ( # noqa: E402 + CRATES_IO_INDEX, canonicalize_crate_name, extract_cargo_toml, extract_dependencies, @@ -44,7 +45,7 @@ def test_simple_string_spec(self): "default_features": True, "target": None, "kind": "normal", - "registry": None, + "registry": CRATES_IO_INDEX, "package": None, } @@ -63,7 +64,7 @@ def test_table_spec_all_fields(self): "features": ["derive", "std"], "optional": True, "default-features": False, - "registry": "https://my-registry.example.com/", + "registry-index": "https://my-registry.example.com/", "package": "serde_real", } result = parse_dep("my_serde", spec) @@ -75,6 +76,21 @@ def test_table_spec_all_fields(self): assert result["registry"] == "https://my-registry.example.com/" assert result["package"] == "serde_real" + def test_string_spec_registry_is_crates_io(self): + assert parse_dep("serde", "1.0")["registry"] == CRATES_IO_INDEX + + def test_table_spec_without_registry_defaults_to_crates_io(self): + result = parse_dep("serde", {"version": "1.0"}) + assert result["registry"] == CRATES_IO_INDEX + + def test_table_spec_registry_index_preserved(self): + result = parse_dep("foo", {"version": "1.0", "registry-index": "https://r.example/"}) + assert result["registry"] == "https://r.example/" + + def test_table_spec_registry_name_is_ignored(self): + result = parse_dep("foo", {"version": "1.0", "registry": "my-named-registry"}) + assert result["registry"] == CRATES_IO_INDEX + def test_table_spec_no_version_defaults_to_star(self): result = parse_dep("foo", {"optional": True}) assert result["req"] == "*"