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 homeassistant.util import yaml as ha_yaml
|
||||||
|
|
||||||
from .storage import BCSStorage, CustomRepo
|
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
|
from .metadata import fetch_repo_metadata, RepoMetadata
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
@@ -415,6 +415,23 @@ class BCSCore:
|
|||||||
default_branch=repo.default_branch,
|
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:
|
def _pick_ref_for_install(self, repo: RepoItem) -> str:
|
||||||
if repo.latest_version and str(repo.latest_version).strip():
|
if repo.latest_version and str(repo.latest_version).strip():
|
||||||
return str(repo.latest_version).strip()
|
return str(repo.latest_version).strip()
|
||||||
@@ -913,13 +930,14 @@ class BCSCore:
|
|||||||
self.signal_updated()
|
self.signal_updated()
|
||||||
return {"ok": True, "repo_id": repo_id, "removed": removed, "restart_required": bool(removed)}
|
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)
|
repo = self.get_repo(repo_id)
|
||||||
if not repo:
|
if not repo:
|
||||||
raise BCSInstallError(f"repo_id not found: {repo_id}")
|
raise BCSInstallError(f"repo_id not found: {repo_id}")
|
||||||
|
|
||||||
async with self._install_lock:
|
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)
|
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)
|
_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
|
||||||
raise BCSInstallError(str(e)) from e
|
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)
|
_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:
|
async def request_restart(self) -> None:
|
||||||
await self.hass.services.async_call("homeassistant", "restart", {}, blocking=False)
|
await self.hass.services.async_call("homeassistant", "restart", {}, blocking=False)
|
||||||
Reference in New Issue
Block a user