mirror of
https://github.com/R0m1k3/Loki.git
synced 2026-10-23 23:18:13 +02:00
v0.6.11 : le .exe telecharge met a jour et demarre, emplacements dans le journal
- Windows : quand AJEAN est deja installe, lancer le fichier telecharge remplace le binaire installe (s'il est plus recent) puis demarre l'application, sans message. La 0.6.10 annoncait « vous lancez une copie » puis demarrait quand meme : une information inactionnable suivie d'un comportement non annonce. Le refus d'installation est desormais memorise (.install_declined). - la version du binaire installe est lue dans les ressources du fichier (VS_VERSIONINFO). L'implementation evidente (executer `jean version` et lire la sortie) renvoie du VIDE : le binaire est en sous-systeme GUI et n'ecrit pas dans un tuyau, donc la mise a jour ne se serait jamais faite, en silence. Piege documente dans le code + deux tests. - UI : les emplacements passent sous le journal du moteur (clic sur la pastille d'etat) au lieu d'un bouton isole dans les actions.
This commit is contained in:
1 parent
f541d997d2
commit
0d9284e95c
10 files changed
+209
-70
No files matched your search
@@ -0,0 +1,39 @@
|
||||
//go:build windows
|
||||
|
||||
package jean
|
||||
|
||||
import (
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"testing"
|
||||
)
|
||||
|
||||
// binaryVersion pilote la mise à jour automatique du binaire installé quand on
|
||||
// lance le fichier téléchargé : si elle renvoie du vide, plus aucune mise à jour
|
||||
// n'a lieu, et en silence. C'est exactement ce qui arrivait avec la première
|
||||
// implémentation (exécuter `jean version`, dont la sortie est vide pour un
|
||||
// binaire en sous-système GUI). D'où ces tests sur la plomberie syscall.
|
||||
func TestBinaryVersionReadsResource(t *testing.T) {
|
||||
// kernel32.dll porte toujours une ressource de version.
|
||||
dll := filepath.Join(os.Getenv("SystemRoot"), "System32", "kernel32.dll")
|
||||
if _, err := os.Stat(dll); err != nil {
|
||||
t.Skip("kernel32.dll introuvable")
|
||||
}
|
||||
v := binaryVersion(dll)
|
||||
if !regexp.MustCompile(`^\d+\.\d+\.\d+$`).MatchString(v) {
|
||||
t.Fatalf("binaryVersion(kernel32.dll) = %q, attendu une version x.y.z", v)
|
||||
}
|
||||
}
|
||||
|
||||
// Un fichier sans ressource de version doit renvoyer "" : upgradeInstalled s'en
|
||||
// sert pour s'abstenir plutôt que de remplacer un binaire au hasard.
|
||||
func TestBinaryVersionWithoutResource(t *testing.T) {
|
||||
p := filepath.Join(t.TempDir(), "vide.exe")
|
||||
if err := os.WriteFile(p, []byte("pas un exe"), 0o644); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if v := binaryVersion(p); v != "" {
|
||||
t.Fatalf("binaryVersion sur un fichier sans ressource = %q, attendu \"\"", v)
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user