From ab7fc92e23cdf4ee1a8e9670dc7a92136dae48c8 Mon Sep 17 00:00:00 2001 From: Michael Stangl Date: Fri, 10 Jul 2026 21:26:41 +0200 Subject: [PATCH] =?UTF-8?q?Ausgabeverzeichnis=20nur=20=C3=BCber=20Lisp=20V?= =?UTF-8?q?ariable=20festlegen.=20Anscheinend=20speichert=20Bricscad=20Umg?= =?UTF-8?q?ebungen=20=C3=BCber=20die=20Sessions=20hinweg.=20Die=20Ausgaben?= =?UTF-8?q?=20der=20Tests=20landen=20woanders=20als=20der=20generelle=20Ex?= =?UTF-8?q?port?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Lisp/README.md | 15 +++++++++++++++ Lisp/export.lsp | 28 +++++++++++++++++++++++++--- tests/test_export_all.lsp | 34 ++++++++++++++++++++++++++++++++-- 3 files changed, 72 insertions(+), 5 deletions(-) diff --git a/Lisp/README.md b/Lisp/README.md index 3830305..c974be6 100644 --- a/Lisp/README.md +++ b/Lisp/README.md @@ -248,6 +248,21 @@ Der Omniflo-CSV-Export (Bogen/Weiche/Gerade, inkl. Merkmale-Aufbau und Sum-Zeile seit Entfernung von `c:OMNI_EXPORT` ausschließlich über `c:EXPORTCSV` → `lib/export_csv.py` (`build_bogen_merkmale`, `build_weiche_merkmale`, `build_gerade_merkmale`, `build_omni_sum_merkmale`). +**Ausgabeordner:** `c:EXPORTSIVAS`/`c:EXPORTCSV` schreiben immer nach `DXFM_RESULTS`. +`TEST_EXPORT_ALL` (siehe `tests/test_export_all.lsp`) leitet waehrend des Testlaufs stattdessen +nach `DXFM_TESTOUT` um, über die reine Lisp-Sitzungsvariable `*export-test-override*` (wird von +`csv:run-export` zusaetzlich zu `DXFM_RESULTS` abgefragt und danach garantiert wieder auf `nil` +zurueckgesetzt, auch bei einem Fehler, ueber `vl-catch-all-apply`). + +**Wichtig:** Der Umweg über `*export-test-override*` ist bewusst gewaehlt und **kein** +`(setenv "DXFM_RESULTS" ...)`. In BricsCAD/AutoCAD schreibt `(setenv ...)` nicht nur in den +Windows-Prozess, sondern dauerhaft in die Profil-Registry der Anwendung – der Wert überlebt +damit jeden Neustart und jedes `setenv.bat`, bis er erneut per `(setenv)` überschrieben wird. +Ein einziger `(setenv "DXFM_RESULTS" ...)`-Aufruf (z. B. ein frueherer, unvollstaendiger +Testlauf) würde `DXFM_RESULTS` für alle künftigen Sitzungen unwiderruflich auf den Testordner +umbiegen. Falls das bereits passiert ist, hilft nur ein manuelles +`(setenv "DXFM_RESULTS" "")` in BricsCAD, um den Profil-Wert zu korrigieren. + --- ### `tests.lsp` – Testbefehle diff --git a/Lisp/export.lsp b/Lisp/export.lsp index 13f5b32..6cd0f40 100644 --- a/Lisp/export.lsp +++ b/Lisp/export.lsp @@ -41,6 +41,14 @@ ;; Beim Laden des Moduls einmalig einlesen (Lazy-Loading via ssg-ensure "export") (export:load-cfg) +;; --- Test-Override fuer den Ausgabeordner (nur Lisp-Sitzungsspeicher) --- +;; Wird ausschliesslich von TEST_EXPORT_ALL (tests/test_export_all.lsp) +;; waehrend des Testlaufs auf DXFM_TESTOUT gesetzt und danach garantiert +;; wieder auf nil zurueckgesetzt. Bewusst KEIN (setenv "DXFM_RESULTS" ...): +;; (setenv ...) schreibt in BricsCAD dauerhaft in die Profil-Registry und +;; ueberlebt damit jeden Neustart. +(setq *export-test-override* nil) + ;; --- Feste Datei-/Skriptnamen dieses Moduls (keine Config, direkt im Code) --- (setq *export-filenames* @@ -196,7 +204,7 @@ ;; py-name = Python-Skript-Name (z.B. "export_csv.py") ;; csv-name = Ergebnis-CSV-Name (z.B. "export.csv") (defun csv:run-export (label py-name csv-name / ss i ename fh out-pfad - py-skript ergebnis-pfad cmd first-block count) + py-skript ergebnis-pfad cmd first-block count out-dir) ;; Vor dem Export: IDs aller Bloecke sicherstellen und Duplikate korrigieren (princ (strcat "\n[" label "] Pruefe und vergebe IDs...")) (ssg-id-check-all) @@ -215,8 +223,22 @@ (setq count (sslength ss)) (princ (strcat "\n[" label "] " (itoa count) " Bloecke gefunden.")) + ;; Ausgabeordner: DXFM_RESULTS, ausser *export-test-override* ist gesetzt + ;; (nur waehrend TEST_EXPORT_ALL, siehe tests/test_export_all.lsp). + ;; WICHTIG: Hier bewusst KEIN (setenv "DXFM_RESULTS" ...) verwenden! + ;; (setenv ...) schreibt in BricsCAD dauerhaft in die Profil-Registry + ;; und ueberlebt damit jeden Neustart - ein einziger Testlauf wuerde + ;; DXFM_RESULTS fuer alle zukuenftigen Sitzungen unwiderruflich auf den + ;; Testordner umbiegen. *export-test-override* ist eine reine + ;; Lisp-Variable (nur Prozess-/Sitzungsspeicher) und daher sicher. + (setq out-dir (if *export-test-override* + *export-test-override* + (getenv "DXFM_RESULTS"))) + (if (not (vl-file-directory-p out-dir)) (vl-mkdir out-dir)) + (princ (strcat "\n[" label "] Ausgabeordner: " out-dir)) + ;; JSON-Datei zusammenbauen - (setq out-pfad (strcat (getenv "DXFM_RESULTS") "/" + (setq out-pfad (strcat out-dir "/" (export:filename "raw_json_datei"))) (setq fh (open out-pfad "w")) (if (null fh) @@ -244,7 +266,7 @@ (setq py-skript (strcat (getenv "DXFM_LIB") "/" py-name)) (if (findfile py-skript) (progn - (setq ergebnis-pfad (strcat (getenv "DXFM_RESULTS") "/" csv-name)) + (setq ergebnis-pfad (strcat out-dir "/" csv-name)) (setq cmd (strcat "python \"" py-skript "\"" " \"" out-pfad "\"" " \"" (getenv "DXFM_DATA") "\"" diff --git a/tests/test_export_all.lsp b/tests/test_export_all.lsp index a3f2227..ffc77d6 100644 --- a/tests/test_export_all.lsp +++ b/tests/test_export_all.lsp @@ -122,11 +122,41 @@ ;; ============================================================ (defun c:TEST_EXPORT_ALL (/ tests-out-dir dateien datei basis doc csv-name sivas-name csv-pfad sivas-pfad - csv-ok sivas-ok results-list old-filenames) + csv-ok sivas-ok results-list old-filenames + ablauf-fehler) (setq tests-out-dir (strcat (getenv "DXFMAKRO") "/tests/output")) (vl-mkdir tests-out-dir) - (setenv "DXFM_RESULTS" tests-out-dir) + + ;; *export-test-override* (Lisp/export.lsp, csv:run-export) fuer die Dauer + ;; des Testlaufs setzen, damit c:EXPORTCSV/c:EXPORTSIVAS nach tests/output + ;; statt in den normalen Ergebnisordner schreiben. + ;; WICHTIG: Absichtlich KEIN (setenv "DXFM_RESULTS" ...)! In BricsCAD + ;; schreibt (setenv ...) dauerhaft in die Profil-Registry und ueberlebt + ;; damit jeden Neustart - ein einziger Testlauf wuerde DXFM_RESULTS fuer + ;; alle zukuenftigen Sitzungen unwiderruflich auf den Testordner umbiegen. + ;; *export-test-override* ist eine reine Lisp-Variable (nur Prozess-/ + ;; Sitzungsspeicher) und wird per vl-catch-all-apply garantiert wieder + ;; auf nil gesetzt, auch bei einem Fehler/Abbruch im Testlauf. + (setq *export-test-override* tests-out-dir) + + (setq ablauf-fehler (vl-catch-all-apply 'ssg-test-export-all-ablauf + (list tests-out-dir))) + + (setq *export-test-override* nil) + + (if (vl-catch-all-error-p ablauf-fehler) + (princ (strcat "\n[TEST_EXPORT_ALL] FEHLER: " + (vl-catch-all-error-message ablauf-fehler))) + ) + (princ) +) + +;; --- Eigentlicher Ablauf von TEST_EXPORT_ALL, gekapselt fuer vl-catch-all-apply --- +(defun ssg-test-export-all-ablauf (tests-out-dir + / dateien datei basis doc + csv-name sivas-name csv-pfad sivas-pfad + csv-ok sivas-ok results-list old-filenames) (setq dateien (append (vl-directory-files tests-out-dir "*.dxf" 1)