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:
@@ -1 +1 @@
|
||||
{"version":"2026.9.5.22","sha256":"a83dcedbf835def7fedebdb55e136ec5cf6cd1e046bbe02b41a21477a4801547","bytes":324556,"gebaut":"2026-09-05T10:46:04Z"}
|
||||
{"version":"2026.9.5.23","sha256":"3ff0de25e28b5cf00a9015ec3af3e27f0e4d0ae8a13eb9e443dd47100ebc9d1e","bytes":324637,"gebaut":"2026-09-05T11:29:36Z"}
|
||||
Binary file not shown.
@@ -3743,6 +3743,18 @@ function vEinst() {
|
||||
if (laeuft === "installieren") return spinner("Installiere …");
|
||||
if (laeuft === "neustart") return spinner("Home Assistant startet neu …");
|
||||
if (u && u.installiert) {
|
||||
/* Ob ein Neustart noetig ist, entscheidet der Updater am
|
||||
Datei-Vergleich (aktualisierung.neustart_noetig). Betrifft das
|
||||
Update nur frontend/, reicht ein Neuladen der Seite: die Dateien
|
||||
werden direkt von der Platte ausgeliefert, und zwar mit
|
||||
cache_headers=False - der Browser holt sie beim naechsten Laden
|
||||
ohnehin frisch. Nur geaenderter Python-Code braucht wirklich einen
|
||||
Neustart (Abschnitt CZ in AGENTS.md). */
|
||||
if (u.neustart_noetig === false) {
|
||||
return `<span style="display:block;margin-top:8px;color:var(--fg2);font-size:13px;line-height:1.6">
|
||||
Version ${esc(u.version)} installiert - nur Oberflächendateien, kein Neustart nötig.</span>
|
||||
<button class="aktion primaer" style="margin-top:14px" data-update="neuladen">Seite neu laden</button>`;
|
||||
}
|
||||
return `<span style="display:block;margin-top:8px;color:var(--fg2);font-size:13px;line-height:1.6">
|
||||
Version ${esc(u.version)} installiert - die neue Fassung wird erst nach einem Neustart
|
||||
geladen.</span>
|
||||
@@ -6693,6 +6705,8 @@ function ereignisseVerdrahten() {
|
||||
);
|
||||
})
|
||||
.finally(() => { INTEGRATION_UPDATE_LAEUFT = null; render(); scrollWiederherstellen(); });
|
||||
} else if (aktion === "neuladen") {
|
||||
location.reload();
|
||||
} else if (aktion === "neustart") {
|
||||
INTEGRATION_UPDATE_LAEUFT = "neustart"; render();
|
||||
HASS.callService("homeassistant", "restart", {}).catch((err) => {
|
||||
|
||||
Reference in New Issue
Block a user