Merge pull request 'templates: fix urls for relative file paths' (#4520) from fix-template-urls into main

Reviewed-on: https://git.clan.lol/clan/clan-core/pulls/4520
This commit is contained in:
hsjobeki
2025-07-29 15:19:20 +00:00
2 changed files with 97 additions and 0 deletions

View File

@@ -84,6 +84,15 @@ def transform_url(template_type: str, identifier: str, flake: Flake) -> tuple[st
flake_ref = str(flake.path)
if "#" not in identifier:
# Local path references are not transformed
# return flake_ref=identifier, template='default'
if (
identifier.startswith(("/", "~/", "./", "../"))
or identifier == "."
or identifier == ".."
):
return (identifier, f"clan.templates.{template_type}.default")
# No fragment, so we assume its a builtin template
return (flake_ref, f'clanInternals.templates.{template_type}."{selector}"')

View File

@@ -182,3 +182,91 @@ def test_locked_input_template_no_dot() -> None:
)
assert selector == expected_selector
assert flake_ref == str(local_path.path)
def test_explizit_path_default_minimal_rel_1() -> None:
user_input = "."
expected_selector = "clan.templates.machine.default"
flake_ref, selector = transform_url(
machine_template_type, user_input, flake=local_path
)
assert selector == expected_selector
assert flake_ref == user_input
def test_explizit_path_default_minimal_rel_2() -> None:
user_input = "./"
expected_selector = "clan.templates.machine.default"
flake_ref, selector = transform_url(
machine_template_type, user_input, flake=local_path
)
assert selector == expected_selector
assert flake_ref == user_input
def test_explizit_path_default_minimal_parent_1() -> None:
user_input = ".."
expected_selector = "clan.templates.machine.default"
flake_ref, selector = transform_url(
machine_template_type, user_input, flake=local_path
)
assert selector == expected_selector
assert flake_ref == user_input
def test_explizit_path_default_minimal_parent_2() -> None:
user_input = "../"
expected_selector = "clan.templates.machine.default"
flake_ref, selector = transform_url(
machine_template_type, user_input, flake=local_path
)
assert selector == expected_selector
assert flake_ref == user_input
def test_internal_dot_template() -> None:
user_input = ".internal"
expected_selector = 'clanInternals.templates.machine.".internal"'
flake_ref, selector = transform_url(
machine_template_type, user_input, flake=local_path
)
assert selector == expected_selector
assert flake_ref == str(local_path.path)
def test_explizit_rel_path_default() -> None:
user_input = "./path/to/flake"
expected_selector = "clan.templates.machine.default"
flake_ref, selector = transform_url(
machine_template_type, user_input, flake=local_path
)
assert selector == expected_selector
assert flake_ref == user_input
def test_explizit_abs_path_default() -> None:
user_input = "/path/to/flake"
expected_selector = "clan.templates.machine.default"
flake_ref, selector = transform_url(
machine_template_type, user_input, flake=local_path
)
assert selector == expected_selector
assert flake_ref == user_input
def test_explizit_home_path_default() -> None:
user_input = "~/path/to/flake"
expected_selector = "clan.templates.machine.default"
flake_ref, selector = transform_url(
machine_template_type, user_input, flake=local_path
)
assert selector == expected_selector
assert flake_ref == user_input