Skip to content
Open
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 pulp_rust/app/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):
Expand All @@ -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,
}

Expand All @@ -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),
Expand Down
20 changes: 18 additions & 2 deletions pulp_rust/tests/unit/test_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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,
}

Expand All @@ -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)
Expand All @@ -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"] == "*"
Expand Down
Loading