Artifact ddff02cb0f4415c298c89dc0320aac419cf02e18:
- File runconfig.scm — part of check-in [b71bf64192] at 2011-11-02 18:09:28 on branch envhandling — envvar handling is not reentrant. Need a better solution. Putting this stuff on a branch for now (user: mrwellan size: 1731)
0000: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ;;============== 0010: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0020: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0030: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0040: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 72 65 61 64 ========.;; read 0050: 20 61 20 63 6f 6e 66 69 67 20 66 69 6c 65 2c 20 a config file, 0060: 6c 6f 61 64 69 6e 67 20 6f 6e 6c 79 20 74 68 65 loading only the 0070: 20 73 65 63 74 69 6f 6e 20 70 65 72 74 69 6e 65 section pertine 0080: 6e 74 0a 3b 3b 20 74 6f 20 74 68 69 73 20 72 75 nt.;; to this ru 0090: 6e 20 66 69 65 6c 64 31 76 61 6c 2f 66 69 65 6c n field1val/fiel 00a0: 64 32 76 61 6c 2f 66 69 65 6c 64 33 76 61 6c 20 d2val/field3val 00b0: 2e 2e 2e 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ....;;========== 00c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 00d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 00e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 00f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 28 75 ============..(u 0100: 73 65 20 66 6f 72 6d 61 74 29 0a 0a 28 64 65 63 se format)..(dec 0110: 6c 61 72 65 20 28 75 6e 69 74 20 72 75 6e 63 6f lare (unit runco 0120: 6e 66 69 67 29 29 0a 28 64 65 63 6c 61 72 65 20 nfig)).(declare 0130: 28 75 73 65 73 20 63 6f 6d 6d 6f 6e 29 29 0a 0a (uses common)).. 0140: 28 69 6e 63 6c 75 64 65 20 22 63 6f 6d 6d 6f 6e (include "common 0150: 5f 72 65 63 6f 72 64 73 2e 73 63 6d 22 29 0a 0a _records.scm").. 0160: 28 64 65 66 69 6e 65 20 28 73 65 74 75 70 2d 65 (define (setup-e 0170: 6e 76 2d 64 65 66 61 75 6c 74 73 20 64 62 20 66 nv-defaults db f 0180: 6e 61 6d 65 20 72 75 6e 2d 69 64 20 61 6c 72 65 name run-id alre 0190: 61 64 79 2d 73 65 65 6e 20 23 21 6b 65 79 20 28 ady-seen #!key ( 01a0: 65 6e 76 69 72 6f 6e 2d 70 61 74 74 20 23 66 29 environ-patt #f) 01b0: 29 0a 20 20 28 6c 65 74 2a 20 28 28 6b 65 79 73 ). (let* ((keys 01c0: 20 20 20 20 28 67 65 74 2d 6b 65 79 73 20 64 62 (get-keys db 01d0: 29 29 0a 09 20 28 6b 65 79 76 61 6c 73 20 28 67 )).. (keyvals (g 01e0: 65 74 2d 6b 65 79 2d 76 61 6c 73 20 64 62 20 72 et-key-vals db r 01f0: 75 6e 2d 69 64 29 29 0a 09 20 28 6b 65 79 76 61 un-id)).. (keyva 0200: 6c 0a 09 20 28 74 68 65 6b 65 79 20 20 28 73 74 l.. (thekey (st 0210: 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 ring-intersperse 0220: 20 28 6d 61 70 20 28 6c 61 6d 62 64 61 20 28 78 (map (lambda (x 0230: 29 28 69 66 20 78 20 78 20 22 2d 6e 61 2d 22 29 )(if x x "-na-") 0240: 29 20 6b 65 79 76 61 6c 73 29 20 22 2f 22 29 29 ) keyvals) "/")) 0250: 0a 09 20 28 63 6f 6e 66 64 61 74 20 28 72 65 61 .. (confdat (rea 0260: 64 2d 63 6f 6e 66 69 67 20 66 6e 61 6d 65 20 23 d-config fname # 0270: 66 20 23 66 20 65 6e 76 69 72 6f 6e 2d 70 61 74 f #f environ-pat 0280: 74 3a 20 65 6e 76 69 72 6f 6e 2d 70 61 74 74 29 t: environ-patt) 0290: 29 0a 09 20 28 77 68 61 74 66 6f 75 6e 64 20 28 ).. (whatfound ( 02a0: 6d 61 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 29 make-hash-table) 02b0: 29 0a 09 20 28 73 65 63 74 69 6f 6e 73 20 28 6c ).. (sections (l 02c0: 69 73 74 20 22 64 65 66 61 75 6c 74 22 20 74 68 ist "default" th 02d0: 65 6b 65 79 29 29 29 0a 20 20 20 20 28 64 65 62 ekey))). (deb 02e0: 75 67 3a 70 72 69 6e 74 20 34 20 22 55 73 69 6e ug:print 4 "Usin 02f0: 67 20 6b 65 79 3d 5c 22 22 20 74 68 65 6b 65 79 g key=\"" thekey 0300: 20 22 5c 22 22 29 0a 20 20 20 20 0a 20 20 20 20 "\""). . 0310: 28 66 6f 72 2d 65 61 63 68 20 0a 20 20 20 20 20 (for-each . 0320: 28 6c 61 6d 62 64 61 20 28 73 65 63 74 69 6f 6e (lambda (section 0330: 29 0a 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 ). (let (( 0340: 73 65 63 74 69 6f 6e 2d 64 61 74 20 28 68 61 73 section-dat (has 0350: 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 h-table-ref/defa 0360: 75 6c 74 20 63 6f 6e 66 64 61 74 20 73 65 63 74 ult confdat sect 0370: 69 6f 6e 20 23 66 29 29 29 0a 09 20 28 69 66 20 ion #f))).. (if 0380: 73 65 63 74 69 6f 6e 2d 64 61 74 0a 09 20 20 20 section-dat.. 0390: 20 20 28 66 6f 72 2d 65 61 63 68 20 0a 09 20 20 (for-each .. 03a0: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 65 6e 76 (lambda (env 03b0: 76 61 72 29 0a 09 09 28 68 61 73 68 2d 74 61 62 var)...(hash-tab 03c0: 6c 65 2d 73 65 74 21 20 77 68 61 74 66 6f 75 6e le-set! whatfoun 03d0: 64 20 73 65 63 74 69 6f 6e 20 28 2b 20 28 68 61 d section (+ (ha 03e0: 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 sh-table-ref/def 03f0: 61 75 6c 74 20 77 68 61 74 66 6f 75 6e 64 20 73 ault whatfound s 0400: 65 63 74 69 6f 6e 20 30 29 20 31 29 29 0a 09 09 ection 0) 1))... 0410: 28 73 65 74 65 6e 76 20 65 6e 76 76 61 72 20 28 (setenv envvar ( 0420: 63 61 64 72 20 28 61 73 73 6f 63 20 65 6e 76 76 cadr (assoc envv 0430: 61 72 20 73 65 63 74 69 6f 6e 2d 64 61 74 29 29 ar section-dat)) 0440: 29 29 0a 09 20 20 20 20 20 20 28 6d 61 70 20 63 )).. (map c 0450: 61 72 20 73 65 63 74 69 6f 6e 2d 64 61 74 29 29 ar section-dat)) 0460: 29 29 29 0a 20 20 20 20 20 73 65 63 74 69 6f 6e ))). section 0470: 73 29 0a 20 20 20 20 28 69 66 20 61 6c 72 65 61 s). (if alrea 0480: 64 79 2d 73 65 65 6e 0a 09 28 62 65 67 69 6e 0a dy-seen..(begin. 0490: 09 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 . (debug:print 04a0: 32 20 22 4b 65 79 20 73 65 74 74 69 6e 67 73 20 2 "Key settings 04b0: 66 6f 75 6e 64 20 69 6e 20 72 75 6e 63 6f 6e 66 found in runconf 04c0: 69 67 2e 63 6f 6e 66 69 67 3a 22 29 0a 09 20 20 ig.config:").. 04d0: 28 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 (for-each (lambd 04e0: 61 20 28 66 75 6c 6c 6b 65 79 29 0a 09 09 20 20 a (fullkey)... 04f0: 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 (debug:print 0500: 20 32 20 28 66 6f 72 6d 61 74 20 23 66 20 22 7e 2 (format #f "~ 0510: 32 30 61 20 7e 61 5c 6e 22 20 66 75 6c 6c 6b 65 20a ~a\n" fullke 0520: 79 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 y (hash-table-re 0530: 66 2f 64 65 66 61 75 6c 74 20 77 68 61 74 66 6f f/default whatfo 0540: 75 6e 64 20 66 75 6c 6c 6b 65 79 20 30 29 29 29 und fullkey 0))) 0550: 29 0a 09 09 20 20 20 20 73 65 63 74 69 6f 6e 73 )... sections 0560: 29 0a 09 20 20 28 64 65 62 75 67 3a 70 72 69 6e ).. (debug:prin 0570: 74 20 32 20 22 2d 2d 2d 22 29 0a 09 20 20 28 73 t 2 "---").. (s 0580: 65 74 21 20 2a 61 6c 72 65 61 64 79 2d 73 65 65 et! *already-see 0590: 6e 2d 72 75 6e 63 6f 6e 66 69 67 2d 69 6e 66 6f n-runconfig-info 05a0: 2a 20 23 74 29 29 29 29 29 0a 0a 28 64 65 66 69 * #t)))))..(defi 05b0: 6e 65 20 28 73 65 74 2d 72 75 6e 2d 63 6f 6e 66 ne (set-run-conf 05c0: 69 67 2d 76 61 72 73 20 64 62 20 72 75 6e 2d 69 ig-vars db run-i 05d0: 64 29 0a 20 20 28 6c 65 74 20 28 28 72 75 6e 63 d). (let ((runc 05e0: 6f 6e 66 69 67 66 20 28 63 6f 6e 63 20 20 2a 74 onfigf (conc *t 05f0: 6f 70 70 61 74 68 2a 20 22 2f 72 75 6e 63 6f 6e oppath* "/runcon 0600: 66 69 67 73 2e 63 6f 6e 66 69 67 22 29 29 29 0a figs.config"))). 0610: 20 20 20 20 28 69 66 20 28 66 69 6c 65 2d 65 78 (if (file-ex 0620: 69 73 74 73 3f 20 72 75 6e 63 6f 6e 66 69 67 66 ists? runconfigf 0630: 29 0a 09 28 73 65 74 75 70 2d 65 6e 76 2d 64 65 )..(setup-env-de 0640: 66 61 75 6c 74 73 20 64 62 20 72 75 6e 63 6f 6e faults db runcon 0650: 66 69 67 66 20 72 75 6e 2d 69 64 20 23 66 20 65 figf run-id #f e 0660: 6e 76 69 72 6f 6e 2d 70 61 74 74 3a 20 22 2e 2a nviron-patt: ".* 0670: 22 29 0a 09 28 64 65 62 75 67 3a 70 72 69 6e 74 ")..(debug:print 0680: 20 30 20 22 57 41 52 4e 49 4e 47 3a 20 59 6f 75 0 "WARNING: You 0690: 20 64 6f 20 6e 6f 74 20 68 61 76 65 20 61 20 72 do not have a r 06a0: 75 6e 20 63 6f 6e 66 69 67 20 66 69 6c 65 3a 20 un config file: 06b0: 22 20 72 75 6e 63 6f 6e 66 69 67 66 29 29 29 29 " runconfigf)))) 06c0: 0a 20 20 .