fix(registry): quote keys, dedupe tags, and document sourcing order; CI commits regenerated registry
- Quote both keys and values in the generated __fish_config_op_registry.fish keys array so a future identity/tag containing a glob-special character (*, ?, [) can't be silently dropped by fish's set, desyncing the positionally-paired keys/values arrays. - Deduplicate the tag list per site in build_registry() so an identity collision across sources (e.g. auto-pull tagged autoexec/sync in both functions/auto-pull.fish and conf.d/auto-pull.fish) no longer produces a duplicated tag in the committed registry. - Add a comment to the generated file's header noting it must sort first among conf.d/*.fish guard-callers, since that ordering is currently implicit in the filename rather than stated anywhere. - CI's auto-commit step now also stages conf.d/__fish_config_op_registry.fish alongside the docs it already regenerates, so a # COMPONENT header change pushed without a manual __fish_config_op_registry_rebuild self-heals instead of silently drifting from what CI just regenerated.
This commit is contained in:
@@ -67,7 +67,7 @@ def build_registry(components: dict[str, list[str]]) -> tuple[dict[str, list[str
|
||||
)
|
||||
tags = [t for t in tags if t not in ("always/on", "always/off")]
|
||||
if tags:
|
||||
registry[f"{identity}:{site}"] = tags
|
||||
registry[f"{identity}:{site}"] = list(dict.fromkeys(tags))
|
||||
return registry, warnings
|
||||
|
||||
|
||||
@@ -81,6 +81,12 @@ def render(registry: dict[str, list[str]]) -> str:
|
||||
"# Regenerate with __fish_config_op_registry_rebuild after editing a",
|
||||
"# # COMPONENT header, or automatically via docs/build-manual.py.",
|
||||
"# Source: docs/generate_component_registry.py",
|
||||
"#",
|
||||
"# This file must be sourced before any other conf.d/*.fish file that",
|
||||
"# calls the opinionated guard. That currently holds only because fish's",
|
||||
"# glob-based conf.d loading happens to sort this filename first",
|
||||
"# alphabetically among the guard-calling files -- do not rename it",
|
||||
"# without preserving that ordering.",
|
||||
"",
|
||||
]
|
||||
if not keys:
|
||||
@@ -88,8 +94,9 @@ def render(registry: dict[str, list[str]]) -> str:
|
||||
lines.append("set -g __fish_config_op_registry_values")
|
||||
return "\n".join(lines) + "\n"
|
||||
|
||||
quoted_keys = [f'"{k}"' for k in keys]
|
||||
lines.append("set -g __fish_config_op_registry_keys \\")
|
||||
lines += [f" {k} \\" for k in keys[:-1]] + [f" {keys[-1]}"]
|
||||
lines += [f" {k} \\" for k in quoted_keys[:-1]] + [f" {quoted_keys[-1]}"]
|
||||
lines.append("")
|
||||
|
||||
values = ['"' + " ".join(registry[k]) + '"' for k in keys]
|
||||
|
||||
Reference in New Issue
Block a user