Release-Anhaenge: der Name entscheidet - und ein Pruefstand dafuer

Der Fehler
  Das Release war angelegt, die EXE hing dran - und der Updater haette
  trotzdem nie etwas gefunden. Der Anhang trug die Nummer im Namen, gesucht
  wird aber "Steuerrechnungstool.exe" (version.EXE_NAME). Die Nummer kommt
  erst beim Ablegen dazu.

  Das Tueckische: nichts schlaegt fehl. Der Updater meldet freundlich
  "Aktuell. Kein Update noetig." und startet die alte Fassung.

  Zweiter Fund: die Pruefsummen standen nur im Release-TEXT. Der Updater
  liest sie aus einer angehaengten Datei <exe>.sha256. Ohne die prueft er nur
  die Groesse - und eine verfaelschte Datei hat genau die richtige Groesse.

bauen.py legt jetzt release/ an, pruef_release.py prueft gegen das echte
Repository nach. Beide Dateien sind in beiden Programmen gleich.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01V4t48uxDok5rJXhC9bX1Ax
This commit is contained in:
TheMockTv 2026-09-06 20:43:16 +02:00
parent 96aa51ac22
commit e4619259cb
3 changed files with 126 additions and 7 deletions

View file

@ -79,7 +79,7 @@ def main():
# Bauordner uebernimmt sonst Reste, die es in der Quelle nicht mehr gibt -
# und in setup/ laege noch die Datei der VORIGEN Nummer herum. Beim
# Ausliefern greift man dann leicht zur falschen.
for ordner in ("build", "dist", "setup"):
for ordner in ("build", "dist", "setup", "release"):
shutil.rmtree(os.path.join(HIER, ordner), ignore_errors=True)
lauf([sys.executable, "-m", "PyInstaller", "--noconfirm", f"{stamm}.spec"],
@ -94,14 +94,33 @@ def main():
lauf([iscc(), f"/DVersion={version.VERSION}", f"/DExeProgramm={mit_nummer}",
"Installer.iss"], "Setup")
# ---- release/ : genau das, was ins Release gehoert ---------------------
# Der Anhang, den der Updater sucht, heisst OHNE Nummer - so steht es in
# version.EXE_NAME, und danach sucht passendes_release(). Haengt man ihn
# mit Nummer an, findet der Updater nie ein Update und meldet stumm
# "aktuell". Die Nummer kommt erst beim Ablegen dazu (updater.dateiname).
#
# Daneben die Pruefsumme als eigene Datei: ohne sie prueft der Updater nur
# die GROESSE. Eine Datei, die unterwegs verfaelscht wurde, hat aber genau
# die richtige Groesse.
freigabe = os.path.join(HIER, "release")
os.makedirs(freigabe, exist_ok=True)
shutil.copy2(ziel, os.path.join(freigabe, version.EXE_NAME))
with open(os.path.join(freigabe, version.EXE_NAME + ".sha256"),
"w", encoding="ascii") as f:
f.write(summe(ziel) + chr(10))
shutil.copy2(os.path.join(HIER, "dist", "Updater.exe"),
os.path.join(freigabe, "Updater.exe"))
for name in os.listdir(os.path.join(HIER, "setup")):
shutil.copy2(os.path.join(HIER, "setup", name),
os.path.join(freigabe, name))
print()
print(f"FERTIG | {stamm} {version.VERSION}")
for name in sorted(os.listdir(os.path.join(HIER, "dist"))):
p = os.path.join(HIER, "dist", name)
print(f" {name:44s} {os.path.getsize(p):>10,d} B {summe(p)}")
setup = os.path.join(HIER, "setup")
for name in sorted(os.listdir(setup)) if os.path.isdir(setup) else []:
p = os.path.join(setup, name)
print()
print(" release/ - genau diese Dateien gehoeren ans Release:")
for name in sorted(os.listdir(freigabe)):
p = os.path.join(freigabe, name)
print(f" {name:44s} {os.path.getsize(p):>10,d} B {summe(p)}")