Artifact c9e33dfffe235bd9c5f4d804038f59ec40cf8e64:
- File launch.scm — part of check-in [ae6dbecf17] at 2011-05-01 23:05:22 on branch trunk — Importing 1.0.1 version of megatest, (nb// work in progress, please wait for next release) (user: matt size: 6780)
0000: 0a 3b 3b 20 43 6f 70 79 72 69 67 68 74 20 32 30 .;; Copyright 20 0010: 30 36 2d 32 30 31 31 2c 20 4d 61 74 74 68 65 77 06-2011, Matthew 0020: 20 57 65 6c 6c 61 6e 64 2e 0a 3b 3b 20 0a 3b 3b Welland..;; .;; 0030: 20 20 54 68 69 73 20 70 72 6f 67 72 61 6d 20 69 This program i 0040: 73 20 6d 61 64 65 20 61 76 61 69 6c 61 62 6c 65 s made available 0050: 20 75 6e 64 65 72 20 74 68 65 20 47 4e 55 20 47 under the GNU G 0060: 50 4c 20 76 65 72 73 69 6f 6e 20 32 2e 30 20 6f PL version 2.0 o 0070: 72 0a 3b 3b 20 20 67 72 65 61 74 65 72 2e 20 53 r.;; greater. S 0080: 65 65 20 74 68 65 20 61 63 63 6f 6d 70 61 6e 79 ee the accompany 0090: 69 6e 67 20 66 69 6c 65 20 43 4f 50 59 49 4e 47 ing file COPYING 00a0: 20 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 3b 3b for details..;; 00b0: 20 0a 3b 3b 20 20 54 68 69 73 20 70 72 6f 67 72 .;; This progr 00c0: 61 6d 20 69 73 20 64 69 73 74 72 69 62 75 74 65 am is distribute 00d0: 64 20 57 49 54 48 4f 55 54 20 41 4e 59 20 57 41 d WITHOUT ANY WA 00e0: 52 52 41 4e 54 59 3b 20 77 69 74 68 6f 75 74 20 RRANTY; without 00f0: 65 76 65 6e 20 74 68 65 0a 3b 3b 20 20 69 6d 70 even the.;; imp 0100: 6c 69 65 64 20 77 61 72 72 61 6e 74 79 20 6f 66 lied warranty of 0110: 20 4d 45 52 43 48 41 4e 54 41 42 49 4c 49 54 59 MERCHANTABILITY 0120: 20 6f 72 20 46 49 54 4e 45 53 53 20 46 4f 52 20 or FITNESS FOR 0130: 41 20 50 41 52 54 49 43 55 4c 41 52 0a 3b 3b 20 A PARTICULAR.;; 0140: 20 50 55 52 50 4f 53 45 2e 0a 0a 3b 3b 3d 3d 3d PURPOSE...;;=== 0150: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0160: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0170: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0180: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0190: 3d 3d 3d 0a 3b 3b 20 6c 61 75 6e 63 68 20 61 20 ===.;; launch a 01a0: 74 61 73 6b 20 2d 20 74 68 69 73 20 72 75 6e 73 task - this runs 01b0: 20 6f 6e 20 74 68 65 20 6f 72 69 67 69 6e 61 74 on the originat 01c0: 69 6e 67 20 68 6f 73 74 2c 20 74 65 73 74 73 20 ing host, tests 01d0: 74 68 65 6d 73 65 6c 76 65 73 0a 3b 3b 0a 3b 3b themselves.;;.;; 01e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 01f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0200: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0210: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================ 0220: 3d 3d 3d 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 ======..(define 0230: 28 73 65 74 75 70 2d 66 6f 72 2d 72 75 6e 29 0a (setup-for-run). 0240: 20 20 28 73 65 74 21 20 2a 63 6f 6e 66 69 67 69 (set! *configi 0250: 6e 66 6f 2a 20 28 66 69 6e 64 2d 61 6e 64 2d 72 nfo* (find-and-r 0260: 65 61 64 2d 63 6f 6e 66 69 67 20 28 69 66 20 28 ead-config (if ( 0270: 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 63 args:get-arg "-c 0280: 6f 6e 66 69 67 22 29 28 61 72 67 73 3a 67 65 74 onfig")(args:get 0290: 2d 61 72 67 20 22 2d 63 6f 6e 66 69 67 22 29 20 -arg "-config") 02a0: 22 6d 65 67 61 74 65 73 74 2e 63 6f 6e 66 69 67 "megatest.config 02b0: 22 29 29 29 0a 20 20 28 73 65 74 21 20 2a 63 6f "))). (set! *co 02c0: 6e 66 69 67 64 61 74 2a 20 20 28 69 66 20 28 63 nfigdat* (if (c 02d0: 61 72 20 2a 63 6f 6e 66 69 67 69 6e 66 6f 2a 29 ar *configinfo*) 02e0: 28 63 61 72 20 2a 63 6f 6e 66 69 67 69 6e 66 6f (car *configinfo 02f0: 2a 29 20 23 66 29 29 0a 20 20 28 73 65 74 21 20 *) #f)). (set! 0300: 2a 74 6f 70 70 61 74 68 2a 20 20 20 20 28 69 66 *toppath* (if 0310: 20 28 63 61 72 20 2a 63 6f 6e 66 69 67 69 6e 66 (car *configinf 0320: 6f 2a 29 28 63 61 64 72 20 2a 63 6f 6e 66 69 67 o*)(cadr *config 0330: 69 6e 66 6f 2a 29 20 23 66 29 29 0a 20 20 28 69 info*) #f)). (i 0340: 66 20 2a 74 6f 70 70 61 74 68 2a 0a 20 20 20 20 f *toppath*. 0350: 20 20 28 73 65 74 65 6e 76 20 22 4d 54 5f 52 55 (setenv "MT_RU 0360: 4e 5f 41 52 45 41 5f 48 4f 4d 45 22 20 2a 74 6f N_AREA_HOME" *to 0370: 70 70 61 74 68 2a 29 0a 20 20 20 20 20 20 28 70 ppath*). (p 0380: 72 69 6e 74 20 22 45 52 52 4f 52 3a 20 66 61 69 rint "ERROR: fai 0390: 6c 65 64 20 74 6f 20 66 69 6e 64 20 74 68 65 20 led to find the 03a0: 74 6f 70 20 70 61 74 68 20 74 6f 20 79 6f 75 72 top path to your 03b0: 20 72 75 6e 20 73 65 74 75 70 2e 22 29 29 0a 20 run setup.")). 03c0: 20 2a 74 6f 70 70 61 74 68 2a 29 0a 0a 28 64 65 *toppath*)..(de 03d0: 66 69 6e 65 20 28 73 65 74 75 70 2d 65 6e 76 2d fine (setup-env- 03e0: 64 65 66 61 75 6c 74 73 20 64 62 20 66 6e 61 6d defaults db fnam 03f0: 65 20 72 75 6e 2d 69 64 20 2e 20 61 6c 72 65 61 e run-id . alrea 0400: 64 79 2d 73 65 65 6e 29 0a 20 20 28 6c 65 74 2a dy-seen). (let* 0410: 20 28 28 6b 65 79 73 20 20 20 20 28 67 65 74 2d ((keys (get- 0420: 6b 65 79 73 20 64 62 29 29 0a 09 20 28 6b 65 79 keys db)).. (key 0430: 76 61 6c 73 20 28 67 65 74 2d 6b 65 79 2d 76 61 vals (get-key-va 0440: 6c 73 20 64 62 20 72 75 6e 2d 69 64 29 29 0a 09 ls db run-id)).. 0450: 20 28 74 68 65 6b 65 79 20 20 28 73 74 72 69 6e (thekey (strin 0460: 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20 28 6d g-intersperse (m 0470: 61 70 20 28 6c 61 6d 62 64 61 20 28 78 29 28 69 ap (lambda (x)(i 0480: 66 20 78 20 78 20 22 2d 6e 61 2d 22 29 29 20 6b f x x "-na-")) k 0490: 65 79 76 61 6c 73 29 20 22 2f 22 29 29 0a 09 20 eyvals) "/")).. 04a0: 28 63 6f 6e 66 64 61 74 20 28 72 65 61 64 2d 63 (confdat (read-c 04b0: 6f 6e 66 69 67 20 66 6e 61 6d 65 29 29 0a 09 20 onfig fname)).. 04c0: 28 77 68 61 74 66 6f 75 6e 64 20 28 6d 61 6b 65 (whatfound (make 04d0: 2d 68 61 73 68 2d 74 61 62 6c 65 29 29 0a 09 20 -hash-table)).. 04e0: 28 73 65 63 74 69 6f 6e 73 20 28 6c 69 73 74 20 (sections (list 04f0: 22 64 65 66 61 75 6c 74 22 20 74 68 65 6b 65 79 "default" thekey 0500: 29 29 29 0a 20 20 20 20 3b 3b 20 28 70 72 69 6e ))). ;; (prin 0510: 74 20 22 55 73 69 6e 67 20 6b 65 79 3d 5c 22 22 t "Using key=\"" 0520: 20 74 68 65 6b 65 79 20 22 5c 22 22 29 0a 20 20 thekey "\""). 0530: 20 20 28 66 6f 72 2d 65 61 63 68 20 0a 20 20 20 (for-each . 0540: 20 20 28 6c 61 6d 62 64 61 20 28 73 65 63 74 69 (lambda (secti 0550: 6f 6e 29 0a 20 20 20 20 20 20 20 28 6c 65 74 20 on). (let 0560: 28 28 73 65 63 74 69 6f 6e 2d 64 61 74 20 28 68 ((section-dat (h 0570: 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 ash-table-ref/de 0580: 66 61 75 6c 74 20 63 6f 6e 66 64 61 74 20 73 65 fault confdat se 0590: 63 74 69 6f 6e 20 23 66 29 29 29 0a 09 20 28 69 ction #f))).. (i 05a0: 66 20 73 65 63 74 69 6f 6e 2d 64 61 74 0a 09 20 f section-dat.. 05b0: 20 20 20 20 28 66 6f 72 2d 65 61 63 68 20 0a 09 (for-each .. 05c0: 20 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 65 (lambda (e 05d0: 6e 76 76 61 72 29 0a 09 09 28 68 61 73 68 2d 74 nvvar)...(hash-t 05e0: 61 62 6c 65 2d 73 65 74 21 20 77 68 61 74 66 6f able-set! whatfo 05f0: 75 6e 64 20 73 65 63 74 69 6f 6e 20 28 2b 20 28 und section (+ ( 0600: 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 hash-table-ref/d 0610: 65 66 61 75 6c 74 20 77 68 61 74 66 6f 75 6e 64 efault whatfound 0620: 20 73 65 63 74 69 6f 6e 20 30 29 20 31 29 29 0a section 0) 1)). 0630: 09 09 28 73 65 74 65 6e 76 20 65 6e 76 76 61 72 ..(setenv envvar 0640: 20 28 63 61 64 72 20 28 61 73 73 6f 63 20 65 6e (cadr (assoc en 0650: 76 76 61 72 20 73 65 63 74 69 6f 6e 2d 64 61 74 vvar section-dat 0660: 29 29 29 29 0a 09 20 20 20 20 20 20 28 6d 61 70 )))).. (map 0670: 20 63 61 72 20 73 65 63 74 69 6f 6e 2d 64 61 74 car section-dat 0680: 29 29 29 29 29 0a 20 20 20 20 20 73 65 63 74 69 ))))). secti 0690: 6f 6e 73 29 0a 20 20 20 20 28 69 66 20 28 61 6e ons). (if (an 06a0: 64 20 28 6e 6f 74 20 28 6e 75 6c 6c 3f 20 61 6c d (not (null? al 06b0: 72 65 61 64 79 2d 73 65 65 6e 29 29 0a 09 20 20 ready-seen)).. 06c0: 20 20 20 28 6e 6f 74 20 28 63 61 72 20 61 6c 72 (not (car alr 06d0: 65 61 64 79 2d 73 65 65 6e 29 29 29 0a 09 28 62 eady-seen)))..(b 06e0: 65 67 69 6e 0a 09 20 20 28 70 72 69 6e 74 20 22 egin.. (print " 06f0: 4b 65 79 20 73 65 74 74 69 6e 67 73 20 66 6f 75 Key settings fou 0700: 6e 64 20 69 6e 20 72 75 6e 63 6f 6e 66 69 67 2e nd in runconfig. 0710: 63 6f 6e 66 69 67 3a 22 29 0a 09 20 20 28 66 6f config:").. (fo 0720: 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28 r-each (lambda ( 0730: 66 75 6c 6c 6b 65 79 29 0a 09 09 20 20 20 20 20 fullkey)... 0740: 20 28 66 6f 72 6d 61 74 20 23 74 20 22 7e 32 30 (format #t "~20 0750: 61 20 7e 61 5c 6e 22 20 66 75 6c 6c 6b 65 79 20 a ~a\n" fullkey 0760: 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f (hash-table-ref/ 0770: 64 65 66 61 75 6c 74 20 77 68 61 74 66 6f 75 6e default whatfoun 0780: 64 20 66 75 6c 6c 6b 65 79 20 30 29 29 29 0a 09 d fullkey 0))).. 0790: 09 20 20 20 20 73 65 63 74 69 6f 6e 73 29 0a 09 . sections).. 07a0: 20 20 28 70 72 69 6e 74 20 22 2d 2d 2d 22 29 0a (print "---"). 07b0: 09 20 20 28 73 65 74 21 20 2a 61 6c 72 65 61 64 . (set! *alread 07c0: 79 2d 73 65 65 6e 2d 72 75 6e 63 6f 6e 66 69 67 y-seen-runconfig 07d0: 2d 69 6e 66 6f 2a 20 23 74 29 29 29 29 29 0a 0a -info* #t))))).. 07e0: 28 64 65 66 69 6e 65 20 28 67 65 74 2d 62 65 73 (define (get-bes 07f0: 74 2d 64 69 73 6b 20 63 6f 6e 66 64 61 74 29 0a t-disk confdat). 0800: 20 20 28 6c 65 74 2a 20 28 28 64 69 73 6b 73 20 (let* ((disks 0810: 20 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72 (hash-table-r 0820: 65 66 2f 64 65 66 61 75 6c 74 20 63 6f 6e 66 64 ef/default confd 0830: 61 74 20 22 64 69 73 6b 73 22 20 23 66 29 29 0a at "disks" #f)). 0840: 09 20 28 62 65 73 74 20 20 20 20 20 23 66 29 0a . (best #f). 0850: 09 20 28 62 65 73 74 73 69 7a 65 20 30 29 29 0a . (bestsize 0)). 0860: 20 20 20 20 28 69 66 20 64 69 73 6b 73 20 0a 09 (if disks .. 0870: 28 66 6f 72 2d 65 61 63 68 20 0a 09 20 28 6c 61 (for-each .. (la 0880: 6d 62 64 61 20 28 64 69 73 6b 2d 6e 75 6d 29 0a mbda (disk-num). 0890: 09 20 20 20 28 6c 65 74 2a 20 28 28 64 69 72 70 . (let* ((dirp 08a0: 61 74 68 20 20 20 20 28 63 61 64 72 20 28 61 73 ath (cadr (as 08b0: 73 6f 63 20 64 69 73 6b 2d 6e 75 6d 20 64 69 73 soc disk-num dis 08c0: 6b 73 29 29 29 0a 09 09 20 20 28 66 72 65 65 73 ks)))... (frees 08d0: 70 63 20 20 20 20 28 69 66 20 28 64 69 72 65 63 pc (if (direc 08e0: 74 6f 72 79 3f 20 64 69 72 70 61 74 68 29 0a 09 tory? dirpath).. 08f0: 09 09 09 20 20 28 67 65 74 2d 64 66 20 64 69 72 ... (get-df dir 0900: 70 61 74 68 29 0a 09 09 09 09 20 20 28 62 65 67 path)..... (beg 0910: 69 6e 0a 09 09 09 09 20 20 20 20 28 70 72 69 6e in..... (prin 0920: 74 20 22 57 41 52 4e 49 4e 47 3a 20 70 61 74 68 t "WARNING: path 0930: 20 22 20 64 69 72 70 61 74 68 20 22 20 69 6e 20 " dirpath " in 0940: 5b 64 69 73 6b 73 5d 20 73 65 63 74 69 6f 6e 20 [disks] section 0950: 6e 6f 74 20 76 61 6c 69 64 22 29 0a 09 09 09 09 not valid")..... 0960: 20 20 20 20 30 29 29 29 29 0a 09 20 20 20 20 20 0)))).. 0970: 28 69 66 20 28 3e 20 66 72 65 65 73 70 63 20 62 (if (> freespc b 0980: 65 73 74 73 69 7a 65 29 0a 09 09 20 28 62 65 67 estsize)... (beg 0990: 69 6e 0a 09 09 20 20 20 28 73 65 74 21 20 62 65 in... (set! be 09a0: 73 74 20 20 20 20 20 64 69 72 70 61 74 68 29 0a st dirpath). 09b0: 09 09 20 20 20 28 73 65 74 21 20 62 65 73 74 73 .. (set! bests 09c0: 69 7a 65 20 66 72 65 65 73 70 63 29 29 29 29 29 ize freespc))))) 09d0: 0a 09 20 28 6d 61 70 20 63 61 72 20 64 69 73 6b .. (map car disk 09e0: 73 29 29 29 0a 20 20 20 20 62 65 73 74 29 29 0a s))). best)). 09f0: 0a 28 64 65 66 69 6e 65 20 28 63 72 65 61 74 65 .(define (create 0a00: 2d 77 6f 72 6b 2d 61 72 65 61 20 64 62 20 72 75 -work-area db ru 0a10: 6e 2d 69 64 20 74 65 73 74 2d 70 61 74 68 20 64 n-id test-path d 0a20: 69 73 6b 2d 70 61 74 68 20 74 65 73 74 6e 61 6d isk-path testnam 0a30: 65 20 69 74 65 6d 64 61 74 29 0a 20 20 28 6c 65 e itemdat). (le 0a40: 74 2a 20 28 28 72 75 6e 2d 69 6e 66 6f 20 28 64 t* ((run-info (d 0a50: 62 2d 67 65 74 2d 72 75 6e 2d 69 6e 66 6f 20 64 b-get-run-info d 0a60: 62 20 72 75 6e 2d 69 64 29 29 0a 09 20 28 69 74 b run-id)).. (it 0a70: 65 6d 2d 70 61 74 68 20 28 6c 65 74 20 28 28 69 em-path (let ((i 0a80: 70 20 28 69 74 65 6d 2d 6c 69 73 74 2d 3e 70 61 p (item-list->pa 0a90: 74 68 20 69 74 65 6d 64 61 74 29 29 29 0a 09 09 th itemdat)))... 0aa0: 20 20 20 20 20 20 28 69 66 20 28 65 71 75 61 6c (if (equal 0ab0: 3f 20 69 70 20 22 22 29 20 22 22 20 28 63 6f 6e ? ip "") "" (con 0ac0: 63 20 22 2f 22 20 69 70 29 29 29 29 0a 09 20 28 c "/" ip)))).. ( 0ad0: 72 75 6e 6e 61 6d 65 20 20 28 64 62 2d 67 65 74 runname (db-get 0ae0: 2d 76 61 6c 75 65 2d 62 79 2d 68 65 61 64 65 72 -value-by-header 0af0: 20 28 64 62 3a 67 65 74 2d 72 6f 77 20 72 75 6e (db:get-row run 0b00: 2d 69 6e 66 6f 29 0a 09 09 09 09 09 20 20 20 28 -info)...... ( 0b10: 64 62 3a 67 65 74 2d 68 65 61 64 65 72 20 72 75 db:get-header ru 0b20: 6e 2d 69 6e 66 6f 29 0a 09 09 09 09 09 20 20 20 n-info)...... 0b30: 22 72 75 6e 6e 61 6d 65 22 29 29 0a 09 20 28 6b "runname")).. (k 0b40: 65 79 2d 76 61 6c 73 20 28 67 65 74 2d 6b 65 79 ey-vals (get-key 0b50: 2d 76 61 6c 73 20 64 62 20 72 75 6e 2d 69 64 29 -vals db run-id) 0b60: 29 0a 09 20 28 6b 65 79 2d 73 74 72 20 20 28 73 ).. (key-str (s 0b70: 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 tring-interspers 0b80: 65 20 6b 65 79 2d 76 61 6c 73 20 22 2f 22 29 29 e key-vals "/")) 0b90: 0a 09 20 28 64 66 75 6c 6c 70 20 20 20 28 63 6f .. (dfullp (co 0ba0: 6e 63 20 64 69 73 6b 2d 70 61 74 68 20 22 2f 22 nc disk-path "/" 0bb0: 20 6b 65 79 2d 73 74 72 20 22 2f 22 20 72 75 6e key-str "/" run 0bc0: 6e 61 6d 65 20 22 2f 22 20 74 65 73 74 6e 61 6d name "/" testnam 0bd0: 65 0a 09 09 09 20 69 74 65 6d 2d 70 61 74 68 29 e.... item-path) 0be0: 29 0a 09 20 28 6c 6e 6b 70 61 74 68 20 20 28 63 ).. (lnkpath (c 0bf0: 6f 6e 63 20 2a 74 6f 70 70 61 74 68 2a 20 22 2f onc *toppath* "/ 0c00: 72 75 6e 73 2f 22 20 6b 65 79 2d 73 74 72 20 22 runs/" key-str " 0c10: 2f 22 20 72 75 6e 6e 61 6d 65 20 69 74 65 6d 2d /" runname item- 0c20: 70 61 74 68 29 29 29 0a 20 20 20 20 28 70 72 69 path))). (pri 0c30: 6e 74 20 22 53 65 74 74 69 6e 67 20 75 70 20 74 nt "Setting up t 0c40: 65 73 74 20 72 75 6e 20 61 72 65 61 22 29 0a 20 est run area"). 0c50: 20 20 20 28 70 72 69 6e 74 20 22 20 2d 20 63 72 (print " - cr 0c60: 65 61 74 69 6e 67 20 72 75 6e 20 61 72 65 61 20 eating run area 0c70: 69 6e 20 22 20 64 66 75 6c 6c 70 29 0a 20 20 20 in " dfullp). 0c80: 20 28 73 79 73 74 65 6d 20 20 28 63 6f 6e 63 20 (system (conc 0c90: 22 6d 6b 64 69 72 20 2d 70 20 22 20 64 66 75 6c "mkdir -p " dful 0ca0: 6c 70 29 29 0a 20 20 20 20 28 70 72 69 6e 74 20 lp)). (print 0cb0: 22 20 2d 20 63 72 65 61 74 69 6e 67 20 6c 69 6e " - creating lin 0cc0: 6b 20 66 72 6f 6d 20 22 20 64 66 75 6c 6c 70 20 k from " dfullp 0cd0: 22 2f 22 20 74 65 73 74 6e 61 6d 65 20 22 20 74 "/" testname " t 0ce0: 6f 20 22 20 6c 6e 6b 70 61 74 68 29 0a 20 20 20 o " lnkpath). 0cf0: 20 28 73 79 73 74 65 6d 20 20 28 63 6f 6e 63 20 (system (conc 0d00: 22 6d 6b 64 69 72 20 2d 70 20 22 20 6c 6e 6b 70 "mkdir -p " lnkp 0d10: 61 74 68 29 29 0a 20 20 20 20 28 69 66 20 28 66 ath)). (if (f 0d20: 69 6c 65 2d 65 78 69 73 74 73 3f 20 28 63 6f 6e ile-exists? (con 0d30: 63 20 6c 6e 6b 70 61 74 68 20 22 2f 22 20 74 65 c lnkpath "/" te 0d40: 73 74 6e 61 6d 65 29 29 0a 09 28 73 79 73 74 65 stname))..(syste 0d50: 6d 20 28 63 6f 6e 63 20 22 72 6d 20 2d 66 20 22 m (conc "rm -f " 0d60: 20 6c 6e 6b 70 61 74 68 20 22 2f 22 20 74 65 73 lnkpath "/" tes 0d70: 74 6e 61 6d 65 29 29 29 0a 20 20 20 20 28 73 79 tname))). (sy 0d80: 73 74 65 6d 20 20 28 63 6f 6e 63 20 22 6c 6e 20 stem (conc "ln 0d90: 2d 73 66 20 22 20 64 66 75 6c 6c 70 20 22 20 22 -sf " dfullp " " 0da0: 20 6c 6e 6b 70 61 74 68 20 22 2f 22 20 74 65 73 lnkpath "/" tes 0db0: 74 6e 61 6d 65 29 29 0a 20 20 20 20 28 69 66 20 tname)). (if 0dc0: 28 64 69 72 65 63 74 6f 72 79 3f 20 64 66 75 6c (directory? dful 0dd0: 6c 70 29 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 lp)..(begin.. ( 0de0: 73 79 73 74 65 6d 20 20 28 63 6f 6e 63 20 22 72 system (conc "r 0df0: 73 79 6e 63 20 2d 61 76 20 22 20 74 65 73 74 2d sync -av " test- 0e00: 70 61 74 68 20 22 2f 20 22 20 64 66 75 6c 6c 70 path "/ " dfullp 0e10: 20 22 2f 22 29 29 0a 09 20 20 64 66 75 6c 6c 70 "/")).. dfullp 0e20: 29 0a 09 23 66 29 29 29 0a 0a 3b 3b 20 31 2e 20 )..#f)))..;; 1. 0e30: 6c 6f 6f 6b 20 74 68 6f 75 67 68 20 64 69 73 6b look though disk 0e40: 73 20 6c 69 73 74 20 66 6f 72 20 64 69 73 6b 20 s list for disk 0e50: 77 69 74 68 20 6d 6f 73 74 20 73 70 61 63 65 0a with most space. 0e60: 3b 3b 20 32 2e 20 63 72 65 61 74 65 20 72 75 6e ;; 2. create run 0e70: 20 64 69 72 20 6f 6e 20 64 69 73 6b 2c 20 70 61 dir on disk, pa 0e80: 74 68 20 6e 61 6d 65 20 69 73 20 6d 65 61 6e 69 th name is meani 0e90: 6e 67 66 75 6c 0a 3b 3b 20 33 2e 20 63 72 65 61 ngful.;; 3. crea 0ea0: 74 65 20 6c 69 6e 6b 20 66 72 6f 6d 20 72 75 6e te link from run 0eb0: 20 64 69 72 20 74 6f 20 6d 65 67 61 74 65 73 74 dir to megatest 0ec0: 20 72 75 6e 73 20 61 72 65 61 20 0a 3b 3b 20 34 runs area .;; 4 0ed0: 2e 20 72 65 6d 6f 74 65 6c 79 20 72 75 6e 20 74 . remotely run t 0ee0: 68 65 20 74 65 73 74 20 6f 6e 20 61 6c 6c 6f 63 he test on alloc 0ef0: 61 74 65 64 20 68 6f 73 74 0a 3b 3b 20 20 20 20 ated host.;; 0f00: 2d 20 63 6f 75 6c 64 20 62 65 20 73 73 68 20 74 - could be ssh t 0f10: 6f 20 68 6f 73 74 20 66 72 6f 6d 20 68 6f 73 74 o host from host 0f20: 73 20 74 61 62 6c 65 20 28 75 70 64 61 74 65 20 s table (update 0f30: 72 65 67 75 6c 61 72 6c 79 20 77 69 74 68 20 6c regularly with l 0f40: 6f 61 64 29 0a 3b 3b 20 20 20 20 2d 20 63 6f 75 oad).;; - cou 0f50: 6c 64 20 62 65 20 6e 65 74 62 61 74 63 68 0a 3b ld be netbatch.; 0f60: 3b 20 20 20 20 20 20 28 6c 61 75 6e 63 68 2d 74 ; (launch-t 0f70: 65 73 74 20 64 62 20 28 63 61 64 72 20 73 74 61 est db (cadr sta 0f80: 74 75 73 29 20 74 65 73 74 2d 63 6f 6e 66 29 29 tus) test-conf)) 0f90: 0a 28 64 65 66 69 6e 65 20 28 6c 61 75 6e 63 68 .(define (launch 0fa0: 2d 74 65 73 74 20 64 62 20 72 75 6e 2d 69 64 20 -test db run-id 0fb0: 74 65 73 74 2d 63 6f 6e 66 20 6b 65 79 76 61 6c test-conf keyval 0fc0: 6c 73 74 20 74 65 73 74 2d 6e 61 6d 65 20 74 65 lst test-name te 0fd0: 73 74 2d 70 61 74 68 20 69 74 65 6d 64 61 74 29 st-path itemdat) 0fe0: 0a 20 20 28 6c 65 74 20 28 28 6c 61 75 6e 63 68 . (let ((launch 0ff0: 65 72 20 20 20 28 63 6f 6e 66 69 67 2d 6c 6f 6f er (config-loo 1000: 6b 75 70 20 2a 63 6f 6e 66 69 67 64 61 74 2a 20 kup *configdat* 1010: 22 6a 6f 62 74 6f 6f 6c 73 22 20 20 20 20 20 22 "jobtools" " 1020: 6c 61 75 6e 63 68 65 72 22 29 29 0a 09 28 72 75 launcher"))..(ru 1030: 6e 73 63 72 69 70 74 20 20 28 63 6f 6e 66 69 67 nscript (config 1040: 2d 6c 6f 6f 6b 75 70 20 74 65 73 74 2d 63 6f 6e -lookup test-con 1050: 66 20 20 20 22 73 65 74 75 70 22 20 20 20 20 20 f "setup" 1060: 20 20 20 22 72 75 6e 73 63 72 69 70 74 22 29 29 "runscript")) 1070: 0a 09 28 64 69 73 6b 73 70 61 63 65 20 20 28 63 ..(diskspace (c 1080: 6f 6e 66 69 67 2d 6c 6f 6f 6b 75 70 20 74 65 73 onfig-lookup tes 1090: 74 2d 63 6f 6e 66 20 20 20 22 72 65 71 75 69 72 t-conf "requir 10a0: 65 6d 65 6e 74 73 22 20 22 64 69 73 6b 73 70 61 ements" "diskspa 10b0: 63 65 22 29 29 0a 09 28 6d 65 6d 6f 72 79 20 20 ce"))..(memory 10c0: 20 20 20 28 63 6f 6e 66 69 67 2d 6c 6f 6f 6b 75 (config-looku 10d0: 70 20 74 65 73 74 2d 63 6f 6e 66 20 20 20 22 72 p test-conf "r 10e0: 65 71 75 69 72 65 6d 65 6e 74 73 22 20 22 6d 65 equirements" "me 10f0: 6d 6f 72 79 22 29 29 0a 09 28 68 6f 73 74 73 20 mory"))..(hosts 1100: 20 20 20 20 20 28 63 6f 6e 66 69 67 2d 6c 6f 6f (config-loo 1110: 6b 75 70 20 2a 63 6f 6e 66 69 67 64 61 74 2a 20 kup *configdat* 1120: 22 6a 6f 62 74 6f 6f 6c 73 22 20 20 20 20 20 22 "jobtools" " 1130: 77 6f 72 6b 68 6f 73 74 73 22 29 29 0a 09 28 72 workhosts"))..(r 1140: 65 6d 6f 74 65 2d 6d 65 67 61 74 65 73 74 20 28 emote-megatest ( 1150: 63 6f 6e 66 69 67 2d 6c 6f 6f 6b 75 70 20 2a 63 config-lookup *c 1160: 6f 6e 66 69 67 64 61 74 2a 20 22 73 65 74 75 70 onfigdat* "setup 1170: 22 20 22 65 78 65 63 75 74 61 62 6c 65 22 29 29 " "executable")) 1180: 0a 09 28 6c 6f 63 61 6c 2d 6d 65 67 61 74 65 73 ..(local-megates 1190: 74 20 20 28 63 61 72 20 28 61 72 67 76 29 29 29 t (car (argv))) 11a0: 0a 09 3b 3b 20 28 69 74 65 6d 2d 70 61 74 68 20 ..;; (item-path 11b0: 20 28 69 74 65 6d 2d 6c 69 73 74 2d 3e 70 61 74 (item-list->pat 11c0: 68 20 69 74 65 6d 64 61 74 29 29 20 74 65 73 74 h itemdat)) test 11d0: 2d 70 61 74 68 20 69 73 20 74 68 65 20 66 75 6c -path is the ful 11e0: 6c 20 70 61 74 68 20 69 6e 63 6c 75 64 69 6e 67 l path including 11f0: 20 74 68 65 20 69 74 65 6d 2d 70 61 74 68 0a 09 the item-path.. 1200: 28 77 6f 72 6b 2d 61 72 65 61 20 20 23 66 29 0a (work-area #f). 1210: 09 28 64 69 73 6b 70 61 74 68 20 20 20 23 66 29 .(diskpath #f) 1220: 0a 09 28 63 6d 64 70 61 72 6d 73 20 20 20 23 66 ..(cmdparms #f 1230: 29 0a 09 28 66 75 6c 6c 63 6d 64 20 20 20 20 23 )..(fullcmd # 1240: 66 29 29 3b 3b 20 28 64 65 66 69 6e 65 20 61 20 f));; (define a 1250: 28 77 69 74 68 2d 6f 75 74 70 75 74 2d 74 6f 2d (with-output-to- 1260: 73 74 72 69 6e 67 20 28 6c 61 6d 62 64 61 20 28 string (lambda ( 1270: 29 28 77 72 69 74 65 20 78 29 29 29 29 0a 20 20 )(write x)))). 1280: 20 20 28 69 66 20 68 6f 73 74 73 20 28 73 65 74 (if hosts (set 1290: 21 20 68 6f 73 74 73 20 28 73 74 72 69 6e 67 2d ! hosts (string- 12a0: 73 70 6c 69 74 20 68 6f 73 74 73 29 29 29 0a 20 split hosts))). 12b0: 20 20 20 28 69 66 20 28 6e 6f 74 20 72 65 6d 6f (if (not remo 12c0: 74 65 2d 6d 65 67 61 74 65 73 74 29 28 73 65 74 te-megatest)(set 12d0: 21 20 72 65 6d 6f 74 65 2d 6d 65 67 61 74 65 73 ! remote-megates 12e0: 74 20 22 6d 65 67 61 74 65 73 74 22 29 29 0a 20 t "megatest")). 12f0: 20 20 20 28 69 66 20 6c 61 75 6e 63 68 65 72 20 (if launcher 1300: 28 73 65 74 21 20 6c 61 75 6e 63 68 65 72 20 28 (set! launcher ( 1310: 73 74 72 69 6e 67 2d 73 70 6c 69 74 20 6c 61 75 string-split lau 1320: 6e 63 68 65 72 29 29 29 0a 20 20 20 20 3b 3b 20 ncher))). ;; 1330: 73 65 74 20 75 70 20 74 68 65 20 72 75 6e 20 77 set up the run w 1340: 6f 72 6b 20 61 72 65 61 20 66 6f 72 20 74 68 69 ork area for thi 1350: 73 20 74 65 73 74 0a 20 20 20 20 28 73 65 74 21 s test. (set! 1360: 20 64 69 73 6b 70 61 74 68 20 28 67 65 74 2d 62 diskpath (get-b 1370: 65 73 74 2d 64 69 73 6b 20 2a 63 6f 6e 66 69 67 est-disk *config 1380: 64 61 74 2a 29 29 0a 20 20 20 20 28 69 66 20 64 dat*)). (if d 1390: 69 73 6b 70 61 74 68 0a 09 28 73 65 74 21 20 77 iskpath..(set! w 13a0: 6f 72 6b 2d 61 72 65 61 20 28 63 72 65 61 74 65 ork-area (create 13b0: 2d 77 6f 72 6b 2d 61 72 65 61 20 64 62 20 72 75 -work-area db ru 13c0: 6e 2d 69 64 20 74 65 73 74 2d 70 61 74 68 20 64 n-id test-path d 13d0: 69 73 6b 70 61 74 68 20 74 65 73 74 2d 6e 61 6d iskpath test-nam 13e0: 65 20 69 74 65 6d 64 61 74 29 29 0a 09 28 62 65 e itemdat))..(be 13f0: 67 69 6e 0a 09 20 20 28 73 65 74 21 20 77 6f 72 gin.. (set! wor 1400: 6b 2d 61 72 65 61 20 74 65 73 74 2d 70 61 74 68 k-area test-path 1410: 29 0a 09 20 20 28 70 72 69 6e 74 20 22 57 41 52 ).. (print "WAR 1420: 4e 49 4e 47 3a 20 4e 6f 20 64 69 73 6b 20 77 6f NING: No disk wo 1430: 72 6b 20 61 72 65 61 20 73 70 65 63 69 66 69 65 rk area specifie 1440: 64 20 2d 20 72 75 6e 6e 69 6e 67 20 69 6e 20 74 d - running in t 1450: 68 65 20 74 65 73 74 20 64 69 72 65 63 74 6f 72 he test director 1460: 79 22 29 29 29 0a 20 20 20 20 28 73 65 74 21 20 y"))). (set! 1470: 63 6d 64 70 61 72 6d 73 20 28 62 61 73 65 36 34 cmdparms (base64 1480: 3a 62 61 73 65 36 34 2d 65 6e 63 6f 64 65 20 28 :base64-encode ( 1490: 77 69 74 68 2d 6f 75 74 70 75 74 2d 74 6f 2d 73 with-output-to-s 14a0: 74 72 69 6e 67 0a 09 09 09 09 20 20 20 20 28 6c tring..... (l 14b0: 61 6d 62 64 61 20 28 29 20 3b 3b 20 28 6c 69 73 ambda () ;; (lis 14c0: 74 20 27 68 6f 73 74 73 20 20 20 20 20 68 6f 73 t 'hosts hos 14d0: 74 73 29 0a 09 09 09 09 20 20 20 20 20 20 28 77 ts)..... (w 14e0: 72 69 74 65 20 28 6c 69 73 74 20 28 6c 69 73 74 rite (list (list 14f0: 20 27 74 65 73 74 70 61 74 68 20 20 74 65 73 74 'testpath test 1500: 2d 70 61 74 68 29 0a 09 09 09 09 09 09 20 20 20 -path)....... 1510: 28 6c 69 73 74 20 27 77 6f 72 6b 2d 61 72 65 61 (list 'work-area 1520: 20 77 6f 72 6b 2d 61 72 65 61 29 0a 09 09 09 09 work-area)..... 1530: 09 09 20 20 20 28 6c 69 73 74 20 27 74 65 73 74 .. (list 'test 1540: 2d 6e 61 6d 65 20 74 65 73 74 2d 6e 61 6d 65 29 -name test-name) 1550: 20 0a 09 09 09 09 09 09 20 20 20 28 6c 69 73 74 ....... (list 1560: 20 27 72 75 6e 73 63 72 69 70 74 20 72 75 6e 73 'runscript runs 1570: 63 72 69 70 74 29 20 0a 09 09 09 09 09 09 20 20 cript) ....... 1580: 20 28 6c 69 73 74 20 27 72 75 6e 2d 69 64 20 20 (list 'run-id 1590: 20 20 72 75 6e 2d 69 64 20 20 20 29 0a 09 09 09 run-id ).... 15a0: 09 09 09 20 20 20 28 6c 69 73 74 20 27 69 74 65 ... (list 'ite 15b0: 6d 64 61 74 20 20 20 69 74 65 6d 64 61 74 29 29 mdat itemdat)) 15c0: 29 29 29 29 29 20 3b 3b 20 28 73 74 72 69 6e 67 ))))) ;; (string 15d0: 2d 69 6e 74 65 72 73 70 65 72 73 65 20 6b 65 79 -intersperse key 15e0: 76 61 6c 6c 73 74 20 22 20 22 29 29 29 29 0a 20 vallst " ")))). 15f0: 20 20 20 28 63 68 61 6e 67 65 2d 64 69 72 65 63 (change-direc 1600: 74 6f 72 79 20 77 6f 72 6b 2d 61 72 65 61 29 20 tory work-area) 1610: 3b 3b 20 73 6f 20 74 68 61 74 20 6c 6f 67 20 66 ;; so that log f 1620: 69 6c 65 73 20 66 72 6f 6d 20 74 68 65 20 6c 61 iles from the la 1630: 75 6e 63 68 20 70 72 6f 63 65 73 73 20 64 6f 6e unch process don 1640: 27 74 20 63 6c 75 74 74 65 72 20 74 68 65 20 74 't clutter the t 1650: 65 73 74 20 64 69 72 0a 20 20 20 20 28 63 6f 6e est dir. (con 1660: 64 0a 20 20 20 20 20 28 28 61 6e 64 20 6c 61 75 d. ((and lau 1670: 6e 63 68 65 72 20 68 6f 73 74 73 29 20 3b 3b 20 ncher hosts) ;; 1680: 6d 75 73 74 20 62 65 20 75 73 69 6e 67 20 73 73 must be using ss 1690: 68 20 68 6f 73 74 6e 61 6d 65 0a 20 20 20 20 20 h hostname. 16a0: 20 28 73 65 74 21 20 66 75 6c 6c 63 6d 64 20 28 (set! fullcmd ( 16b0: 61 70 70 65 6e 64 20 6c 61 75 6e 63 68 65 72 20 append launcher 16c0: 28 63 61 72 20 68 6f 73 74 73 29 28 6c 69 73 74 (car hosts)(list 16d0: 20 72 65 6d 6f 74 65 2d 6d 65 67 61 74 65 73 74 remote-megatest 16e0: 20 22 2d 65 78 65 63 75 74 65 22 20 63 6d 64 70 "-execute" cmdp 16f0: 61 72 6d 73 29 29 29 29 0a 20 20 20 20 20 28 6c arms)))). (l 1700: 61 75 6e 63 68 65 72 0a 20 20 20 20 20 20 28 73 auncher. (s 1710: 65 74 21 20 66 75 6c 6c 63 6d 64 20 28 61 70 70 et! fullcmd (app 1720: 65 6e 64 20 6c 61 75 6e 63 68 65 72 20 28 6c 69 end launcher (li 1730: 73 74 20 72 65 6d 6f 74 65 2d 6d 65 67 61 74 65 st remote-megate 1740: 73 74 20 22 2d 65 78 65 63 75 74 65 22 20 63 6d st "-execute" cm 1750: 64 70 61 72 6d 73 29 29 29 29 0a 20 20 20 20 20 dparms)))). 1760: 28 65 6c 73 65 0a 20 20 20 20 20 20 28 73 65 74 (else. (set 1770: 21 20 66 75 6c 6c 63 6d 64 20 28 6c 69 73 74 20 ! fullcmd (list 1780: 72 65 6d 6f 74 65 2d 6d 65 67 61 74 65 73 74 20 remote-megatest 1790: 22 2d 65 78 65 63 75 74 65 22 20 63 6d 64 70 61 "-execute" cmdpa 17a0: 72 6d 73 29 29 29 29 0a 20 20 20 20 28 69 66 20 rms)))). (if 17b0: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d (args:get-arg "- 17c0: 78 74 65 72 6d 22 29 28 73 65 74 21 20 66 75 6c xterm")(set! ful 17d0: 6c 63 6d 64 20 28 61 70 70 65 6e 64 20 66 75 6c lcmd (append ful 17e0: 6c 63 6d 64 20 28 6c 69 73 74 20 22 2d 78 74 65 lcmd (list "-xte 17f0: 72 6d 22 29 29 29 29 0a 20 20 20 20 28 70 72 69 rm")))). (pri 1800: 6e 74 20 22 4c 61 75 6e 63 68 69 6e 67 20 6d 65 nt "Launching me 1810: 67 61 74 65 73 74 20 66 6f 72 20 74 65 73 74 20 gatest for test 1820: 22 20 74 65 73 74 2d 6e 61 6d 65 20 22 20 69 6e " test-name " in 1830: 20 22 20 77 6f 72 6b 2d 61 72 65 61 22 20 2e 2e " work-area" .. 1840: 2e 22 29 0a 20 20 20 20 28 74 65 73 74 2d 73 65 ."). (test-se 1850: 74 2d 73 74 61 74 75 73 21 20 64 62 20 72 75 6e t-status! db run 1860: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20 22 4c -id test-name "L 1870: 41 55 4e 43 48 45 44 22 20 22 6e 2f 61 22 20 69 AUNCHED" "n/a" i 1880: 74 65 6d 64 61 74 29 20 3b 3b 20 28 69 66 20 6c temdat) ;; (if l 1890: 61 75 6e 63 68 2d 72 65 73 75 6c 74 73 20 6c 61 aunch-results la 18a0: 75 6e 63 68 2d 72 65 73 75 6c 74 73 20 22 46 41 unch-results "FA 18b0: 49 4c 45 44 22 29 29 0a 20 20 20 20 3b 3b 20 73 ILED")). ;; s 18c0: 65 74 20 22 70 72 65 2d 6c 61 75 6e 63 68 2d 65 et "pre-launch-e 18d0: 6e 76 2d 76 61 72 73 0a 20 20 20 20 28 6c 65 74 nv-vars. (let 18e0: 2a 20 28 28 70 72 65 76 76 61 6c 73 20 20 20 20 * ((prevvals 18f0: 20 20 20 28 61 6c 69 73 74 2d 3e 65 6e 76 2d 76 (alist->env-v 1900: 61 72 73 0a 09 09 09 20 20 20 20 28 68 61 73 68 ars.... (hash 1910: 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 -table-ref/defau 1920: 6c 74 20 74 65 73 74 2d 63 6f 6e 66 20 22 70 72 lt test-conf "pr 1930: 65 2d 6c 61 75 6e 63 68 2d 65 6e 76 2d 6f 76 65 e-launch-env-ove 1940: 72 72 69 64 65 73 22 20 27 28 29 29 29 29 0a 09 rrides" '()))).. 1950: 20 20 20 28 6c 61 75 6e 63 68 2d 72 65 73 75 6c (launch-resul 1960: 74 73 20 28 61 70 70 6c 79 20 63 6d 64 2d 72 75 ts (apply cmd-ru 1970: 6e 2d 70 72 6f 63 2d 65 61 63 68 2d 6c 69 6e 65 n-proc-each-line 1980: 0a 09 09 09 09 20 20 28 63 61 72 20 66 75 6c 6c ..... (car full 1990: 63 6d 64 29 0a 09 09 09 09 20 20 70 72 69 6e 74 cmd)..... print 19a0: 0a 09 09 09 09 20 20 28 63 64 72 20 66 75 6c 6c ..... (cdr full 19b0: 63 6d 64 29 29 29 29 20 3b 3b 20 20 6c 61 75 6e cmd)))) ;; laun 19c0: 63 68 65 72 20 66 75 6c 6c 63 6d 64 29 29 29 3b cher fullcmd))); 19d0: 3b 20 28 61 70 70 6c 79 20 63 6d 64 2d 72 75 6e ; (apply cmd-run 19e0: 2d 70 72 6f 63 2d 65 61 63 68 2d 6c 69 6e 65 20 -proc-each-line 19f0: 6c 61 75 6e 63 68 65 72 20 70 72 69 6e 74 20 66 launcher print f 1a00: 75 6c 6c 63 6d 64 29 29 29 20 3b 3b 20 28 63 6d ullcmd))) ;; (cm 1a10: 64 2d 72 75 6e 2d 3e 6c 69 73 74 20 66 75 6c 6c d-run->list full 1a20: 63 6d 64 29 29 0a 20 20 20 20 20 20 28 70 72 69 cmd)). (pri 1a30: 6e 74 20 22 4c 61 75 6e 63 68 69 6e 67 20 63 6f nt "Launching co 1a40: 6d 70 6c 65 74 65 64 2c 20 75 70 64 61 74 69 6e mpleted, updatin 1a50: 67 20 64 62 22 29 0a 20 20 20 20 20 20 28 61 6c g db"). (al 1a60: 69 73 74 2d 3e 65 6e 76 2d 76 61 72 73 20 70 72 ist->env-vars pr 1a70: 65 76 76 61 6c 73 29 29 29 29 0a 0a evvals))))..