0.6.2
This commit is contained in:
@@ -20,7 +20,7 @@ from homeassistant.helpers import issue_registry as ir
|
||||
from homeassistant.util import yaml as ha_yaml
|
||||
|
||||
from .storage import BCSStorage, CustomRepo
|
||||
from .providers import fetch_repo_info, detect_provider, RepoInfo, fetch_readme_markdown
|
||||
from .providers import fetch_repo_info, detect_provider, RepoInfo, fetch_readme_markdown, fetch_repo_versions
|
||||
from .metadata import fetch_repo_metadata, RepoMetadata
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
@@ -415,6 +415,23 @@ class BCSCore:
|
||||
default_branch=repo.default_branch,
|
||||
)
|
||||
|
||||
async def list_repo_versions(self, repo_id: str, *, limit: int = 20) -> list[dict[str, str]]:
|
||||
"""List installable versions/refs for a repo.
|
||||
|
||||
This is used by the UI to allow selecting an older tag/release.
|
||||
"""
|
||||
repo = self.get_repo(repo_id)
|
||||
if not repo:
|
||||
raise BCSInstallError(f"repo_id not found: {repo_id}")
|
||||
|
||||
return await fetch_repo_versions(
|
||||
self.hass,
|
||||
repo.url,
|
||||
provider=repo.provider,
|
||||
default_branch=repo.default_branch,
|
||||
limit=limit,
|
||||
)
|
||||
|
||||
def _pick_ref_for_install(self, repo: RepoItem) -> str:
|
||||
if repo.latest_version and str(repo.latest_version).strip():
|
||||
return str(repo.latest_version).strip()
|
||||
@@ -913,13 +930,14 @@ class BCSCore:
|
||||
self.signal_updated()
|
||||
return {"ok": True, "repo_id": repo_id, "removed": removed, "restart_required": bool(removed)}
|
||||
|
||||
async def install_repo(self, repo_id: str) -> dict[str, Any]:
|
||||
async def install_repo(self, repo_id: str, *, version: str | None = None) -> dict[str, Any]:
|
||||
repo = self.get_repo(repo_id)
|
||||
if not repo:
|
||||
raise BCSInstallError(f"repo_id not found: {repo_id}")
|
||||
|
||||
async with self._install_lock:
|
||||
ref = self._pick_ref_for_install(repo)
|
||||
requested = (version or "").strip()
|
||||
ref = requested if requested else self._pick_ref_for_install(repo)
|
||||
zip_url = self._build_zip_url(repo.url, ref)
|
||||
|
||||
_LOGGER.info("BCS install started: repo_id=%s ref=%s zip_url=%s", repo_id, ref, zip_url)
|
||||
@@ -1039,9 +1057,9 @@ class BCSCore:
|
||||
raise
|
||||
raise BCSInstallError(str(e)) from e
|
||||
|
||||
async def update_repo(self, repo_id: str) -> dict[str, Any]:
|
||||
async def update_repo(self, repo_id: str, *, version: str | None = None) -> dict[str, Any]:
|
||||
_LOGGER.info("BCS update started: repo_id=%s", repo_id)
|
||||
return await self.install_repo(repo_id)
|
||||
return await self.install_repo(repo_id, version=version)
|
||||
|
||||
async def request_restart(self) -> None:
|
||||
await self.hass.services.async_call("homeassistant", "restart", {}, blocking=False)
|
||||
Reference in New Issue
Block a user