fhem.pl - Patch für Log3

Begonnen von Sidey, 17 Januar 2020, 23:38:06

Vorheriges Thema - Nächstes Thema

Sidey

Hi Rudi,

ich habe festgestellt, dass man einen Crash verursachen kann, wenn man eine coderef auf Log3 legt und diese dann mittels dclone Duplizeren möchte.

Anbei ein Patch, der dieses Problem löst indem
ignoreRegexp wird als Regexobjekt in $defs{global} gespeichert. Das spart außerdem das neu compilieren der Regexp. :)

Mit den Variablen $currlogfile und $logopened hat man das Problem leider weiterhin, wenn man dclone auf $defs{global} anwendet. Die Variablen mittels our zu deklarieren klappt leider nicht.

Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

rudolfkoenig

Koennte man alternativ auf das Duplizieren mittels dclone verzichten?
Vulgo: wozu braucht man das?

Sidey

Hi,

Ich habe keine einfachere Möglichkeit gefunden ein vollständiges Abbild des Definitions hashes inkl. aller darin vorhandenen Unterelemente anzulegen.

Das Duplikat brauche ich für das UnitTest Modul, welches ich entwickelt habe um Module testen zu können.

Da für die Tests oft Änderungen an der Definition erfolgen, möchte ich diese nach Abschluss eines Tests wieder zurück setzen.

Ein Showdown restart ist leider nicht möglich, da beim Starten von Perl angegebene Perlmodule nicht berücksichtigt bleiben.

Ein Rereadcfg überschreibt alle subs und macht einen Covetage Report derzeit unmöglich.

Subprocesse wie sie Fhem vornimmt eignen sich meinen Tests nach leider auch nicht für eine code coverage Analyse.
Mit Forks::super haben da laut GitHub Issue schon Menschen prinzipiell Erfolge erzielen können, aber das schrint mir noch mehr Anpassung zu benötigen.

Kurzum, ich habe viel Probiert, das ist bislang die einzigste Option die bis Dezember akzeptable Resultate ermöglicht hat.

Was gefällt dir an dem Patch denn nicht?


Grüße Sidey

Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

rudolfkoenig

Ich habe jetzt eine Weile getestet, und eingecheckt.

ZitatWas gefällt dir an dem Patch denn nicht?
- anwenden funktioniert nicht: patch: **** malformed patch at line 45: @@ -984,6 +981,7 @@
- es aendert Sachen so nebenbei, was hier nicht beschrieben wurde
- ich habe ein ungutes Gefuehl, wenn im $defs ein neues Typ (Regexp) auftaucht, muss devspec2array, list, save, jsonlist2, xmllist, FHEMWEB testen, und hoffen, dass andere Module nicht umkippen.
- es wird in einem sehr speziellen Fall benoetigt, die Aenderung betrifft aber alle.
- es ist mir immer noch nicht klar, warum man dclone oder ein vollstaendiges Abbild braucht.

Sidey

Zitat von: rudolfkoenig am 18 Januar 2020, 13:27:03
Ich habe jetzt eine Weile getestet, und eingecheckt.
- anwenden funktioniert nicht: patch: **** malformed patch at line 45: @@ -984,6 +981,7 @@

Hmm, glaube da war eine auskommentierte Zeile. Sorry, ich dachte ich hätte den Patch danach noch mal neu gemacht nachdem ich es entfernte.
Danke dass Du es eingecheckt hast.

Zitat von: rudolfkoenig am 18 Januar 2020, 13:27:03
- es aendert Sachen so nebenbei, was hier nicht beschrieben wurde
Meinst Du die Sache mit dem Regexp Object oder die Anpassung auf exists anstelle von defined? Schade, dass der eingereichte Patch so nicht kommentiert werden kann, sonst wäre der Bezug eindeutig.

Zitat von: rudolfkoenig am 18 Januar 2020, 13:27:03
- ich habe ein ungutes Gefuehl, wenn im $defs ein neues Typ (Regexp) auftaucht, muss devspec2array, list, save, jsonlist2, xmllist, FHEMWEB testen, und hoffen, dass andere Module nicht umkippen.
Hatte das aus Effizienzgründen gewählt, damit die Regex nicht bei jedem Aufruf von Log3 neu compiliert werden muss. Da bereits an anderen Stellen auch Objekte abgelegt werden als eher unproblematisch angesehen. Waren deine Tests denn erfolgreich?

Zitat von: rudolfkoenig am 18 Januar 2020, 13:27:03
- es wird in einem sehr speziellen Fall benoetigt, die Aenderung betrifft aber alle.
- es ist mir immer noch nicht klar, warum man dclone oder ein vollstaendiges Abbild braucht.

Ja, der Fall mag speziell sein, das ist richtig. Das Abbild wird benötigt um nach Durchlauf eines Test die Datenbestände wieder auf den Ausgangspunkt bringen zu können, damit die Definition wieder im Ausgangszustand ist.
Insgesamt, ist es aber bestimmt nicht verkehrt wenn der Code mit dclone kompatibel ist. Andere Kopiermethoden hatten leider nicht den gewünschten Erfolg eingebracht.

Grüße Sidey
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem,zigbee2mqtt

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker