MCPcopy
hub / github.com/github/spec-kit / extension_update

Function extension_update

src/specify_cli/extensions/_commands.py:1001–1443  ·  view source on GitHub ↗

Update extension(s) to latest version.

(
    extension: str = typer.Argument(None, help="Extension ID or name to update (or all)"),
)

Source from the content-addressed store, hash-verified

999
1000@extension_app.command("update")
1001def extension_update(
1002 extension: str = typer.Argument(None, help="Extension ID or name to update (or all)"),
1003):
1004 """Update extension(s) to latest version."""
1005 from . import (
1006 ExtensionManager,
1007 ExtensionCatalog,
1008 ExtensionError,
1009 ValidationError,
1010 CommandRegistrar,
1011 HookExecutor,
1012 normalize_priority,
1013 )
1014 from packaging import version as pkg_version
1015
1016 project_root = _require_specify_project()
1017 manager = ExtensionManager(project_root)
1018 catalog = ExtensionCatalog(project_root)
1019 speckit_version = get_speckit_version()
1020
1021 try:
1022 # Get list of extensions to update
1023 installed = manager.list_installed()
1024 if extension:
1025 # Update specific extension - resolve ID from argument (handles ambiguous names)
1026 extension_id, _ = _resolve_installed_extension(extension, installed, "update")
1027 extensions_to_update = [extension_id]
1028 else:
1029 # Update all extensions
1030 extensions_to_update = [ext["id"] for ext in installed]
1031
1032 if not extensions_to_update:
1033 console.print("[yellow]No extensions installed[/yellow]")
1034 raise typer.Exit(0)
1035
1036 console.print("🔄 Checking for updates...\n")
1037
1038 updates_available = []
1039
1040 for ext_id in extensions_to_update:
1041 safe_ext_id = _escape_markup(str(ext_id))
1042 # Get installed version
1043 metadata = manager.registry.get(ext_id)
1044 if metadata is None or not isinstance(metadata, dict) or "version" not in metadata:
1045 console.print(f"⚠ {safe_ext_id}: Registry entry corrupted or missing (skipping)")
1046 continue
1047 try:
1048 installed_version = pkg_version.Version(metadata["version"])
1049 except pkg_version.InvalidVersion:
1050 console.print(
1051 f"⚠ {safe_ext_id}: Invalid installed version '{_escape_markup(str(metadata.get('version')))}' in registry (skipping)"
1052 )
1053 continue
1054
1055 # Get catalog info
1056 ext_info = catalog.get_extension_info(ext_id)
1057 if not ext_info:
1058 console.print(f"⚠ {safe_ext_id}: Not found in catalog (skipping)")

Callers

nothing calls this directly

Calls 15

list_installedMethod · 0.95
get_extension_infoMethod · 0.95
get_project_configMethod · 0.95
download_extensionMethod · 0.95
removeMethod · 0.95
install_from_zipMethod · 0.95
save_project_configMethod · 0.95
ExtensionManagerClass · 0.85
ExtensionCatalogClass · 0.85
get_speckit_versionFunction · 0.85
HookExecutorClass · 0.85

Tested by

no test coverage detected