Update ohne Neustart, wenn nur Oberflaechendateien wechseln
Bisher verlangte jedes Update einen Home-Assistant-Neustart. Noetig ist er aber nur fuer Python-Code: HA importiert die Module einmal beim Start und haengt danach mit lebenden Objekten daran. frontend/ dagegen wird direkt von der Platte ausgeliefert (StaticPathConfig, cache_headers=False) - eine ersetzte .js ist sofort wirksam, es braucht nur ein Neuladen im Browser. aktualisierung.neustart_noetig() vergleicht die alte gegen die neue Fassung ueber sha256 je Datei und meldet "kein Neustart" nur, wenn JEDE Abweichung unter frontend/ liegt oder die manifest.json ist. Alles andere - .py, services.yaml, translations/, vorlage/ - gilt als neustartpflichtig, auch wo es das im Einzelfall nicht waere. Die Schieflage ist Absicht: ein faelschlich ausgelassener Neustart laesst neuen Python-Code nie anlaufen, und der Fehler wird woanders gesucht. manifest.json ist ausgenommen, weil sich seine Versionsnummer bei jeder Veroeffentlichung aendert - sonst waere die Unterscheidung wertlos. Weil HA das Manifest fuer die Laufzeit festhaelt (loader.py: hass.data[ DATA_INTEGRATIONS]), liest version_von_platte() die Nummer direkt von der Platte; koordinator.version_neu_lesen() zieht sie nach einem Update ohne Neustart nach, damit Panel und App die neue Fassung auch anzeigen. Panel und App zeigen im Neustart-freien Fall "Seite neu laden" statt "Installation abschliessen - Jetzt neu starten". Neun neue Testfaelle fuer die Unterscheidung, 23 Tests in der Aktualisierungs-Suite gruen. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -48,6 +48,7 @@ from homeassistant.helpers.start import async_at_started
|
||||
from homeassistant.helpers.storage import Store
|
||||
|
||||
from . import (
|
||||
aktualisierung,
|
||||
batterie,
|
||||
belege,
|
||||
bilder,
|
||||
@@ -681,6 +682,19 @@ class Koordinator:
|
||||
return None
|
||||
return {**info, "url": BUENDEL_URL}
|
||||
|
||||
async def version_neu_lesen(self) -> None:
|
||||
"""Liest die Versionsnummer erneut von der Platte.
|
||||
|
||||
Nach einem Update OHNE Neustart hat sich die manifest.json geaendert,
|
||||
Home Assistants zwischengespeicherte Fassung aber nicht. Ohne diesen
|
||||
Schritt zeigten Panel und App nach einem reinen Oberflaechen-Update
|
||||
weiter die alte Nummer - und der Nutzer haette keinen Anhalt, ob das
|
||||
Update wirklich angekommen ist."""
|
||||
neu = await self.hass.async_add_executor_job(aktualisierung.version_von_platte)
|
||||
if neu and neu != self.version:
|
||||
_LOGGER.info("Version nach Update: %s -> %s", self.version, neu)
|
||||
self.version = neu
|
||||
|
||||
async def app_version_veroeffentlichen(self) -> None:
|
||||
buendel = await self.hass.async_add_executor_job(self._buendel_lesen)
|
||||
bildstaende = await bilder.staende(
|
||||
|
||||
Reference in New Issue
Block a user