k
This commit is contained in:
@@ -43,15 +43,15 @@ def _get_registry() -> Dict[str, Any]:
|
||||
return getattr(pkg, "REGISTRY", {}) or {}
|
||||
|
||||
|
||||
def ensure_registry_loaded() -> None:
|
||||
"""Ensure native commands are registered into REGISTRY (idempotent)."""
|
||||
def ensure_registry_loaded(force: bool = False) -> None:
|
||||
"""Ensure native commands are registered into REGISTRY (idempotent unless force=True)."""
|
||||
pkg = _get_cmdlet_package()
|
||||
if pkg is None:
|
||||
return
|
||||
ensure_fn = getattr(pkg, "ensure_cmdlet_modules_loaded", None)
|
||||
if callable(ensure_fn):
|
||||
try:
|
||||
ensure_fn()
|
||||
ensure_fn(force=force)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
@@ -171,9 +171,11 @@ def get_cmdlet_metadata(
|
||||
}
|
||||
|
||||
|
||||
def list_cmdlet_metadata(config: Optional[Dict[str, Any]] = None) -> Dict[str, Dict[str, Any]]:
|
||||
def list_cmdlet_metadata(
|
||||
force: bool = False, config: Optional[Dict[str, Any]] = None
|
||||
) -> Dict[str, Dict[str, Any]]:
|
||||
"""Collect metadata for all registered cmdlet keyed by canonical name."""
|
||||
ensure_registry_loaded()
|
||||
ensure_registry_loaded(force=force)
|
||||
entries: Dict[str, Dict[str, Any]] = {}
|
||||
registry = _get_registry()
|
||||
for reg_name in registry.keys():
|
||||
@@ -238,11 +240,13 @@ def list_cmdlet_metadata(config: Optional[Dict[str, Any]] = None) -> Dict[str, D
|
||||
|
||||
|
||||
def list_cmdlet_names(
|
||||
include_aliases: bool = True, config: Optional[Dict[str, Any]] = None
|
||||
include_aliases: bool = True,
|
||||
force: bool = False,
|
||||
config: Optional[Dict[str, Any]] = None,
|
||||
) -> List[str]:
|
||||
"""Return sorted cmdlet names (optionally including aliases)."""
|
||||
ensure_registry_loaded()
|
||||
entries = list_cmdlet_metadata(config=config)
|
||||
ensure_registry_loaded(force=force)
|
||||
entries = list_cmdlet_metadata(force=force, config=config)
|
||||
names = set()
|
||||
for meta in entries.values():
|
||||
names.add(meta.get("name", ""))
|
||||
|
||||
@@ -280,7 +280,14 @@ def _serialize_conf(config: Dict[str, Any]) -> str:
|
||||
lines.append("")
|
||||
lines.append(f"[store={subtype}]")
|
||||
lines.append(f"name={_format_conf_value(name)}")
|
||||
|
||||
# Deduplicate keys case-insensitively and skip "name"
|
||||
seen_keys = {"NAME", "name"}
|
||||
for k in sorted(block.keys()):
|
||||
k_upper = k.upper()
|
||||
if k_upper in seen_keys:
|
||||
continue
|
||||
seen_keys.add(k_upper)
|
||||
lines.append(f"{k}={_format_conf_value(block.get(k))}")
|
||||
|
||||
# Provider blocks
|
||||
@@ -292,7 +299,13 @@ def _serialize_conf(config: Dict[str, Any]) -> str:
|
||||
continue
|
||||
lines.append("")
|
||||
lines.append(f"[provider={prov}]")
|
||||
|
||||
seen_keys = set()
|
||||
for k in sorted(block.keys()):
|
||||
k_upper = k.upper()
|
||||
if k_upper in seen_keys:
|
||||
continue
|
||||
seen_keys.add(k_upper)
|
||||
lines.append(f"{k}={_format_conf_value(block.get(k))}")
|
||||
|
||||
# Tool blocks
|
||||
@@ -304,7 +317,13 @@ def _serialize_conf(config: Dict[str, Any]) -> str:
|
||||
continue
|
||||
lines.append("")
|
||||
lines.append(f"[tool={name}]")
|
||||
|
||||
seen_keys = set()
|
||||
for k in sorted(block.keys()):
|
||||
k_upper = k.upper()
|
||||
if k_upper in seen_keys:
|
||||
continue
|
||||
seen_keys.add(k_upper)
|
||||
lines.append(f"{k}={_format_conf_value(block.get(k))}")
|
||||
|
||||
return "\n".join(lines).rstrip() + "\n"
|
||||
|
||||
Reference in New Issue
Block a user