Closed GuillaumeBrochu closed 8 years ago
I also observed the same phenomenon for the #nsck flag.
When read from a V6 .gw file (not gwplus), the #nsck flag is read by gwc as it should be and saved to gwplus format with gwu, but it is not read by gwc (I mean, transfered to the newly created database) if the file is in V7/gwplus format.
Voir ce commentaire, qui, je crois, est relié à ce problème : https://github.com/geneanet/geneweb/issues/368#issuecomment-170362780
Voir aussi : https://github.com/geneanet/geneweb/issues/305
Je crois avoir trouvé pourquoi les préfixes de types de décès ("k","m","s","e") et les #nsck sont mal importées par gwc seulement pour des fichiers .gw au format gwplus (les fichiers .gw générés avec la V6 s'importent sans problème).
C'est essentiellement causé par la redondance des informations sur les dates de décès et sur les mariages entre les informations de base des personnes/familles et les pevt/fevt.
Par exemple, la date de décès est interprétée deux fois par gwc (gwcomp.ml) pour chaque fichier .w. La première dans les informations des personnes, et la deuxième dans les pevt. Or, les préfixes de types de décès ne sont sauvegardées par gwu que dans l'information des personnes, pas dans les pevt. Comme les pevt apparaissent dans l'ordre APRÈS les informations des personnes dans les fichiers .gw, c'est ce second décodage qui fixe le type de décès à "Unspecified". Le même principe doit s'appliquer pour les #nsck.
Exemple :
1.Fichier .gw V6 original
encoding: utf-8
fam AAAA Père 0 e1997 + AAAA Mère 0 s1996
beg
- h Fils 0 1995
- f Fille 0 2000
- f Cadette
end
fam AAAA Fils + #nsckm mm BBBB Fils
fam BBBB Père 0 k1999 + BBBB Mère 0 m1998
beg
- h Fils
- f Fille
- h Fiston
end
fam AAAA Fille + #nsck ff BBBB Fille
fam BBBB Fiston + #noment AAAA Cadette
2.On importe le fichier ci-haut dans la V7 et on sauvegarde avec cette V7 :
encoding: utf-8
gwplus
fam AAAA Père 0 e1997 + AAAA Mère 0 s1996
fevt
#marr
end fevt
beg
- h Fils 0 1995
- f Fille 0 2000
- f Cadette
end
pevt AAAA Fils
#deat 1995
end pevt
pevt AAAA Fille
#deat 2000
end pevt
pevt AAAA Mère
#deat 1996
end pevt
pevt AAAA Père
#deat 1997
end pevt
fam AAAA Fils + #nsckm mm BBBB Fils
fevt
#marr
end fevt
fam BBBB Père 0 k1999 + BBBB Mère 0 m1998
fevt
#marr
end fevt
beg
- h Fils
- f Fille
- h Fiston
end
pevt BBBB Mère
#deat 1998
end pevt
pevt BBBB Père
#deat 1999
end pevt
fam AAAA Fille + #nsck ff BBBB Fille
fevt
#nmar
end fevt
fam BBBB Fiston + #noment AAAA Cadette
fevt
#nmen
end fevt
3.On importe le fichier ci-haut (gwplus) dans la V7 et on sauvegarde avec cette V7 :
encoding: utf-8
gwplus
fam AAAA Père 0 1997 + AAAA Mère 0 1996
fevt
#marr
end fevt
beg
- h Fils 0 1995
- f Fille 0 2000
- f Cadette
end
pevt AAAA Fils
#deat 1995
end pevt
pevt AAAA Fille
#deat 2000
end pevt
pevt AAAA Mère
#deat 1996
end pevt
pevt AAAA Père
#deat 1997
end pevt
fam AAAA Fils + BBBB Fils
fevt
#marr
end fevt
fam BBBB Père 0 1999 + BBBB Mère 0 1998
fevt
#marr
end fevt
beg
- h Fils
- f Fille
- h Fiston
end
pevt BBBB Mère
#deat 1998
end pevt
pevt BBBB Père
#deat 1999
end pevt
fam AAAA Fille + #nm BBBB Fille
fevt
#nmar
end fevt
fam BBBB Fiston + #noment AAAA Cadette
fevt
#nmen
end fevt
4.Pour tester mon hypothèse, j'ai produit ces modifications manuellement avec un éditeur de texte (préfixe de type de décès ajoutés aussi dans les pevt) et ces préfixes sont importés sans problème par gwc!
[...]
pevt AAAA Mère
#deat s1996
end pevt
pevt AAAA Père
#deat e1997
end pevt
[...]
pevt BBBB Mère
#deat m1998
end pevt
pevt BBBB Père
#deat k1999
end pevt
[...]
Commentaire pertinent de 304100:
http://www.geneanet.org/forum/?topic=531041.msg1050502#msg1050502
304100: Pour la gestion de la raison du décès, il ne semble pas que ce soit une simple gestion de format de fichier .gw. En effet, sauf avis contraire, avec le template default, sur une fiche où il est indiqué tué, vous perdez l'information 'tué' au moment de valider le formulaire "modifier personne". Il n'y a donc pas que gwc d'impacté par ce problème. C'est pourquoi j'ai placé le code "death_reason" en commentaire dans updind.txt pour éviter de renseigner un champ qui s'efface automatiquement.
GuillaumeBrochu:
En fait, est-ce parce que le template par défaut ne récupère pas l'information sur le type de décès (https://github.com/geneanet/geneweb/issues/370) pour la proposer à l'usager (via m=MOD_IND et updateInd.ml) que celle-ci est perdue lors de la sauvegarde, ou est-ce parce que la fonction updateIndOk.ml (m=MOD_IND_OK) est aussi brisée pour le type de décès? Bref, serait-il possible avec un template modifié de transférer avec succès le type de décès dans la requête m=MOD_IND_OK d'une quelconque façon?
Bien vu. voici une autre base de test pour ceux qui n'auraient pas compris.
base 700.gw : pas bon:
encoding: utf-8
gwplus
fam PATRONYME Père 0 + #nsckm m? #mp union_homosexuelle MAMAN Mère 0
fevt
#marr #p union_homosexuelle
end fevt
beg
- h Tué 0 k2000
- h Assassiné 0 m2000
- h Exécuté 0 e2000
- h Disparu 0 s2000
- h Non_précisé 0 0
- h Vivant
- h Ne_sais_pas
- h Décédé 0 2000
- h Mort_jeune 0 mj
- h Certainement_décédé 0 od
end
pevt PATRONYME Tué
#deat 2000
end pevt
pevt PATRONYME Assassiné
#deat 2000
end pevt
pevt PATRONYME Exécuté
#deat 2000
end pevt
pevt PATRONYME Disparu
#deat 2000
end pevt
pevt PATRONYME Non_précisé
#deat
end pevt
pevt PATRONYME Décédé
#deat 2000
end pevt
pevt PATRONYME Mort_jeune
#deat
end pevt
pevt PATRONYME Certainement_décédé
#deat
end pevt
Même base corrigéé manuellement: bon:
encoding: utf-8
gwplus
fam PATRONYME Père 0 + #nsckm m? #mp union_homosexuelle MAMAN Mère 0
fevt
#marr #p union_homosexuelle
end fevt
beg
- h Tué 0 k2000
- h Assassiné 0 m2000
- h Exécuté 0 e2000
- h Disparu 0 s2000
- h Non_précisé 0 0
- h Vivant
- h Ne_sais_pas
- h Décédé 0 2000
- h Mort_jeune 0 mj
- h Certainement_décédé 0 od
end
pevt PATRONYME Tué
#deat 0 k2000
end pevt
pevt PATRONYME Assassiné
#deat 0 m2000
end pevt
pevt PATRONYME Exécuté
#deat 0 e2000
end pevt
pevt PATRONYME Disparu
#deat 0 s2000
end pevt
pevt PATRONYME Non_précisé
#deat 0 0
end pevt
pevt PATRONYME Décédé
#deat 0 2000
end pevt
pevt PATRONYME Mort_jeune
#deat 0 mj
end pevt
pevt PATRONYME Certainement_décédé
#deat 0 od
end pevt
Donc, il fa falloir que je modifie templm en prévision du retour de K2000 ;)
À mon avis, les bugs reliés aux différents #nsckX sont les plus critiques à court terme. Actuellement, il est impossible de sauvegarder / restaurer une base contenant des unions homosexuelles via un fichier .gw avec le format gwplus. Les #nsckX se perdent à la lecture d'un .gw gwplus avec gwc, et après un autre cycle ->gwu->gwc on obtient une erreur avec gwc.
Et tant qu'une décision "éditoriale" sur la redondance entre les informations de base des personnes et les pevt/fevt ne sera pas prise (autant dans les .gw que dans la base de données interne), il ne sera pas possible de faire avancer geneweb davantage ...
Et ce n'est pas évident... Dans l'événement décès, il y a un champ additionnel pour des notes (ce qu'il n'y a pas dans l'information des personnes...), mais pas de death_reason comme dans l'information des personnes...
En fait, je ne suis pas certain que ce phénomène qu'on observe avec les modifications manuelles s'explique par un double décodage des dates de décès entre les informations de base des personnes et les pevt, car il n'y a qu'un seul appel de get_optional_deathdate dans gwcomp.ml :
https://github.com/geneweb/geneweb/blob/master/src/gwcomp.ml#L705
Il doit y avoir une autre explication...
Après vérification, j'ai produit le fichier suivant avec un éditeur de texte, où l'information des personnes indique "executé (e)" et "disparu (s)", alors que les pevt indiquent "tué (k)" pour les deux parents, avec des dates de décès incohérentes:
fam AAAA Père 0 e1997 + AAAA Mère 0 s1996
[...]
pevt AAAA Mère
#deat k2006
end pevt
pevt AAAA Père
#deat k2007
end pevt
Conclusion : c'est "executé" et "disparu" dans l'information des personnes qui gagnent, tout comme les dates de décès 1997 et 1996! Et on observe ceci:
File "...bug.gw", line 23:
Error: #deat k2006
File "...bug.gw", line 24:
Error: end pevt
File "...bug.gw", line 27:
Error: #deat k2007
File "...bug.gw", line 28:
Error: end pevt
Bref, gwcomp.ml NE décode PAS le death_reason dans les pevt!! Ce death_rerason ajouté manuellement dans le pevt fait seulement planter le décodage dans gwcomp.ml / get_optional_event_date (https://github.com/geneweb/geneweb/blob/master/src/gwcomp.ml#L1110-L1178), qui, ainsi, laisse la priorité à l'information des personnes.
Par contre:
fam AAAA Père 0 e1997 + AAAA Mère 0 s1996
[...]
pevt AAAA Mère
#deat 2006
end pevt
pevt AAAA Père
#deat 2007
end pevt
efface les death_reasons "exécuté" et "disparu" et donne 2007 et 2006 comme dates de décès. Donc on voit que les pevt sont lus en dernier et c'est ce qui explique pourquoi le death_reason disparaît à la lecture d'un fichier .gw gwplus.
Et par la suite, si je ne trompe pas, c'est probablement ce "Unspecified" hard-coded qui cause ultimement la disparition du death_reason: https://github.com/geneweb/geneweb/blob/master/src/db1link.ml#L1033
Ça ressemble beaucoup à ce bug (https://github.com/geneanet/geneweb/issues/370#issuecomment-172328698) dans updateIndOk.ml, qui a le même effet mais lors de la mise à jour d'une personne avec un template et non lors de la création de la base avec gwc.
En fait, si quelqu'un pouvait valider ceci, ça serait apprécié.
First step : take a .gw file generated by version 6.08 (not of gwplus format...). I have this :
There is a prefix modifier "e" (for executed, see http://geneweb.tuxfamily.org/wiki/GWformat#Personal_information) before the date of death
Second, using version 7.00 exp, I do this operation : .gw file (V6, not gwplus) -> gwc (V7) -> gwu (V7) -> .gw file (V7, gwplus). Result:
The prefix modifier "e" is there , and we can see "executed" at the top of this person's page with version 7.00 running.
Third, using version 7.00 exp, I do this operation : .gw file (V7, gwplus) -> gwc (V7) -> gwu (V7) -> .gw file (V7, gwplus). Result:
The prefix modifier "e" vanished in this last operation...
I have not check for other prefixes ("k","m","s")
I'm using geneweb/geneweb/master at this commit : https://github.com/geneweb/geneweb/commit/d6bec129e9cad750c9e25e21fc0f9e1d56cf147f. If I use gwu from geneweb/geneweb/api (two commits ahead, see https://github.com/geneanet/geneweb/issues/359#issuecomment-168522155), the result is the same, so these two additionnal commits do not seem to have an impact.