Megatest

Hex Artifact Content
Login

Artifact ae5b023e357fe80c6303cf0a4cad1d003d02a4a1:


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 32 2c 20 4d 61 74 74 68 65 77  06-2012, 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 75 73 65 20 72 65 67  ======..(use reg
0230: 65 78 20 72 65 67 65 78 2d 63 61 73 65 20 62 61  ex regex-case ba
0240: 73 65 36 34 20 73 71 6c 69 74 65 33 20 73 72 66  se64 sqlite3 srf
0250: 69 2d 31 38 29 0a 28 69 6d 70 6f 72 74 20 28 70  i-18).(import (p
0260: 72 65 66 69 78 20 62 61 73 65 36 34 20 62 61 73  refix base64 bas
0270: 65 36 34 3a 29 29 0a 28 69 6d 70 6f 72 74 20 28  e64:)).(import (
0280: 70 72 65 66 69 78 20 73 71 6c 69 74 65 33 20 73  prefix sqlite3 s
0290: 71 6c 69 74 65 33 3a 29 29 0a 0a 28 64 65 63 6c  qlite3:))..(decl
02a0: 61 72 65 20 28 75 6e 69 74 20 6c 61 75 6e 63 68  are (unit launch
02b0: 29 29 0a 28 64 65 63 6c 61 72 65 20 28 75 73 65  )).(declare (use
02c0: 73 20 63 6f 6d 6d 6f 6e 29 29 0a 28 64 65 63 6c  s common)).(decl
02d0: 61 72 65 20 28 75 73 65 73 20 63 6f 6e 66 69 67  are (uses config
02e0: 66 29 29 0a 28 64 65 63 6c 61 72 65 20 28 75 73  f)).(declare (us
02f0: 65 73 20 64 62 29 29 0a 0a 28 69 6e 63 6c 75 64  es db))..(includ
0300: 65 20 22 63 6f 6d 6d 6f 6e 5f 72 65 63 6f 72 64  e "common_record
0310: 73 2e 73 63 6d 22 29 0a 28 69 6e 63 6c 75 64 65  s.scm").(include
0320: 20 22 6b 65 79 5f 72 65 63 6f 72 64 73 2e 73 63   "key_records.sc
0330: 6d 22 29 0a 28 69 6e 63 6c 75 64 65 20 22 64 62  m").(include "db
0340: 5f 72 65 63 6f 72 64 73 2e 73 63 6d 22 29 0a 0a  _records.scm")..
0350: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ;;==============
0360: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0370: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0380: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
0390: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 65 7a 73 74  ========.;; ezst
03a0: 65 70 73 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  eps.;;==========
03b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
03c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
03d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
03e0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b  ============..;;
03f0: 20 65 7a 73 74 65 70 73 20 77 65 72 65 20 67 6f   ezsteps were go
0400: 69 6e 67 20 74 6f 20 62 65 20 63 6f 64 65 64 20  ing to be coded 
0410: 61 73 0a 3b 3b 20 73 74 65 70 6e 61 6d 65 5b 2c  as.;; stepname[,
0420: 70 72 65 64 73 74 65 70 31 2c 70 72 65 64 73 74  predstep1,predst
0430: 65 70 32 20 2e 2e 2e 5d 20 5b 7b 56 41 52 31 3d  ep2 ...] [{VAR1=
0440: 66 69 72 73 74 2c 73 65 63 6f 6e 64 2c 74 68 69  first,second,thi
0450: 72 64 7d 5d 20 63 6f 6d 6d 61 6e 64 20 74 6f 20  rd}] command to 
0460: 65 78 65 63 75 74 65 0a 3b 3b 20 20 20 42 55 54  execute.;;   BUT
0470: 0a 3b 3b 20 6e 6f 77 20 61 72 65 0a 3b 3b 20 73  .;; now are.;; s
0480: 74 65 70 6e 61 6d 65 20 7b 56 41 52 3d 66 69 72  tepname {VAR=fir
0490: 73 74 2c 73 65 63 6f 6e 64 2c 74 68 69 72 64 20  st,second,third 
04a0: 2e 2e 2e 7d 20 63 6f 6d 6d 61 6e 64 20 2e 2e 2e  ...} command ...
04b0: 0a 3b 3b 20 77 68 65 72 65 20 74 68 65 20 7b 56  .;; where the {V
04c0: 41 52 3d 66 69 72 73 74 2c 73 65 63 6f 6e 64 2c  AR=first,second,
04d0: 74 68 69 72 64 20 2e 2e 2e 7d 20 69 73 20 6f 70  third ...} is op
04e0: 74 69 6f 6e 61 6c 2e 0a 0a 3b 3b 20 67 69 76 65  tional...;; give
04f0: 6e 20 61 6e 20 65 78 69 74 20 63 6f 64 65 20 61  n an exit code a
0500: 6e 64 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  nd whether or no
0510: 74 20 6c 6f 67 70 72 6f 20 77 61 73 20 75 73 65  t logpro was use
0520: 64 20 63 61 6c 63 75 6c 61 74 65 20 4f 4b 2f 42  d calculate OK/B
0530: 41 44 0a 3b 3b 20 72 65 74 75 72 6e 20 23 74 20  AD.;; return #t 
0540: 69 66 20 77 65 20 61 72 65 20 6f 6b 2c 20 23 66  if we are ok, #f
0550: 20 6f 74 68 65 72 77 69 73 65 0a 28 64 65 66 69   otherwise.(defi
0560: 6e 65 20 28 73 74 65 70 72 75 6e 2d 67 6f 6f 64  ne (steprun-good
0570: 3f 20 6c 6f 67 70 72 6f 20 65 78 69 74 63 6f 64  ? logpro exitcod
0580: 65 29 0a 20 20 28 6f 72 20 28 65 71 3f 20 65 78  e).  (or (eq? ex
0590: 69 74 63 6f 64 65 20 30 29 0a 20 20 20 20 20 20  itcode 0).      
05a0: 28 61 6e 64 20 6c 6f 67 70 72 6f 20 28 65 71 3f  (and logpro (eq?
05b0: 20 65 78 69 74 63 6f 64 65 20 32 29 29 29 29 0a   exitcode 2)))).
05c0: 0a 3b 3b 20 69 66 20 68 61 6e 64 65 64 20 61 20  .;; if handed a 
05d0: 73 74 72 69 6e 67 2c 20 70 72 6f 63 65 73 73 20  string, process 
05e0: 69 74 2c 20 65 6c 73 65 20 6c 6f 6f 6b 20 66 6f  it, else look fo
05f0: 72 20 4d 54 5f 43 4d 44 49 4e 46 4f 0a 28 64 65  r MT_CMDINFO.(de
0600: 66 69 6e 65 20 28 6c 61 75 6e 63 68 3a 67 65 74  fine (launch:get
0610: 2d 63 6d 64 69 6e 66 6f 2d 61 73 73 6f 63 2d 6c  -cmdinfo-assoc-l
0620: 69 73 74 20 23 21 6b 65 79 20 28 65 6e 63 6f 64  ist #!key (encod
0630: 65 64 2d 63 6d 64 20 23 66 29 29 0a 20 20 28 6c  ed-cmd #f)).  (l
0640: 65 74 20 28 28 65 6e 63 63 6d 64 20 28 69 66 20  et ((enccmd (if 
0650: 65 6e 63 6f 64 65 64 2d 63 6d 64 20 65 6e 63 6f  encoded-cmd enco
0660: 64 65 64 2d 63 6d 64 20 28 67 65 74 65 6e 76 20  ded-cmd (getenv 
0670: 22 4d 54 5f 43 4d 44 49 4e 46 4f 22 29 29 29 29  "MT_CMDINFO"))))
0680: 0a 20 20 20 20 28 69 66 20 65 6e 63 63 64 6d 0a  .    (if enccdm.
0690: 09 28 72 65 61 64 20 28 6f 70 65 6e 2d 69 6e 70  .(read (open-inp
06a0: 75 74 2d 73 74 72 69 6e 67 20 28 62 61 73 65 36  ut-string (base6
06b0: 34 3a 62 61 73 65 36 34 2d 64 65 63 6f 64 65 20  4:base64-decode 
06c0: 65 6e 63 63 6d 64 29 29 29 0a 09 27 28 29 29 29  enccmd)))..'()))
06d0: 29 0a 0a 28 64 65 66 69 6e 65 20 28 6c 61 75 6e  )..(define (laun
06e0: 63 68 3a 65 78 65 63 75 74 65 20 65 6e 63 6f 64  ch:execute encod
06f0: 65 64 2d 63 6d 64 29 0a 20 20 28 6c 65 74 2a 20  ed-cmd).  (let* 
0700: 28 28 63 6d 64 69 6e 66 6f 20 20 20 28 72 65 61  ((cmdinfo   (rea
0710: 64 20 28 6f 70 65 6e 2d 69 6e 70 75 74 2d 73 74  d (open-input-st
0720: 72 69 6e 67 20 28 62 61 73 65 36 34 3a 62 61 73  ring (base64:bas
0730: 65 36 34 2d 64 65 63 6f 64 65 20 65 6e 63 6f 64  e64-decode encod
0740: 65 64 2d 63 6d 64 29 29 29 29 29 0a 20 20 20 20  ed-cmd))))).    
0750: 28 73 65 74 65 6e 76 20 22 4d 54 5f 43 4d 44 49  (setenv "MT_CMDI
0760: 4e 46 4f 22 20 65 6e 63 6f 64 65 64 2d 63 6d 64  NFO" encoded-cmd
0770: 29 0a 20 20 20 20 28 69 66 20 28 6c 69 73 74 3f  ).    (if (list?
0780: 20 63 6d 64 69 6e 66 6f 29 20 3b 3b 20 28 28 74   cmdinfo) ;; ((t
0790: 65 73 74 70 61 74 68 20 2f 74 6d 70 2f 6d 72 77  estpath /tmp/mrw
07a0: 65 6c 6c 61 6e 2f 6a 61 7a 7a 6d 69 6e 64 2f 73  ellan/jazzmind/s
07b0: 72 63 2f 65 78 61 6d 70 6c 65 5f 72 75 6e 2f 74  rc/example_run/t
07c0: 65 73 74 73 2f 73 71 6c 69 74 65 73 70 65 65 64  ests/sqlitespeed
07d0: 29 0a 09 3b 3b 20 28 74 65 73 74 2d 6e 61 6d 65  )..;; (test-name
07e0: 20 73 71 6c 69 74 65 73 70 65 65 64 29 20 28 72   sqlitespeed) (r
07f0: 75 6e 73 63 72 69 70 74 20 72 75 6e 73 63 72 69  unscript runscri
0800: 70 74 2e 72 62 29 20 28 64 62 2d 68 6f 73 74 20  pt.rb) (db-host 
0810: 6c 6f 63 61 6c 68 6f 73 74 29 20 28 72 75 6e 2d  localhost) (run-
0820: 69 64 20 31 29 29 0a 09 28 6c 65 74 2a 20 28 28  id 1))..(let* ((
0830: 74 65 73 74 70 61 74 68 20 20 28 61 73 73 6f 63  testpath  (assoc
0840: 2f 64 65 66 61 75 6c 74 20 27 74 65 73 74 70 61  /default 'testpa
0850: 74 68 20 20 63 6d 64 69 6e 66 6f 29 29 20 20 3b  th  cmdinfo))  ;
0860: 3b 20 48 6f 77 20 69 73 20 74 65 73 74 70 61 74  ; How is testpat
0870: 68 20 64 69 66 66 65 72 65 6e 74 20 66 72 6f 6d  h different from
0880: 20 77 6f 72 6b 2d 61 72 65 61 20 3f 3f 0a 09 20   work-area ??.. 
0890: 20 20 20 20 20 20 28 74 6f 70 2d 70 61 74 68 20        (top-path 
08a0: 20 28 61 73 73 6f 63 2f 64 65 66 61 75 6c 74 20   (assoc/default 
08b0: 27 74 6f 70 70 61 74 68 20 20 20 63 6d 64 69 6e  'toppath   cmdin
08c0: 66 6f 29 29 0a 09 20 20 20 20 20 20 20 28 77 6f  fo))..       (wo
08d0: 72 6b 2d 61 72 65 61 20 28 61 73 73 6f 63 2f 64  rk-area (assoc/d
08e0: 65 66 61 75 6c 74 20 27 77 6f 72 6b 2d 61 72 65  efault 'work-are
08f0: 61 20 63 6d 64 69 6e 66 6f 29 29 0a 09 20 20 20  a cmdinfo))..   
0900: 20 20 20 20 28 74 65 73 74 2d 6e 61 6d 65 20 28      (test-name (
0910: 61 73 73 6f 63 2f 64 65 66 61 75 6c 74 20 27 74  assoc/default 't
0920: 65 73 74 2d 6e 61 6d 65 20 63 6d 64 69 6e 66 6f  est-name cmdinfo
0930: 29 29 0a 09 20 20 20 20 20 20 20 28 72 75 6e 73  ))..       (runs
0940: 63 72 69 70 74 20 28 61 73 73 6f 63 2f 64 65 66  cript (assoc/def
0950: 61 75 6c 74 20 27 72 75 6e 73 63 72 69 70 74 20  ault 'runscript 
0960: 63 6d 64 69 6e 66 6f 29 29 0a 09 20 20 20 20 20  cmdinfo))..     
0970: 20 20 28 65 7a 73 74 65 70 73 20 20 20 28 61 73    (ezsteps   (as
0980: 73 6f 63 2f 64 65 66 61 75 6c 74 20 27 65 7a 73  soc/default 'ezs
0990: 74 65 70 73 20 20 20 63 6d 64 69 6e 66 6f 29 29  teps   cmdinfo))
09a0: 0a 09 20 20 20 20 20 20 20 28 72 75 6e 72 65 6d  ..       (runrem
09b0: 6f 74 65 20 28 61 73 73 6f 63 2f 64 65 66 61 75  ote (assoc/defau
09c0: 6c 74 20 27 72 75 6e 72 65 6d 6f 74 65 20 63 6d  lt 'runremote cm
09d0: 64 69 6e 66 6f 29 29 0a 09 20 20 20 20 20 20 20  dinfo))..       
09e0: 28 74 72 61 6e 73 70 6f 72 74 20 28 61 73 73 6f  (transport (asso
09f0: 63 2f 64 65 66 61 75 6c 74 20 27 74 72 61 6e 73  c/default 'trans
0a00: 70 6f 72 74 20 63 6d 64 69 6e 66 6f 29 29 0a 09  port cmdinfo))..
0a10: 20 20 20 20 20 20 20 28 72 75 6e 2d 69 64 20 20         (run-id  
0a20: 20 20 28 61 73 73 6f 63 2f 64 65 66 61 75 6c 74    (assoc/default
0a30: 20 27 72 75 6e 2d 69 64 20 20 20 20 63 6d 64 69   'run-id    cmdi
0a40: 6e 66 6f 29 29 0a 09 20 20 20 20 20 20 20 28 74  nfo))..       (t
0a50: 65 73 74 2d 69 64 20 20 20 28 61 73 73 6f 63 2f  est-id   (assoc/
0a60: 64 65 66 61 75 6c 74 20 27 74 65 73 74 2d 69 64  default 'test-id
0a70: 20 20 20 63 6d 64 69 6e 66 6f 29 29 0a 09 20 20     cmdinfo))..  
0a80: 20 20 20 20 20 28 74 61 72 67 65 74 20 20 20 20       (target    
0a90: 28 61 73 73 6f 63 2f 64 65 66 61 75 6c 74 20 27  (assoc/default '
0aa0: 74 61 72 67 65 74 20 20 20 20 63 6d 64 69 6e 66  target    cmdinf
0ab0: 6f 29 29 0a 09 20 20 20 20 20 20 20 28 69 74 65  o))..       (ite
0ac0: 6d 64 61 74 20 20 20 28 61 73 73 6f 63 2f 64 65  mdat   (assoc/de
0ad0: 66 61 75 6c 74 20 27 69 74 65 6d 64 61 74 20 20  fault 'itemdat  
0ae0: 20 63 6d 64 69 6e 66 6f 29 29 0a 09 20 20 20 20   cmdinfo))..    
0af0: 20 20 20 28 65 6e 76 2d 6f 76 72 64 20 20 28 61     (env-ovrd  (a
0b00: 73 73 6f 63 2f 64 65 66 61 75 6c 74 20 27 65 6e  ssoc/default 'en
0b10: 76 2d 6f 76 72 64 20 20 63 6d 64 69 6e 66 6f 29  v-ovrd  cmdinfo)
0b20: 29 0a 09 20 20 20 20 20 20 20 28 73 65 74 2d 76  )..       (set-v
0b30: 61 72 73 20 20 28 61 73 73 6f 63 2f 64 65 66 61  ars  (assoc/defa
0b40: 75 6c 74 20 27 73 65 74 2d 76 61 72 73 20 20 63  ult 'set-vars  c
0b50: 6d 64 69 6e 66 6f 29 29 20 3b 3b 20 70 72 65 2d  mdinfo)) ;; pre-
0b60: 6f 76 65 72 72 69 64 65 73 20 66 72 6f 6d 20 2d  overrides from -
0b70: 73 65 74 76 61 72 0a 09 20 20 20 20 20 20 20 28  setvar..       (
0b80: 72 75 6e 6e 61 6d 65 20 20 20 28 61 73 73 6f 63  runname   (assoc
0b90: 2f 64 65 66 61 75 6c 74 20 27 72 75 6e 6e 61 6d  /default 'runnam
0ba0: 65 20 20 20 63 6d 64 69 6e 66 6f 29 29 0a 09 20  e   cmdinfo)).. 
0bb0: 20 20 20 20 20 20 28 6d 65 67 61 74 65 73 74 20        (megatest 
0bc0: 20 28 61 73 73 6f 63 2f 64 65 66 61 75 6c 74 20   (assoc/default 
0bd0: 27 6d 65 67 61 74 65 73 74 20 20 63 6d 64 69 6e  'megatest  cmdin
0be0: 66 6f 29 29 0a 09 20 20 20 20 20 20 20 28 6d 74  fo))..       (mt
0bf0: 2d 62 69 6e 64 69 72 2d 70 61 74 68 20 28 61 73  -bindir-path (as
0c00: 73 6f 63 2f 64 65 66 61 75 6c 74 20 27 6d 74 2d  soc/default 'mt-
0c10: 62 69 6e 64 69 72 2d 70 61 74 68 20 63 6d 64 69  bindir-path cmdi
0c20: 6e 66 6f 29 29 0a 09 20 20 20 20 20 20 20 28 6b  nfo))..       (k
0c30: 65 79 73 20 20 20 20 20 20 23 66 29 0a 09 20 20  eys      #f)..  
0c40: 20 20 20 20 20 28 6b 65 79 76 61 6c 73 20 20 20       (keyvals   
0c50: 23 66 29 0a 09 20 20 20 20 20 20 20 28 66 75 6c  #f)..       (ful
0c60: 6c 72 75 6e 73 63 72 69 70 74 20 28 69 66 20 28  lrunscript (if (
0c70: 6e 6f 74 20 72 75 6e 73 63 72 69 70 74 29 0a 20  not runscript). 
0c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ca0: 20 23 66 0a 20 20 20 20 20 20 20 20 20 20 20 20   #f.            
0cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0cc0: 20 20 20 20 20 20 28 69 66 20 28 73 75 62 73 74        (if (subst
0cd0: 72 69 6e 67 2d 69 6e 64 65 78 20 22 2f 22 20 72  ring-index "/" r
0ce0: 75 6e 73 63 72 69 70 74 29 0a 20 20 20 20 20 20  unscript).      
0cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d10: 72 75 6e 73 63 72 69 70 74 20 3b 3b 20 75 73 65  runscript ;; use
0d20: 20 75 6e 61 64 75 6c 74 65 72 65 64 20 69 66 20   unadultered if 
0d30: 63 6f 6e 74 61 69 6e 73 20 73 6c 61 73 68 65 73  contains slashes
0d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d60: 20 20 20 20 20 20 20 28 6c 65 74 20 28 28 66 75         (let ((fu
0d70: 6c 6c 6e 20 28 63 6f 6e 63 20 74 65 73 74 70 61  lln (conc testpa
0d80: 74 68 20 22 2f 22 20 72 75 6e 73 63 72 69 70 74  th "/" runscript
0d90: 29 29 29 0a 09 20 20 20 20 20 20 20 20 20 20 20  )))..           
0da0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0db0: 20 20 20 20 20 20 20 28 69 66 20 28 61 6e 64 20         (if (and 
0dc0: 28 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 66 75  (file-exists? fu
0dd0: 6c 6c 6e 29 0a 20 20 20 20 20 20 20 20 20 20 20  lln).           
0de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e00: 20 20 20 20 20 20 20 20 28 66 69 6c 65 2d 65 78          (file-ex
0e10: 65 63 75 74 65 2d 61 63 63 65 73 73 3f 20 66 75  ecute-access? fu
0e20: 6c 6c 6e 29 29 0a 20 20 20 20 20 20 20 20 20 20  lln)).          
0e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e50: 20 20 20 20 66 75 6c 6c 6e 0a 20 20 20 20 20 20      fulln.      
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e80: 20 20 20 20 20 20 20 20 72 75 6e 73 63 72 69 70          runscrip
0e90: 74 29 29 29 29 29 20 3b 3b 20 61 73 73 75 6d 65  t))))) ;; assume
0ea0: 20 69 74 20 69 73 20 6f 6e 20 74 68 65 20 70 61   it is on the pa
0eb0: 74 68 0a 09 20 20 20 20 20 20 20 28 72 6f 6c 6c  th..       (roll
0ec0: 75 70 2d 73 74 61 74 75 73 20 30 29 29 0a 09 20  up-status 0)).. 
0ed0: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 32 20   (debug:print 2 
0ee0: 22 45 78 65 63 74 75 69 6e 67 20 22 20 74 65 73  "Exectuing " tes
0ef0: 74 2d 6e 61 6d 65 20 22 20 28 69 64 3a 20 22 20  t-name " (id: " 
0f00: 74 65 73 74 2d 69 64 20 22 29 20 6f 6e 20 22 20  test-id ") on " 
0f10: 28 67 65 74 2d 68 6f 73 74 2d 6e 61 6d 65 29 29  (get-host-name))
0f20: 0a 09 20 20 3b 3b 20 53 65 74 75 70 20 74 68 65  ..  ;; Setup the
0f30: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 67 6c 6f   *runremote* glo
0f40: 62 61 6c 20 76 61 72 0a 09 20 20 28 69 66 20 2a  bal var..  (if *
0f50: 72 75 6e 72 65 6d 6f 74 65 2a 20 28 64 65 62 75  runremote* (debu
0f60: 67 3a 70 72 69 6e 74 20 32 20 22 45 52 52 4f 52  g:print 2 "ERROR
0f70: 3a 20 49 27 6d 20 6e 6f 74 20 65 78 70 65 63 74  : I'm not expect
0f80: 69 6e 67 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20  ing *runremote* 
0f90: 74 6f 20 62 65 20 73 65 74 20 61 74 20 74 68 69  to be set at thi
0fa0: 73 20 74 69 6d 65 22 29 29 0a 09 20 20 28 73 65  s time"))..  (se
0fb0: 74 21 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 72  t! *runremote* r
0fc0: 75 6e 72 65 6d 6f 74 65 29 0a 09 20 20 28 73 65  unremote)..  (se
0fd0: 74 21 20 2a 74 72 61 6e 73 70 6f 72 74 2d 74 79  t! *transport-ty
0fe0: 70 65 2a 20 74 72 61 6e 73 70 6f 72 74 29 0a 09  pe* transport)..
0ff0: 20 20 28 73 65 74 21 20 6b 65 79 73 20 20 20 20    (set! keys    
1000: 20 20 20 28 63 64 62 3a 72 65 6d 6f 74 65 2d 72     (cdb:remote-r
1010: 75 6e 20 64 62 3a 67 65 74 2d 6b 65 79 73 20 23  un db:get-keys #
1020: 66 29 29 0a 09 20 20 28 73 65 74 21 20 6b 65 79  f))..  (set! key
1030: 76 61 6c 73 20 20 20 20 28 69 66 20 72 75 6e 2d  vals    (if run-
1040: 69 64 20 28 63 64 62 3a 72 65 6d 6f 74 65 2d 72  id (cdb:remote-r
1050: 75 6e 20 64 62 3a 67 65 74 2d 6b 65 79 2d 76 61  un db:get-key-va
1060: 6c 73 20 23 66 20 72 75 6e 2d 69 64 29 20 23 66  ls #f run-id) #f
1070: 29 29 0a 09 20 20 3b 3b 20 61 70 70 6c 79 20 70  ))..  ;; apply p
1080: 72 65 2d 6f 76 65 72 72 69 64 65 73 20 62 65 66  re-overrides bef
1090: 6f 72 65 20 6f 74 68 65 72 20 76 61 72 69 61 62  ore other variab
10a0: 6c 65 73 2e 20 54 68 65 20 70 72 65 2d 6f 76 65  les. The pre-ove
10b0: 72 72 69 64 65 20 76 61 72 73 20 6d 75 73 74 20  rride vars must 
10c0: 6e 6f 74 0a 09 20 20 3b 3b 20 63 6c 6f 62 62 65  not..  ;; clobbe
10d0: 72 73 20 74 68 69 6e 67 73 20 66 72 6f 6d 20 74  rs things from t
10e0: 68 65 20 6f 66 66 69 63 69 61 6c 20 73 6f 75 72  he official sour
10f0: 63 65 73 20 73 75 63 68 20 61 73 20 6d 65 67 61  ces such as mega
1100: 74 65 73 74 2e 63 6f 6e 66 69 67 20 61 6e 64 20  test.config and 
1110: 72 75 6e 63 6f 6e 66 69 67 73 2e 63 6f 6e 66 69  runconfigs.confi
1120: 67 0a 09 20 20 28 69 66 20 28 73 74 72 69 6e 67  g..  (if (string
1130: 3f 20 73 65 74 2d 76 61 72 73 29 0a 09 20 20 20  ? set-vars)..   
1140: 20 20 20 28 6c 65 74 20 28 28 76 61 72 70 61 69     (let ((varpai
1150: 72 73 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 74  rs (string-split
1160: 20 73 65 74 2d 76 61 72 73 20 22 2c 22 29 29 29   set-vars ",")))
1170: 0a 09 09 28 64 65 62 75 67 3a 70 72 69 6e 74 20  ...(debug:print 
1180: 34 20 22 76 61 72 70 61 69 72 73 3a 20 22 20 76  4 "varpairs: " v
1190: 61 72 70 61 69 72 73 29 0a 09 09 28 6d 61 70 20  arpairs)...(map 
11a0: 28 6c 61 6d 62 64 61 20 28 76 61 72 70 61 69 72  (lambda (varpair
11b0: 29 0a 09 09 20 20 20 20 20 20 20 28 6c 65 74 20  )...       (let 
11c0: 28 28 76 61 72 76 61 6c 20 28 73 74 72 69 6e 67  ((varval (string
11d0: 2d 73 70 6c 69 74 20 76 61 72 70 61 69 72 20 22  -split varpair "
11e0: 3d 22 29 29 29 0a 09 09 09 20 28 69 66 20 28 65  ="))).... (if (e
11f0: 71 3f 20 28 6c 65 6e 67 74 68 20 76 61 72 76 61  q? (length varva
1200: 6c 29 20 32 29 0a 09 09 09 20 20 20 20 20 28 6c  l) 2)....     (l
1210: 65 74 20 28 28 76 61 72 20 28 63 61 72 20 76 61  et ((var (car va
1220: 72 76 61 6c 29 29 0a 09 09 09 09 20 20 20 28 76  rval)).....   (v
1230: 61 6c 20 28 63 61 64 72 20 76 61 72 76 61 6c 29  al (cadr varval)
1240: 29 29 0a 09 09 09 20 20 20 20 20 20 20 28 64 65  ))....       (de
1250: 62 75 67 3a 70 72 69 6e 74 20 31 20 22 41 64 64  bug:print 1 "Add
1260: 69 6e 67 20 70 72 65 2d 76 61 72 2f 76 61 6c 20  ing pre-var/val 
1270: 22 20 76 61 72 20 22 20 3d 20 22 20 76 61 6c 20  " var " = " val 
1280: 22 20 74 6f 20 74 68 65 20 65 6e 76 69 72 6f 6e  " to the environ
1290: 6d 65 6e 74 22 29 0a 09 09 09 20 20 20 20 20 20  ment")....      
12a0: 20 28 73 65 74 65 6e 76 20 76 61 72 20 76 61 6c   (setenv var val
12b0: 29 29 29 29 29 0a 09 09 20 20 20 20 20 76 61 72  )))))...     var
12c0: 70 61 69 72 73 29 29 29 0a 09 20 20 28 73 65 74  pairs)))..  (set
12d0: 65 6e 76 20 22 4d 54 5f 54 45 53 54 5f 52 55 4e  env "MT_TEST_RUN
12e0: 5f 44 49 52 22 20 77 6f 72 6b 2d 61 72 65 61 29  _DIR" work-area)
12f0: 0a 09 20 20 28 73 65 74 65 6e 76 20 22 4d 54 5f  ..  (setenv "MT_
1300: 54 45 53 54 5f 4e 41 4d 45 22 20 74 65 73 74 2d  TEST_NAME" test-
1310: 6e 61 6d 65 29 0a 09 20 20 28 73 65 74 65 6e 76  name)..  (setenv
1320: 20 22 4d 54 5f 49 54 45 4d 5f 49 4e 46 4f 22 20   "MT_ITEM_INFO" 
1330: 28 63 6f 6e 63 20 69 74 65 6d 64 61 74 29 29 0a  (conc itemdat)).
1340: 09 20 20 28 73 65 74 65 6e 76 20 22 4d 54 5f 52  .  (setenv "MT_R
1350: 55 4e 4e 41 4d 45 22 20 20 20 72 75 6e 6e 61 6d  UNNAME"   runnam
1360: 65 29 0a 09 20 20 28 73 65 74 65 6e 76 20 22 4d  e)..  (setenv "M
1370: 54 5f 4d 45 47 41 54 45 53 54 22 20 20 6d 65 67  T_MEGATEST"  meg
1380: 61 74 65 73 74 29 0a 09 20 20 28 73 65 74 65 6e  atest)..  (seten
1390: 76 20 22 4d 54 5f 54 41 52 47 45 54 22 20 20 20  v "MT_TARGET"   
13a0: 20 74 61 72 67 65 74 29 0a 09 20 20 28 69 66 20   target)..  (if 
13b0: 6d 74 2d 62 69 6e 64 69 72 2d 70 61 74 68 20 28  mt-bindir-path (
13c0: 73 65 74 65 6e 76 20 22 50 41 54 48 22 20 28 63  setenv "PATH" (c
13d0: 6f 6e 63 20 28 67 65 74 65 6e 76 20 22 50 41 54  onc (getenv "PAT
13e0: 48 22 29 20 22 3a 22 20 6d 74 2d 62 69 6e 64 69  H") ":" mt-bindi
13f0: 72 2d 70 61 74 68 29 29 29 0a 09 20 20 28 63 68  r-path)))..  (ch
1400: 61 6e 67 65 2d 64 69 72 65 63 74 6f 72 79 20 74  ange-directory t
1410: 6f 70 2d 70 61 74 68 29 0a 09 20 20 28 69 66 20  op-path)..  (if 
1420: 28 6e 6f 74 20 28 73 65 74 75 70 2d 66 6f 72 2d  (not (setup-for-
1430: 72 75 6e 29 29 0a 09 20 20 20 20 20 20 28 62 65  run))..      (be
1440: 67 69 6e 0a 09 09 28 64 65 62 75 67 3a 70 72 69  gin...(debug:pri
1450: 6e 74 20 30 20 22 46 61 69 6c 65 64 20 74 6f 20  nt 0 "Failed to 
1460: 73 65 74 75 70 2c 20 65 78 69 74 69 6e 67 22 29  setup, exiting")
1470: 20 0a 09 09 3b 3b 20 28 73 71 6c 69 74 65 33 3a   ...;; (sqlite3:
1480: 66 69 6e 61 6c 69 7a 65 21 20 64 62 29 0a 09 09  finalize! db)...
1490: 3b 3b 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61  ;; (sqlite3:fina
14a0: 6c 69 7a 65 21 20 74 64 62 29 0a 09 09 28 65 78  lize! tdb)...(ex
14b0: 69 74 20 31 29 29 29 0a 09 20 20 3b 3b 20 43 61  it 1)))..  ;; Ca
14c0: 6e 20 73 65 74 75 70 20 61 73 20 63 6c 69 65 6e  n setup as clien
14d0: 74 20 66 6f 72 20 73 65 72 76 65 72 20 6d 6f 64  t for server mod
14e0: 65 20 6e 6f 77 0a 09 20 20 28 73 65 72 76 65 72  e now..  (server
14f0: 3a 63 6c 69 65 6e 74 2d 73 65 74 75 70 29 0a 0a  :client-setup)..
1500: 09 20 20 28 63 68 61 6e 67 65 2d 64 69 72 65 63  .  (change-direc
1510: 74 6f 72 79 20 2a 74 6f 70 70 61 74 68 2a 29 20  tory *toppath*) 
1520: 0a 09 20 20 28 73 65 74 2d 6d 65 67 61 74 65 73  ..  (set-megates
1530: 74 2d 65 6e 76 2d 76 61 72 73 20 72 75 6e 2d 69  t-env-vars run-i
1540: 64 29 20 3b 3b 20 74 68 65 73 65 20 6d 61 79 20  d) ;; these may 
1550: 62 65 20 6e 65 65 64 65 64 20 62 79 20 74 68 65  be needed by the
1560: 20 6c 61 75 6e 63 68 69 6e 67 20 70 72 6f 63 65   launching proce
1570: 73 73 0a 09 20 20 28 63 68 61 6e 67 65 2d 64 69  ss..  (change-di
1580: 72 65 63 74 6f 72 79 20 77 6f 72 6b 2d 61 72 65  rectory work-are
1590: 61 29 20 0a 0a 09 20 20 28 6f 70 65 6e 2d 72 75  a) ...  (open-ru
15a0: 6e 2d 63 6c 6f 73 65 20 73 65 74 2d 72 75 6e 2d  n-close set-run-
15b0: 63 6f 6e 66 69 67 2d 76 61 72 73 20 23 66 20 72  config-vars #f r
15c0: 75 6e 2d 69 64 20 6b 65 79 73 20 6b 65 79 76 61  un-id keys keyva
15d0: 6c 73 29 0a 09 20 20 3b 3b 20 65 6e 76 69 72 6f  ls)..  ;; enviro
15e0: 6e 6d 65 6e 74 20 6f 76 65 72 72 69 64 65 73 20  nment overrides 
15f0: 61 72 65 20 64 6f 6e 65 20 2a 62 65 66 6f 72 65  are done *before
1600: 2a 20 74 68 65 20 72 65 6d 61 69 6e 69 6e 67 20  * the remaining 
1610: 63 72 69 74 69 63 61 6c 20 65 6e 76 61 72 73 2e  critical envars.
1620: 0a 09 20 20 28 61 6c 69 73 74 2d 3e 65 6e 76 2d  ..  (alist->env-
1630: 76 61 72 73 20 65 6e 76 2d 6f 76 72 64 29 0a 09  vars env-ovrd)..
1640: 20 20 28 73 65 74 2d 6d 65 67 61 74 65 73 74 2d    (set-megatest-
1650: 65 6e 76 2d 76 61 72 73 20 72 75 6e 2d 69 64 29  env-vars run-id)
1660: 0a 09 20 20 28 73 65 74 2d 69 74 65 6d 2d 65 6e  ..  (set-item-en
1670: 76 2d 76 61 72 73 20 69 74 65 6d 64 61 74 29 0a  v-vars itemdat).
1680: 09 20 20 28 73 61 76 65 2d 65 6e 76 69 72 6f 6e  .  (save-environ
1690: 6d 65 6e 74 2d 61 73 2d 66 69 6c 65 73 20 22 6d  ment-as-files "m
16a0: 65 67 61 74 65 73 74 22 29 0a 09 20 20 28 6f 70  egatest")..  (op
16b0: 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20 74 65 73  en-run-close tes
16c0: 74 2d 73 65 74 2d 6d 65 74 61 2d 69 6e 66 6f 20  t-set-meta-info 
16d0: 23 66 20 74 65 73 74 2d 69 64 20 72 75 6e 2d 69  #f test-id run-i
16e0: 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d  d test-name item
16f0: 64 61 74 20 30 29 0a 09 20 20 28 74 65 73 74 73  dat 0)..  (tests
1700: 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 75 73  :test-set-status
1710: 21 20 74 65 73 74 2d 69 64 20 22 52 45 4d 4f 54  ! test-id "REMOT
1720: 45 48 4f 53 54 53 54 41 52 54 22 20 22 6e 2f 61  EHOSTSTART" "n/a
1730: 22 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20  " (args:get-arg 
1740: 22 2d 6d 22 29 20 23 66 29 0a 09 20 20 28 69 66  "-m") #f)..  (if
1750: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22   (args:get-arg "
1760: 2d 78 74 65 72 6d 22 29 0a 09 20 20 20 20 20 20  -xterm")..      
1770: 28 73 65 74 21 20 66 75 6c 6c 72 75 6e 73 63 72  (set! fullrunscr
1780: 69 70 74 20 22 78 74 65 72 6d 22 29 0a 09 20 20  ipt "xterm")..  
1790: 20 20 20 20 28 69 66 20 28 61 6e 64 20 66 75 6c      (if (and ful
17a0: 6c 72 75 6e 73 63 72 69 70 74 20 28 6e 6f 74 20  lrunscript (not 
17b0: 28 66 69 6c 65 2d 65 78 65 63 75 74 65 2d 61 63  (file-execute-ac
17c0: 63 65 73 73 3f 20 66 75 6c 6c 72 75 6e 73 63 72  cess? fullrunscr
17d0: 69 70 74 29 29 29 0a 09 09 20 20 28 73 79 73 74  ipt)))...  (syst
17e0: 65 6d 20 28 63 6f 6e 63 20 22 63 68 6d 6f 64 20  em (conc "chmod 
17f0: 75 67 2b 78 20 22 20 66 75 6c 6c 72 75 6e 73 63  ug+x " fullrunsc
1800: 72 69 70 74 29 29 29 29 0a 09 20 20 3b 3b 20 57  ript))))..  ;; W
1810: 65 20 61 72 65 20 61 62 6f 75 74 20 74 6f 20 61  e are about to a
1820: 63 74 75 61 6c 6c 79 20 6b 69 63 6b 20 6f 66 66  ctually kick off
1830: 20 74 68 65 20 74 65 73 74 0a 09 20 20 3b 3b 20   the test..  ;; 
1840: 73 6f 20 74 68 69 73 20 69 73 20 61 20 67 6f 6f  so this is a goo
1850: 64 20 70 6c 61 63 65 20 74 6f 20 72 65 6d 6f 76  d place to remov
1860: 65 20 74 68 65 20 72 65 63 6f 72 64 73 20 66 6f  e the records fo
1870: 72 20 0a 09 20 20 3b 3b 20 61 6e 79 20 70 72 65  r ..  ;; any pre
1880: 76 69 6f 75 73 20 72 75 6e 73 0a 09 20 20 3b 3b  vious runs..  ;;
1890: 20 28 64 62 3a 74 65 73 74 2d 72 65 6d 6f 76 65   (db:test-remove
18a0: 2d 73 74 65 70 73 20 64 62 20 72 75 6e 2d 69 64  -steps db run-id
18b0: 20 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 64 61   testname itemda
18c0: 74 29 0a 09 20 20 0a 09 20 20 28 6c 65 74 2a 20  t)..  ..  (let* 
18d0: 28 28 6d 20 20 20 20 20 20 20 20 20 20 20 20 28  ((m            (
18e0: 6d 61 6b 65 2d 6d 75 74 65 78 29 29 0a 09 09 20  make-mutex))... 
18f0: 28 6b 69 6c 6c 2d 6a 6f 62 3f 20 20 20 20 23 66  (kill-job?    #f
1900: 29 0a 09 09 20 28 65 78 69 74 2d 69 6e 66 6f 20  )... (exit-info 
1910: 20 20 20 28 76 65 63 74 6f 72 20 23 74 20 23 74     (vector #t #t
1920: 20 23 74 29 29 0a 09 09 20 28 6a 6f 62 2d 74 68   #t))... (job-th
1930: 72 65 61 64 20 20 20 23 66 29 0a 09 09 20 28 72  read   #f)... (r
1940: 75 6e 69 74 20 20 20 20 20 20 20 20 28 6c 61 6d  unit        (lam
1950: 62 64 61 20 28 29 0a 09 09 09 09 20 3b 3b 20 28  bda ()..... ;; (
1960: 6c 65 74 2d 76 61 6c 75 65 73 0a 09 09 09 09 20  let-values..... 
1970: 3b 3b 20 20 28 28 28 70 69 64 20 65 78 69 74 2d  ;;  (((pid exit-
1980: 73 74 61 74 75 73 20 65 78 69 74 2d 63 6f 64 65  status exit-code
1990: 29 0a 09 09 09 09 20 3b 3b 20 20 20 20 28 72 75  )..... ;;    (ru
19a0: 6e 2d 6e 2d 77 61 69 74 20 66 75 6c 6c 72 75 6e  n-n-wait fullrun
19b0: 73 63 72 69 70 74 29 29 29 0a 09 09 09 09 20 28  script)))..... (
19c0: 74 65 73 74 73 3a 74 65 73 74 2d 73 65 74 2d 73  tests:test-set-s
19d0: 74 61 74 75 73 21 20 74 65 73 74 2d 69 64 20 22  tatus! test-id "
19e0: 52 55 4e 4e 49 4e 47 22 20 22 6e 2f 61 22 20 23  RUNNING" "n/a" #
19f0: 66 20 23 66 29 0a 09 09 09 09 20 3b 3b 20 69 66  f #f)..... ;; if
1a00: 20 74 68 65 72 65 20 69 73 20 61 20 72 75 6e 73   there is a runs
1a10: 63 72 69 70 74 20 64 6f 20 69 74 20 66 69 72 73  cript do it firs
1a20: 74 0a 09 09 09 09 20 28 69 66 20 66 75 6c 6c 72  t..... (if fullr
1a30: 75 6e 73 63 72 69 70 74 0a 09 09 09 09 20 20 20  unscript.....   
1a40: 20 20 28 6c 65 74 20 28 28 70 69 64 20 28 70 72    (let ((pid (pr
1a50: 6f 63 65 73 73 2d 72 75 6e 20 66 75 6c 6c 72 75  ocess-run fullru
1a60: 6e 73 63 72 69 70 74 29 29 29 0a 09 09 09 09 20  nscript)))..... 
1a70: 20 20 20 20 20 20 28 6c 65 74 20 6c 6f 6f 70 20        (let loop 
1a80: 28 28 69 20 30 29 29 0a 09 09 09 09 09 20 28 6c  ((i 0))...... (l
1a90: 65 74 2d 76 61 6c 75 65 73 0a 09 09 09 09 09 20  et-values...... 
1aa0: 20 28 28 28 70 69 64 2d 76 61 6c 20 65 78 69 74   (((pid-val exit
1ab0: 2d 73 74 61 74 75 73 20 65 78 69 74 2d 63 6f 64  -status exit-cod
1ac0: 65 29 20 28 70 72 6f 63 65 73 73 2d 77 61 69 74  e) (process-wait
1ad0: 20 70 69 64 20 23 74 29 29 29 0a 09 09 09 09 09   pid #t)))......
1ae0: 20 20 28 6d 75 74 65 78 2d 6c 6f 63 6b 21 20 6d    (mutex-lock! m
1af0: 29 0a 09 09 09 09 09 20 20 28 76 65 63 74 6f 72  )......  (vector
1b00: 2d 73 65 74 21 20 65 78 69 74 2d 69 6e 66 6f 20  -set! exit-info 
1b10: 30 20 70 69 64 29 0a 09 09 09 09 09 20 20 28 76  0 pid)......  (v
1b20: 65 63 74 6f 72 2d 73 65 74 21 20 65 78 69 74 2d  ector-set! exit-
1b30: 69 6e 66 6f 20 31 20 65 78 69 74 2d 73 74 61 74  info 1 exit-stat
1b40: 75 73 29 0a 09 09 09 09 09 20 20 28 76 65 63 74  us)......  (vect
1b50: 6f 72 2d 73 65 74 21 20 65 78 69 74 2d 69 6e 66  or-set! exit-inf
1b60: 6f 20 32 20 65 78 69 74 2d 63 6f 64 65 29 0a 09  o 2 exit-code)..
1b70: 09 09 09 09 20 20 28 73 65 74 21 20 72 6f 6c 6c  ....  (set! roll
1b80: 75 70 2d 73 74 61 74 75 73 20 65 78 69 74 2d 63  up-status exit-c
1b90: 6f 64 65 29 20 0a 09 09 09 09 09 20 20 28 6d 75  ode) ......  (mu
1ba0: 74 65 78 2d 75 6e 6c 6f 63 6b 21 20 6d 29 0a 09  tex-unlock! m)..
1bb0: 09 09 09 09 20 20 28 69 66 20 28 65 71 3f 20 70  ....  (if (eq? p
1bc0: 69 64 2d 76 61 6c 20 30 29 0a 09 09 09 09 09 20  id-val 0)...... 
1bd0: 20 20 20 20 20 28 62 65 67 69 6e 0a 09 09 09 09       (begin.....
1be0: 09 09 28 74 68 72 65 61 64 2d 73 6c 65 65 70 21  ..(thread-sleep!
1bf0: 20 32 29 0a 09 09 09 09 09 09 28 6c 6f 6f 70 20   2).......(loop 
1c00: 28 2b 20 69 20 31 29 29 29 0a 09 09 09 09 09 20  (+ i 1)))...... 
1c10: 20 20 20 20 20 29 29 29 29 29 0a 09 09 09 09 20       )))))..... 
1c20: 3b 3b 20 74 68 65 6e 2c 20 69 66 20 72 75 6e 73  ;; then, if runs
1c30: 63 72 69 70 74 20 72 61 6e 20 6f 6b 20 28 6f 72  cript ran ok (or
1c40: 20 64 69 64 20 6e 6f 74 20 67 65 74 20 63 61 6c   did not get cal
1c50: 6c 65 64 29 0a 09 09 09 09 20 3b 3b 20 64 6f 20  led)..... ;; do 
1c60: 61 6c 6c 20 74 68 65 20 65 7a 73 74 65 70 73 20  all the ezsteps 
1c70: 28 69 66 20 61 6e 79 29 0a 09 09 09 09 20 28 69  (if any)..... (i
1c80: 66 20 65 7a 73 74 65 70 73 0a 09 09 09 09 20 20  f ezsteps.....  
1c90: 20 20 20 28 6c 65 74 2a 20 28 28 74 65 73 74 63     (let* ((testc
1ca0: 6f 6e 66 69 67 20 28 72 65 61 64 2d 63 6f 6e 66  onfig (read-conf
1cb0: 69 67 20 28 63 6f 6e 63 20 77 6f 72 6b 2d 61 72  ig (conc work-ar
1cc0: 65 61 20 22 2f 74 65 73 74 63 6f 6e 66 69 67 22  ea "/testconfig"
1cd0: 29 20 23 66 20 23 74 20 65 6e 76 69 72 6f 6e 2d  ) #f #t environ-
1ce0: 70 61 74 74 3a 20 22 70 72 65 2d 6c 61 75 6e 63  patt: "pre-launc
1cf0: 68 2d 65 6e 76 2d 76 61 72 73 22 29 29 20 3b 3b  h-env-vars")) ;;
1d00: 20 46 49 58 4d 45 3f 3f 3f 20 69 73 20 61 6c 6c   FIXME??? is all
1d10: 6f 77 2d 73 79 73 74 65 6d 20 6f 6b 20 68 65 72  ow-system ok her
1d20: 65 3f 0a 09 09 09 09 09 20 20 20 20 28 65 7a 73  e?......    (ezs
1d30: 74 65 70 73 6c 73 74 20 28 68 61 73 68 2d 74 61  tepslst (hash-ta
1d40: 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74 20  ble-ref/default 
1d50: 74 65 73 74 63 6f 6e 66 69 67 20 22 65 7a 73 74  testconfig "ezst
1d60: 65 70 73 22 20 27 28 29 29 29 29 0a 09 09 09 09  eps" '()))).....
1d70: 20 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20         (if (not 
1d80: 28 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 22 2e  (file-exists? ".
1d90: 65 7a 73 74 65 70 73 22 29 29 28 63 72 65 61 74  ezsteps"))(creat
1da0: 65 2d 64 69 72 65 63 74 6f 72 79 20 22 2e 65 7a  e-directory ".ez
1db0: 73 74 65 70 73 22 29 29 0a 09 09 09 09 20 20 20  steps")).....   
1dc0: 20 20 20 20 3b 3b 20 69 66 20 65 7a 73 74 65 70      ;; if ezstep
1dd0: 73 20 77 61 73 20 64 65 66 69 6e 65 64 20 74 68  s was defined th
1de0: 65 6e 20 77 65 20 61 72 65 20 73 75 72 65 20 74  en we are sure t
1df0: 6f 20 68 61 76 65 20 61 74 20 6c 65 61 73 74 20  o have at least 
1e00: 6f 6e 65 20 73 74 65 70 20 62 75 74 20 63 68 65  one step but che
1e10: 63 6b 20 61 6e 79 77 61 79 0a 09 09 09 09 20 20  ck anyway.....  
1e20: 20 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 3e       (if (not (>
1e30: 20 28 6c 65 6e 67 74 68 20 65 7a 73 74 65 70 73   (length ezsteps
1e40: 6c 73 74 29 20 30 29 29 0a 09 09 09 09 09 20 20  lst) 0))......  
1e50: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20   (debug:print 0 
1e60: 22 45 52 52 4f 52 3a 20 65 7a 73 74 65 70 73 20  "ERROR: ezsteps 
1e70: 64 65 66 69 6e 65 64 20 62 75 74 20 65 7a 73 74  defined but ezst
1e80: 65 70 73 6c 73 74 20 69 73 20 7a 65 72 6f 20 6c  epslst is zero l
1e90: 65 6e 67 74 68 22 29 0a 09 09 09 09 09 20 20 20  ength")......   
1ea0: 28 6c 65 74 20 6c 6f 6f 70 20 28 28 65 7a 73 74  (let loop ((ezst
1eb0: 65 70 20 28 63 61 72 20 65 7a 73 74 65 70 73 6c  ep (car ezstepsl
1ec0: 73 74 29 29 0a 09 09 09 09 09 09 20 20 20 20 20  st)).......     
1ed0: 20 28 74 61 6c 20 20 20 20 28 63 64 72 20 65 7a   (tal    (cdr ez
1ee0: 73 74 65 70 73 6c 73 74 29 29 0a 09 09 09 09 09  stepslst))......
1ef0: 09 20 20 20 20 20 20 28 70 72 65 76 73 74 65 70  .      (prevstep
1f00: 20 23 66 29 29 0a 09 09 09 09 09 20 20 20 20 20   #f))......     
1f10: 3b 3b 20 63 68 65 63 6b 20 65 78 69 74 2d 69 6e  ;; check exit-in
1f20: 66 6f 20 28 76 65 63 74 6f 72 2d 72 65 66 20 65  fo (vector-ref e
1f30: 78 69 74 2d 69 6e 66 6f 20 31 29 0a 09 09 09 09  xit-info 1).....
1f40: 09 20 20 20 20 20 28 69 66 20 28 76 65 63 74 6f  .     (if (vecto
1f50: 72 2d 72 65 66 20 65 78 69 74 2d 69 6e 66 6f 20  r-ref exit-info 
1f60: 31 29 0a 09 09 09 09 09 09 20 28 6c 65 74 2a 20  1)....... (let* 
1f70: 28 28 73 74 65 70 6e 61 6d 65 20 20 28 63 61 72  ((stepname  (car
1f80: 20 65 7a 73 74 65 70 29 29 20 20 3b 3b 20 64 6f   ezstep))  ;; do
1f90: 20 73 74 75 66 66 20 74 6f 20 72 75 6e 20 74 68   stuff to run th
1fa0: 65 20 73 74 65 70 0a 09 09 09 09 09 09 09 28 73  e step........(s
1fb0: 74 65 70 69 6e 66 6f 20 20 28 63 61 64 72 20 65  tepinfo  (cadr e
1fc0: 7a 73 74 65 70 29 29 0a 09 09 09 09 09 09 09 28  zstep))........(
1fd0: 73 74 65 70 70 61 72 74 73 20 28 73 74 72 69 6e  stepparts (strin
1fe0: 67 2d 6d 61 74 63 68 20 28 72 65 67 65 78 70 20  g-match (regexp 
1ff0: 22 5e 28 5c 5c 7b 28 5b 5e 5c 5c 7d 5d 2a 29 5c  "^(\\{([^\\}]*)\
2000: 5c 7d 5c 5c 73 2a 7c 29 28 2e 2a 29 24 22 29 20  \}\\s*|)(.*)$") 
2010: 73 74 65 70 69 6e 66 6f 29 29 0a 09 09 09 09 09  stepinfo))......
2020: 09 09 28 73 74 65 70 70 61 72 6d 73 20 28 6c 69  ..(stepparms (li
2030: 73 74 2d 72 65 66 20 73 74 65 70 70 61 72 74 73  st-ref stepparts
2040: 20 32 29 29 20 3b 3b 20 66 6f 72 20 66 75 74 75   2)) ;; for futu
2050: 72 65 20 75 73 65 2c 20 7b 56 41 52 3d 31 2c 32  re use, {VAR=1,2
2060: 2c 33 7d 2c 20 72 75 6e 20 73 74 65 70 20 66 6f  ,3}, run step fo
2070: 72 20 65 61 63 68 20 0a 09 09 09 09 09 09 09 28  r each ........(
2080: 73 74 65 70 63 6d 64 20 20 20 28 6c 69 73 74 2d  stepcmd   (list-
2090: 72 65 66 20 73 74 65 70 70 61 72 74 73 20 33 29  ref stepparts 3)
20a0: 29 0a 09 09 09 09 09 09 09 28 73 63 72 69 70 74  )........(script
20b0: 20 20 20 20 22 22 29 20 3b 20 22 23 21 2f 62 69      "") ; "#!/bi
20c0: 6e 2f 62 61 73 68 5c 6e 22 29 20 3b 3b 20 79 65  n/bash\n") ;; ye
20d0: 70 2c 20 77 65 20 64 65 70 65 6e 64 20 6f 6e 20  p, we depend on 
20e0: 62 69 6e 2f 62 61 73 68 20 46 49 58 4d 45 21 21  bin/bash FIXME!!
20f0: 21 0a 09 09 09 09 09 09 09 28 6c 6f 67 70 72 6f  !........(logpro
2100: 2d 75 73 65 64 20 23 66 29 29 0a 09 09 09 09 09  -used #f))......
2110: 09 20 20 20 3b 3b 20 4e 42 2f 2f 20 63 61 6e 20  .   ;; NB// can 
2120: 73 61 66 65 6c 79 20 61 73 73 75 6d 65 20 77 65  safely assume we
2130: 20 61 72 65 20 69 6e 20 74 65 73 74 2d 61 72 65   are in test-are
2140: 61 20 64 69 72 65 63 74 6f 72 79 0a 09 09 09 09  a directory.....
2150: 09 09 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e  ..   (debug:prin
2160: 74 20 34 20 22 65 7a 73 74 65 70 73 3a 5c 6e 20  t 4 "ezsteps:\n 
2170: 73 74 65 70 6e 61 6d 65 3a 20 22 20 73 74 65 70  stepname: " step
2180: 6e 61 6d 65 20 22 20 73 74 65 70 69 6e 66 6f 3a  name " stepinfo:
2190: 20 22 20 73 74 65 70 69 6e 66 6f 20 22 20 73 74   " stepinfo " st
21a0: 65 70 70 61 72 74 73 3a 20 22 20 73 74 65 70 70  epparts: " stepp
21b0: 61 72 74 73 0a 09 09 09 09 09 09 09 09 22 20 73  arts........." s
21c0: 74 65 70 70 61 72 6d 73 3a 20 22 20 73 74 65 70  tepparms: " step
21d0: 70 61 72 6d 73 20 22 20 73 74 65 70 63 6d 64 3a  parms " stepcmd:
21e0: 20 22 20 73 74 65 70 63 6d 64 29 0a 09 09 09 09   " stepcmd).....
21f0: 09 09 20 20 20 0a 09 09 09 09 09 09 20 20 20 28  ..   .......   (
2200: 69 66 20 28 66 69 6c 65 2d 65 78 69 73 74 73 3f  if (file-exists?
2210: 20 28 63 6f 6e 63 20 73 74 65 70 6e 61 6d 65 20   (conc stepname 
2220: 22 2e 6c 6f 67 70 72 6f 22 29 29 28 73 65 74 21  ".logpro"))(set!
2230: 20 6c 6f 67 70 72 6f 2d 75 73 65 64 20 23 74 29   logpro-used #t)
2240: 29 0a 0a 09 09 09 09 09 09 20 20 20 3b 3b 20 3b  )........   ;; ;
2250: 3b 20 66 69 72 73 74 20 73 6f 75 72 63 65 20 74  ; first source t
2260: 68 65 20 70 72 65 76 69 6f 75 73 20 65 6e 76 69  he previous envi
2270: 72 6f 6e 6d 65 6e 74 0a 09 09 09 09 09 09 20 20  ronment.......  
2280: 20 3b 3b 20 28 6c 65 74 20 28 28 70 72 65 76 2d   ;; (let ((prev-
2290: 65 6e 76 20 28 63 6f 6e 63 20 22 2e 65 7a 73 74  env (conc ".ezst
22a0: 65 70 73 2f 22 20 70 72 65 76 73 74 65 70 20 28  eps/" prevstep (
22b0: 69 66 20 28 73 74 72 69 6e 67 2d 73 65 61 72 63  if (string-searc
22c0: 68 20 28 72 65 67 65 78 70 20 22 63 73 68 22 29  h (regexp "csh")
22d0: 20 0a 09 09 09 09 09 09 20 20 20 3b 3b 20 20 20   .......   ;;   
22e0: 20 20 20 09 09 09 09 09 09 09 20 28 67 65 74 2d     ....... (get-
22f0: 65 6e 76 69 72 6f 6e 6d 65 6e 74 2d 76 61 72 69  environment-vari
2300: 61 62 6c 65 20 22 53 48 45 4c 4c 22 29 29 20 22  able "SHELL")) "
2310: 2e 63 73 68 22 20 22 2e 73 68 22 29 29 29 29 0a  .csh" ".sh")))).
2320: 09 09 09 09 09 09 20 20 20 3b 3b 20 20 20 28 69  ......   ;;   (i
2330: 66 20 28 61 6e 64 20 70 72 65 76 73 74 65 70 20  f (and prevstep 
2340: 28 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 70 72  (file-exists? pr
2350: 65 76 2d 65 6e 76 29 29 0a 09 09 09 09 09 09 20  ev-env))....... 
2360: 20 20 3b 3b 20 20 20 20 20 20 20 28 73 65 74 21    ;;       (set!
2370: 20 73 63 72 69 70 74 20 28 63 6f 6e 63 20 73 63   script (conc sc
2380: 72 69 70 74 20 22 73 6f 75 72 63 65 20 22 20 70  ript "source " p
2390: 72 65 76 2d 65 6e 76 29 29 29 29 0a 09 09 09 09  rev-env)))).....
23a0: 09 09 20 20 20 0a 09 09 09 09 09 09 20 20 20 3b  ..   .......   ;
23b0: 3b 20 63 61 6c 6c 20 74 68 65 20 63 6f 6d 6d 61  ; call the comma
23c0: 6e 64 20 75 73 69 6e 67 20 6d 74 5f 65 7a 73 74  nd using mt_ezst
23d0: 65 70 0a 09 09 09 09 09 09 20 20 20 28 73 65 74  ep.......   (set
23e0: 21 20 73 63 72 69 70 74 20 28 63 6f 6e 63 20 22  ! script (conc "
23f0: 6d 74 5f 65 7a 73 74 65 70 20 22 20 73 74 65 70  mt_ezstep " step
2400: 6e 61 6d 65 20 22 20 22 20 28 69 66 20 70 72 65  name " " (if pre
2410: 76 73 74 65 70 20 70 72 65 76 73 74 65 70 20 22  vstep prevstep "
2420: 2d 22 29 20 22 20 22 20 73 74 65 70 63 6d 64 29  -") " " stepcmd)
2430: 29 0a 0a 09 09 09 09 09 09 20 20 20 28 64 65 62  )........   (deb
2440: 75 67 3a 70 72 69 6e 74 20 34 20 22 73 63 72 69  ug:print 4 "scri
2450: 70 74 3a 20 22 20 73 63 72 69 70 74 29 0a 0a 09  pt: " script)...
2460: 09 09 09 09 09 20 20 20 28 63 64 62 3a 72 65 6d  .....   (cdb:rem
2470: 6f 74 65 2d 72 75 6e 20 64 62 3a 74 65 73 74 73  ote-run db:tests
2480: 74 65 70 2d 73 65 74 2d 73 74 61 74 75 73 21 20  tep-set-status! 
2490: 23 66 20 74 65 73 74 2d 69 64 20 73 74 65 70 6e  #f test-id stepn
24a0: 61 6d 65 20 22 73 74 61 72 74 22 20 22 2d 22 20  ame "start" "-" 
24b0: 23 66 20 23 66 29 0a 09 09 09 09 09 09 20 20 20  #f #f).......   
24c0: 3b 3b 20 6e 6f 77 20 6c 61 75 6e 63 68 0a 09 09  ;; now launch...
24d0: 09 09 09 09 20 20 20 28 6c 65 74 20 28 28 70 69  ....   (let ((pi
24e0: 64 20 28 70 72 6f 63 65 73 73 2d 72 75 6e 20 73  d (process-run s
24f0: 63 72 69 70 74 29 29 29 0a 09 09 09 09 09 09 20  cript)))....... 
2500: 20 20 20 20 28 6c 65 74 20 70 72 6f 63 65 73 73      (let process
2510: 6c 6f 6f 70 20 28 28 69 20 30 29 29 0a 09 09 09  loop ((i 0))....
2520: 09 09 09 20 20 20 20 20 20 20 28 6c 65 74 2d 76  ...       (let-v
2530: 61 6c 75 65 73 20 28 28 28 70 69 64 2d 76 61 6c  alues (((pid-val
2540: 20 65 78 69 74 2d 73 74 61 74 75 73 20 65 78 69   exit-status exi
2550: 74 2d 63 6f 64 65 29 28 70 72 6f 63 65 73 73 2d  t-code)(process-
2560: 77 61 69 74 20 70 69 64 20 23 74 29 29 29 0a 09  wait pid #t)))..
2570: 09 09 09 09 09 09 09 20 20 20 28 6d 75 74 65 78  .......   (mutex
2580: 2d 6c 6f 63 6b 21 20 6d 29 0a 09 09 09 09 09 09  -lock! m).......
2590: 09 09 20 20 20 28 76 65 63 74 6f 72 2d 73 65 74  ..   (vector-set
25a0: 21 20 65 78 69 74 2d 69 6e 66 6f 20 30 20 70 69  ! exit-info 0 pi
25b0: 64 29 0a 09 09 09 09 09 09 09 09 20 20 20 28 76  d).........   (v
25c0: 65 63 74 6f 72 2d 73 65 74 21 20 65 78 69 74 2d  ector-set! exit-
25d0: 69 6e 66 6f 20 31 20 65 78 69 74 2d 73 74 61 74  info 1 exit-stat
25e0: 75 73 29 0a 09 09 09 09 09 09 09 09 20 20 20 28  us).........   (
25f0: 76 65 63 74 6f 72 2d 73 65 74 21 20 65 78 69 74  vector-set! exit
2600: 2d 69 6e 66 6f 20 32 20 65 78 69 74 2d 63 6f 64  -info 2 exit-cod
2610: 65 29 0a 09 09 09 09 09 09 09 09 20 20 20 28 6d  e).........   (m
2620: 75 74 65 78 2d 75 6e 6c 6f 63 6b 21 20 6d 29 0a  utex-unlock! m).
2630: 09 09 09 09 09 09 09 09 20 20 20 28 69 66 20 28  ........   (if (
2640: 65 71 3f 20 70 69 64 2d 76 61 6c 20 30 29 0a 09  eq? pid-val 0)..
2650: 09 09 09 09 09 09 09 20 20 20 20 20 20 20 28 62  .......       (b
2660: 65 67 69 6e 0a 09 09 09 09 09 09 09 09 09 20 28  egin.......... (
2670: 74 68 72 65 61 64 2d 73 6c 65 65 70 21 20 32 29  thread-sleep! 2)
2680: 0a 09 09 09 09 09 09 09 09 09 20 28 70 72 6f 63  .......... (proc
2690: 65 73 73 6c 6f 6f 70 20 28 2b 20 69 20 31 29 29  essloop (+ i 1))
26a0: 29 29 0a 09 09 09 09 09 09 09 09 20 20 20 29 29  )).........   ))
26b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e0: 20 20 20 20 20 20 28 6c 65 74 20 28 28 65 78 69        (let ((exi
26f0: 6e 66 6f 20 28 76 65 63 74 6f 72 2d 72 65 66 20  nfo (vector-ref 
2700: 65 78 69 74 2d 69 6e 66 6f 20 32 29 29 0a 20 20  exit-info 2)).  
2710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2740: 20 20 20 20 20 20 20 20 20 28 6c 6f 67 66 6e 61           (logfna
2750: 20 28 69 66 20 6c 6f 67 70 72 6f 2d 75 73 65 64   (if logpro-used
2760: 20 28 63 6f 6e 63 20 73 74 65 70 6e 61 6d 65 20   (conc stepname 
2770: 22 2e 68 74 6d 6c 22 29 20 22 22 29 29 29 0a 09  ".html") "")))..
2780: 09 09 09 09 09 20 20 20 20 20 20 20 3b 3b 20 74  .....       ;; t
2790: 65 73 74 69 6e 67 20 69 66 20 70 72 6f 63 65 64  esting if proced
27a0: 75 72 65 73 20 63 61 6c 6c 65 64 20 69 6e 20 61  ures called in a
27b0: 20 72 65 6d 6f 74 65 20 63 61 6c 6c 20 63 61 75   remote call cau
27c0: 73 65 20 70 72 6f 62 6c 65 6d 73 20 28 61 6e 73  se problems (ans
27d0: 3a 20 6e 6f 20 6f 72 20 73 6f 20 49 20 73 75 73  : no or so I sus
27e0: 70 65 63 74 29 0a 09 09 09 09 09 09 20 20 20 20  pect).......    
27f0: 20 20 20 28 63 64 62 3a 72 65 6d 6f 74 65 2d 72     (cdb:remote-r
2800: 75 6e 20 64 62 3a 74 65 73 74 73 74 65 70 2d 73  un db:teststep-s
2810: 65 74 2d 73 74 61 74 75 73 21 20 23 66 20 74 65  et-status! #f te
2820: 73 74 2d 69 64 20 73 74 65 70 6e 61 6d 65 20 22  st-id stepname "
2830: 65 6e 64 22 20 65 78 69 6e 66 6f 20 23 66 20 6c  end" exinfo #f l
2840: 6f 67 66 6e 61 29 29 0a 09 09 09 09 09 09 20 20  ogfna)).......  
2850: 20 20 20 28 69 66 20 6c 6f 67 70 72 6f 2d 75 73     (if logpro-us
2860: 65 64 0a 09 09 09 09 09 09 09 20 28 63 64 62 3a  ed........ (cdb:
2870: 74 65 73 74 2d 73 65 74 2d 6c 6f 67 21 20 2a 72  test-set-log! *r
2880: 75 6e 72 65 6d 6f 74 65 2a 20 20 74 65 73 74 2d  unremote*  test-
2890: 69 64 20 28 63 6f 6e 63 20 73 74 65 70 6e 61 6d  id (conc stepnam
28a0: 65 20 22 2e 68 74 6d 6c 22 29 29 29 0a 09 09 09  e ".html")))....
28b0: 09 09 09 20 20 20 20 20 3b 3b 20 73 65 74 20 74  ...     ;; set t
28c0: 68 65 20 74 65 73 74 20 66 69 6e 61 6c 20 73 74  he test final st
28d0: 61 74 75 73 0a 09 09 09 09 09 09 20 20 20 20 20  atus.......     
28e0: 28 6c 65 74 2a 20 28 28 74 68 69 73 2d 73 74 65  (let* ((this-ste
28f0: 70 2d 73 74 61 74 75 73 20 28 63 6f 6e 64 0a 09  p-status (cond..
2900: 09 09 09 09 09 09 09 09 20 20 20 20 20 20 20 28  ........       (
2910: 28 61 6e 64 20 28 65 71 3f 20 28 76 65 63 74 6f  (and (eq? (vecto
2920: 72 2d 72 65 66 20 65 78 69 74 2d 69 6e 66 6f 20  r-ref exit-info 
2930: 32 29 20 32 29 20 6c 6f 67 70 72 6f 2d 75 73 65  2) 2) logpro-use
2940: 64 29 20 27 77 61 72 6e 29 0a 09 09 09 09 09 09  d) 'warn).......
2950: 09 09 09 20 20 20 20 20 20 20 28 28 65 71 3f 20  ...       ((eq? 
2960: 28 76 65 63 74 6f 72 2d 72 65 66 20 65 78 69 74  (vector-ref exit
2970: 2d 69 6e 66 6f 20 32 29 20 30 29 20 20 20 20 20  -info 2) 0)     
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27 70                'p
2990: 61 73 73 29 0a 09 09 09 09 09 09 09 09 09 20 20  ass)..........  
29a0: 20 20 20 20 20 28 65 6c 73 65 20 27 66 61 69 6c       (else 'fail
29b0: 29 29 29 0a 09 09 09 09 09 09 09 20 20 20 20 28  )))........    (
29c0: 6f 76 65 72 61 6c 6c 2d 73 74 61 74 75 73 20 20  overall-status  
29d0: 20 28 63 6f 6e 64 0a 09 09 09 09 09 09 09 09 09   (cond..........
29e0: 20 20 20 20 20 20 20 28 28 65 71 3f 20 72 6f 6c         ((eq? rol
29f0: 6c 75 70 2d 73 74 61 74 75 73 20 32 29 20 27 77  lup-status 2) 'w
2a00: 61 72 6e 29 0a 09 09 09 09 09 09 09 09 09 20 20  arn)..........  
2a10: 20 20 20 20 20 28 28 65 71 3f 20 72 6f 6c 6c 75       ((eq? rollu
2a20: 70 2d 73 74 61 74 75 73 20 30 29 20 27 70 61 73  p-status 0) 'pas
2a30: 73 29 0a 09 09 09 09 09 09 09 09 09 20 20 20 20  s)..........    
2a40: 20 20 20 28 65 6c 73 65 20 27 66 61 69 6c 29 29     (else 'fail))
2a50: 29 0a 09 09 09 09 09 09 09 20 20 20 20 28 6e 65  )........    (ne
2a60: 78 74 2d 73 74 61 74 75 73 20 20 20 20 20 20 28  xt-status      (
2a70: 63 6f 6e 64 20 0a 09 09 09 09 09 09 09 09 09 20  cond .......... 
2a80: 20 20 20 20 20 20 28 28 65 71 3f 20 6f 76 65 72        ((eq? over
2a90: 61 6c 6c 2d 73 74 61 74 75 73 20 27 70 61 73 73  all-status 'pass
2aa0: 29 20 74 68 69 73 2d 73 74 65 70 2d 73 74 61 74  ) this-step-stat
2ab0: 75 73 29 0a 09 09 09 09 09 09 09 09 09 20 20 20  us)..........   
2ac0: 20 20 20 20 28 28 65 71 3f 20 6f 76 65 72 61 6c      ((eq? overal
2ad0: 6c 2d 73 74 61 74 75 73 20 27 77 61 72 6e 29 0a  l-status 'warn).
2ae0: 09 09 09 09 09 09 09 09 09 09 28 69 66 20 28 65  ..........(if (e
2af0: 71 3f 20 74 68 69 73 2d 73 74 65 70 2d 73 74 61  q? this-step-sta
2b00: 74 75 73 20 27 66 61 69 6c 29 20 27 66 61 69 6c  tus 'fail) 'fail
2b10: 20 27 77 61 72 6e 29 29 0a 09 09 09 09 09 09 09   'warn))........
2b20: 09 09 20 20 20 20 20 20 20 28 65 6c 73 65 20 27  ..       (else '
2b30: 66 61 69 6c 29 29 29 29 0a 09 09 09 09 09 09 20  fail))))....... 
2b40: 20 20 20 20 20 20 28 64 65 62 75 67 3a 70 72 69        (debug:pri
2b50: 6e 74 20 34 20 22 45 78 69 74 20 76 61 6c 75 65  nt 4 "Exit value
2b60: 20 72 65 63 65 69 76 65 64 3a 20 22 20 28 76 65   received: " (ve
2b70: 63 74 6f 72 2d 72 65 66 20 65 78 69 74 2d 69 6e  ctor-ref exit-in
2b80: 66 6f 20 32 29 20 22 20 6c 6f 67 70 72 6f 2d 75  fo 2) " logpro-u
2b90: 73 65 64 3a 20 22 20 6c 6f 67 70 72 6f 2d 75 73  sed: " logpro-us
2ba0: 65 64 20 0a 09 09 09 09 09 09 09 09 20 20 20 20  ed .........    
2bb0: 22 20 74 68 69 73 2d 73 74 65 70 2d 73 74 61 74  " this-step-stat
2bc0: 75 73 3a 20 22 20 74 68 69 73 2d 73 74 65 70 2d  us: " this-step-
2bd0: 73 74 61 74 75 73 20 22 20 6f 76 65 72 61 6c 6c  status " overall
2be0: 2d 73 74 61 74 75 73 3a 20 22 20 6f 76 65 72 61  -status: " overa
2bf0: 6c 6c 2d 73 74 61 74 75 73 20 0a 09 09 09 09 09  ll-status ......
2c00: 09 09 09 20 20 20 20 22 20 6e 65 78 74 2d 73 74  ...    " next-st
2c10: 61 74 75 73 3a 20 22 20 6e 65 78 74 2d 73 74 61  atus: " next-sta
2c20: 74 75 73 20 22 20 72 6f 6c 6c 75 70 2d 73 74 61  tus " rollup-sta
2c30: 74 75 73 3a 20 22 20 72 6f 6c 6c 75 70 2d 73 74  tus: " rollup-st
2c40: 61 74 75 73 29 0a 09 09 09 09 09 09 20 20 20 20  atus).......    
2c50: 20 20 20 28 63 61 73 65 20 6e 65 78 74 2d 73 74     (case next-st
2c60: 61 74 75 73 0a 09 09 09 09 09 09 09 20 28 28 77  atus........ ((w
2c70: 61 72 6e 29 0a 09 09 09 09 09 09 09 20 20 28 73  arn)........  (s
2c80: 65 74 21 20 72 6f 6c 6c 75 70 2d 73 74 61 74 75  et! rollup-statu
2c90: 73 20 32 29 0a 09 09 09 09 09 09 09 20 20 3b 3b  s 2)........  ;;
2ca0: 20 4e 42 2f 2f 20 74 65 73 74 2d 73 65 74 2d 73   NB// test-set-s
2cb0: 74 61 74 75 73 21 20 64 6f 65 73 20 72 64 62 20  tatus! does rdb 
2cc0: 63 61 6c 6c 73 20 75 6e 64 65 72 20 74 68 65 20  calls under the 
2cd0: 68 6f 6f 64 0a 09 09 09 09 09 09 09 20 20 28 74  hood........  (t
2ce0: 65 73 74 73 3a 74 65 73 74 2d 73 65 74 2d 73 74  ests:test-set-st
2cf0: 61 74 75 73 21 20 74 65 73 74 2d 69 64 20 22 52  atus! test-id "R
2d00: 55 4e 4e 49 4e 47 22 20 22 57 41 52 4e 22 20 0a  UNNING" "WARN" .
2d10: 09 09 09 09 09 09 09 09 09 20 20 28 69 66 20 28  .........  (if (
2d20: 65 71 3f 20 74 68 69 73 2d 73 74 65 70 2d 73 74  eq? this-step-st
2d30: 61 74 75 73 20 27 77 61 72 6e 29 20 22 4c 6f 67  atus 'warn) "Log
2d40: 70 72 6f 20 77 61 72 6e 69 6e 67 20 66 6f 75 6e  pro warning foun
2d50: 64 22 20 23 66 29 0a 09 09 09 09 09 09 09 09 09  d" #f)..........
2d60: 20 20 23 66 29 29 0a 09 09 09 09 09 09 09 20 28    #f))........ (
2d70: 28 70 61 73 73 29 0a 09 09 09 09 09 09 09 20 20  (pass)........  
2d80: 28 74 65 73 74 73 3a 74 65 73 74 2d 73 65 74 2d  (tests:test-set-
2d90: 73 74 61 74 75 73 21 20 74 65 73 74 2d 69 64 20  status! test-id 
2da0: 22 52 55 4e 4e 49 4e 47 22 20 22 50 41 53 53 22  "RUNNING" "PASS"
2db0: 20 23 66 20 23 66 29 29 0a 09 09 09 09 09 09 09   #f #f))........
2dc0: 20 28 65 6c 73 65 20 3b 3b 20 27 66 61 69 6c 0a   (else ;; 'fail.
2dd0: 09 09 09 09 09 09 09 20 20 28 73 65 74 21 20 72  .......  (set! r
2de0: 6f 6c 6c 75 70 2d 73 74 61 74 75 73 20 31 29 20  ollup-status 1) 
2df0: 3b 3b 20 66 6f 72 63 65 20 66 61 69 6c 0a 09 09  ;; force fail...
2e00: 09 09 09 09 09 20 20 28 74 65 73 74 73 3a 74 65  .....  (tests:te
2e10: 73 74 2d 73 65 74 2d 73 74 61 74 75 73 21 20 74  st-set-status! t
2e20: 65 73 74 2d 69 64 20 22 52 55 4e 4e 49 4e 47 22  est-id "RUNNING"
2e30: 20 22 46 41 49 4c 22 20 28 63 6f 6e 63 20 22 46   "FAIL" (conc "F
2e40: 61 69 6c 65 64 20 61 74 20 73 74 65 70 20 22 20  ailed at step " 
2e50: 73 74 65 70 6e 61 6d 65 29 20 23 66 29 0a 09 09  stepname) #f)...
2e60: 09 09 09 09 09 20 20 29 29 29 29 0a 09 09 09 09  .....  )))).....
2e70: 09 09 20 20 20 28 69 66 20 28 61 6e 64 20 28 73  ..   (if (and (s
2e80: 74 65 70 72 75 6e 2d 67 6f 6f 64 3f 20 6c 6f 67  teprun-good? log
2e90: 70 72 6f 2d 75 73 65 64 20 28 76 65 63 74 6f 72  pro-used (vector
2ea0: 2d 72 65 66 20 65 78 69 74 2d 69 6e 66 6f 20 32  -ref exit-info 2
2eb0: 29 29 0a 09 09 09 09 09 09 09 20 20 20 20 28 6e  ))........    (n
2ec0: 6f 74 20 28 6e 75 6c 6c 3f 20 74 61 6c 29 29 29  ot (null? tal)))
2ed0: 0a 09 09 09 09 09 09 20 20 20 20 20 20 20 28 6c  .......       (l
2ee0: 6f 6f 70 20 28 63 61 72 20 74 61 6c 29 20 28 63  oop (car tal) (c
2ef0: 64 72 20 74 61 6c 29 20 73 74 65 70 6e 61 6d 65  dr tal) stepname
2f00: 29 29 29 0a 09 09 09 09 09 09 20 28 64 65 62 75  )))....... (debu
2f10: 67 3a 70 72 69 6e 74 20 34 20 22 57 41 52 4e 49  g:print 4 "WARNI
2f20: 4e 47 3a 20 61 20 70 72 69 6f 72 20 73 74 65 70  NG: a prior step
2f30: 20 66 61 69 6c 65 64 2c 20 73 74 6f 70 70 69 6e   failed, stoppin
2f40: 67 20 61 74 20 22 20 65 7a 73 74 65 70 29 29 29  g at " ezstep)))
2f50: 29 29 29 29 29 0a 09 09 20 28 6d 6f 6e 69 74 6f  )))))... (monito
2f60: 72 6a 6f 62 20 20 20 28 6c 61 6d 62 64 61 20 28  rjob   (lambda (
2f70: 29 0a 09 09 09 09 20 28 6c 65 74 2a 20 28 28 73  )..... (let* ((s
2f80: 74 61 72 74 2d 73 65 63 6f 6e 64 73 20 28 63 75  tart-seconds (cu
2f90: 72 72 65 6e 74 2d 73 65 63 6f 6e 64 73 29 29 0a  rrent-seconds)).
2fa0: 09 09 09 09 09 28 63 61 6c 63 2d 6d 69 6e 75 74  .....(calc-minut
2fb0: 65 73 20 20 28 6c 61 6d 62 64 61 20 28 29 0a 09  es  (lambda ()..
2fc0: 09 09 09 09 09 09 20 28 69 6e 65 78 61 63 74 2d  ...... (inexact-
2fd0: 3e 65 78 61 63 74 20 0a 09 09 09 09 09 09 09 20  >exact ........ 
2fe0: 20 28 72 6f 75 6e 64 20 0a 09 09 09 09 09 09 09   (round ........
2ff0: 20 20 20 28 2d 20 0a 09 09 09 09 09 09 09 20 20     (- ........  
3000: 20 20 28 63 75 72 72 65 6e 74 2d 73 65 63 6f 6e    (current-secon
3010: 64 73 29 20 0a 09 09 09 09 09 09 09 20 20 20 20  ds) ........    
3020: 73 74 61 72 74 2d 73 65 63 6f 6e 64 73 29 29 29  start-seconds)))
3030: 29 29 0a 09 09 09 09 09 28 6b 69 6c 6c 2d 74 72  ))......(kill-tr
3040: 69 65 73 20 30 29 29 0a 09 09 09 09 20 20 20 28  ies 0)).....   (
3050: 6c 65 74 20 6c 6f 6f 70 20 28 28 6d 69 6e 75 74  let loop ((minut
3060: 65 73 20 20 20 28 63 61 6c 63 2d 6d 69 6e 75 74  es   (calc-minut
3070: 65 73 29 29 29 0a 09 09 09 09 20 20 20 20 20 28  es))).....     (
3080: 62 65 67 69 6e 0a 09 09 09 09 20 20 20 20 20 20  begin.....      
3090: 20 28 73 65 74 21 20 6b 69 6c 6c 2d 6a 6f 62 3f   (set! kill-job?
30a0: 20 28 74 65 73 74 2d 67 65 74 2d 6b 69 6c 6c 2d   (test-get-kill-
30b0: 72 65 71 75 65 73 74 20 74 65 73 74 2d 69 64 29  request test-id)
30c0: 29 20 3b 3b 20 72 75 6e 2d 69 64 20 74 65 73 74  ) ;; run-id test
30d0: 2d 6e 61 6d 65 20 69 74 65 6d 64 61 74 29 29 0a  -name itemdat)).
30e0: 09 09 09 09 20 20 20 20 20 20 20 28 6f 70 65 6e  ....       (open
30f0: 2d 72 75 6e 2d 63 6c 6f 73 65 20 74 65 73 74 2d  -run-close test-
3100: 73 65 74 2d 6d 65 74 61 2d 69 6e 66 6f 20 23 66  set-meta-info #f
3110: 20 74 65 73 74 2d 69 64 20 72 75 6e 2d 69 64 20   test-id run-id 
3120: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 64 61  test-name itemda
3130: 74 20 6d 69 6e 75 74 65 73 29 0a 09 09 09 09 20  t minutes)..... 
3140: 20 20 20 20 20 20 28 69 66 20 6b 69 6c 6c 2d 6a        (if kill-j
3150: 6f 62 3f 20 0a 09 09 09 09 09 20 20 20 28 62 65  ob? ......   (be
3160: 67 69 6e 0a 09 09 09 09 09 20 20 20 20 20 28 6d  gin......     (m
3170: 75 74 65 78 2d 6c 6f 63 6b 21 20 6d 29 0a 09 09  utex-lock! m)...
3180: 09 09 09 20 20 20 20 20 28 6c 65 74 2a 20 28 28  ...     (let* ((
3190: 70 69 64 20 28 76 65 63 74 6f 72 2d 72 65 66 20  pid (vector-ref 
31a0: 65 78 69 74 2d 69 6e 66 6f 20 30 29 29 29 0a 09  exit-info 0)))..
31b0: 09 09 09 09 20 20 20 20 20 20 20 28 69 66 20 28  ....       (if (
31c0: 6e 75 6d 62 65 72 3f 20 70 69 64 29 0a 09 09 09  number? pid)....
31d0: 09 09 09 20 20 20 28 62 65 67 69 6e 0a 09 09 09  ...   (begin....
31e0: 09 09 09 20 20 20 20 20 28 64 65 62 75 67 3a 70  ...     (debug:p
31f0: 72 69 6e 74 20 30 20 22 57 41 52 4e 49 4e 47 3a  rint 0 "WARNING:
3200: 20 52 65 71 75 65 73 74 20 72 65 63 65 69 76 65   Request receive
3210: 64 20 74 6f 20 6b 69 6c 6c 20 6a 6f 62 20 28 61  d to kill job (a
3220: 74 74 65 6d 70 74 20 23 20 22 20 6b 69 6c 6c 2d  ttempt # " kill-
3230: 74 72 69 65 73 20 22 29 22 29 0a 09 09 09 09 09  tries ")")......
3240: 09 20 20 20 20 20 28 6c 65 74 20 28 28 70 72 6f  .     (let ((pro
3250: 63 65 73 73 65 73 20 28 63 6d 64 2d 72 75 6e 2d  cesses (cmd-run-
3260: 3e 6c 69 73 74 20 28 63 6f 6e 63 20 22 70 67 72  >list (conc "pgr
3270: 65 70 20 2d 6c 20 2d 50 20 22 20 70 69 64 29 29  ep -l -P " pid))
3280: 29 29 0a 09 09 09 09 09 09 20 20 20 20 20 20 20  )).......       
3290: 28 66 6f 72 2d 65 61 63 68 20 0a 09 09 09 09 09  (for-each ......
32a0: 09 09 28 6c 61 6d 62 64 61 20 28 70 29 0a 09 09  ..(lambda (p)...
32b0: 09 09 09 09 09 20 20 28 6c 65 74 2a 20 28 28 70  .....  (let* ((p
32c0: 61 72 74 73 20 20 28 73 74 72 69 6e 67 2d 73 70  arts  (string-sp
32d0: 6c 69 74 20 70 29 29 0a 09 09 09 09 09 09 09 09  lit p)).........
32e0: 20 28 70 2d 69 64 20 20 20 28 69 66 20 28 3e 20   (p-id   (if (> 
32f0: 28 6c 65 6e 67 74 68 20 70 61 72 74 73 29 20 30  (length parts) 0
3300: 29 0a 09 09 09 09 09 09 09 09 09 20 20 20 20 20  )..........     
3310: 28 73 74 72 69 6e 67 2d 3e 6e 75 6d 62 65 72 20  (string->number 
3320: 28 63 61 72 20 70 61 72 74 73 29 29 0a 09 09 09  (car parts))....
3330: 09 09 09 09 09 09 20 20 20 20 20 23 66 29 29 29  ......     #f)))
3340: 0a 09 09 09 09 09 09 09 20 20 20 20 28 69 66 20  ........    (if 
3350: 70 2d 69 64 0a 09 09 09 09 09 09 09 09 28 62 65  p-id.........(be
3360: 67 69 6e 0a 09 09 09 09 09 09 09 09 20 20 28 64  gin.........  (d
3370: 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 4b 69  ebug:print 0 "Ki
3380: 6c 6c 69 6e 67 20 22 20 28 63 61 64 72 20 70 61  lling " (cadr pa
3390: 72 74 73 29 20 22 3b 20 6b 69 6c 6c 20 2d 39 20  rts) "; kill -9 
33a0: 20 22 20 70 2d 69 64 29 0a 09 09 09 09 09 09 09   " p-id)........
33b0: 09 20 20 28 73 79 73 74 65 6d 20 28 63 6f 6e 63  .  (system (conc
33c0: 20 22 6b 69 6c 6c 20 2d 39 20 22 20 70 2d 69 64   "kill -9 " p-id
33d0: 29 29 29 29 29 29 0a 09 09 09 09 09 09 09 28 63  ))))))........(c
33e0: 61 72 20 70 72 6f 63 65 73 73 65 73 29 29 0a 09  ar processes))..
33f0: 09 09 09 09 09 20 20 20 20 20 20 20 28 73 79 73  .....       (sys
3400: 74 65 6d 20 28 63 6f 6e 63 20 22 6b 69 6c 6c 20  tem (conc "kill 
3410: 2d 39 20 2d 22 20 70 69 64 29 29 29 29 0a 09 09  -9 -" pid))))...
3420: 09 09 09 09 20 20 20 28 62 65 67 69 6e 0a 09 09  ....   (begin...
3430: 09 09 09 09 20 20 20 20 20 28 64 65 62 75 67 3a  ....     (debug:
3440: 70 72 69 6e 74 20 30 20 22 57 41 52 4e 49 4e 47  print 0 "WARNING
3450: 3a 20 52 65 71 75 65 73 74 20 72 65 63 65 69 76  : Request receiv
3460: 65 64 20 74 6f 20 6b 69 6c 6c 20 6a 6f 62 20 62  ed to kill job b
3470: 75 74 20 70 72 6f 62 6c 65 6d 20 77 69 74 68 20  ut problem with 
3480: 70 72 6f 63 65 73 73 2c 20 61 74 74 65 6d 70 74  process, attempt
3490: 69 6e 67 20 74 6f 20 6b 69 6c 6c 20 6d 61 6e 61  ing to kill mana
34a0: 67 65 72 20 70 72 6f 63 65 73 73 22 29 0a 09 09  ger process")...
34b0: 09 09 09 09 20 20 20 20 20 28 74 65 73 74 73 3a  ....     (tests:
34c0: 74 65 73 74 2d 73 65 74 2d 73 74 61 74 75 73 21  test-set-status!
34d0: 20 74 65 73 74 2d 69 64 20 22 4b 49 4c 4c 45 44   test-id "KILLED
34e0: 22 20 20 22 46 41 49 4c 22 0a 09 09 09 09 09 09  "  "FAIL".......
34f0: 09 09 20 20 20 20 20 28 61 72 67 73 3a 67 65 74  ..     (args:get
3500: 2d 61 72 67 20 22 2d 6d 22 29 20 23 66 29 0a 09  -arg "-m") #f)..
3510: 09 09 09 09 09 20 20 20 20 20 28 73 71 6c 69 74  .....     (sqlit
3520: 65 33 3a 66 69 6e 61 6c 69 7a 65 21 20 74 64 62  e3:finalize! tdb
3530: 29 0a 09 09 09 09 09 09 20 20 20 20 20 28 65 78  ).......     (ex
3540: 69 74 20 31 29 29 29 29 0a 09 09 09 09 09 20 20  it 1))))......  
3550: 20 20 20 28 73 65 74 21 20 6b 69 6c 6c 2d 74 72     (set! kill-tr
3560: 69 65 73 20 28 2b 20 31 20 6b 69 6c 6c 2d 74 72  ies (+ 1 kill-tr
3570: 69 65 73 29 29 0a 09 09 09 09 09 20 20 20 20 20  ies))......     
3580: 28 6d 75 74 65 78 2d 75 6e 6c 6f 63 6b 21 20 6d  (mutex-unlock! m
3590: 29 29 29 0a 09 09 09 09 20 20 20 20 20 20 20 3b  ))).....       ;
35a0: 3b 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c  ; (sqlite3:final
35b0: 69 7a 65 21 20 64 62 29 0a 09 09 09 09 20 20 20  ize! db).....   
35c0: 20 20 20 20 28 74 68 72 65 61 64 2d 73 6c 65 65      (thread-slee
35d0: 70 21 20 28 2b 20 31 30 20 28 72 61 6e 64 6f 6d  p! (+ 10 (random
35e0: 20 31 30 29 29 29 20 3b 3b 20 61 64 64 20 73 6f   10))) ;; add so
35f0: 6d 65 20 6a 69 74 74 65 72 20 74 6f 20 74 68 65  me jitter to the
3600: 20 63 61 6c 6c 20 68 6f 6d 65 20 74 69 6d 65 20   call home time 
3610: 74 6f 20 73 70 72 65 61 64 20 6f 75 74 20 74 68  to spread out th
3620: 65 20 64 62 20 61 63 63 65 73 73 65 73 0a 09 09  e db accesses...
3630: 09 09 20 20 20 20 20 20 20 28 6c 6f 6f 70 20 28  ..       (loop (
3640: 63 61 6c 63 2d 6d 69 6e 75 74 65 73 29 29 29 29  calc-minutes))))
3650: 29 29 29 0a 09 09 20 28 74 68 31 20 20 20 20 20  )))... (th1     
3660: 20 20 20 20 20 28 6d 61 6b 65 2d 74 68 72 65 61       (make-threa
3670: 64 20 6d 6f 6e 69 74 6f 72 6a 6f 62 29 29 0a 09  d monitorjob))..
3680: 09 20 28 74 68 32 20 20 20 20 20 20 20 20 20 20  . (th2          
3690: 28 6d 61 6b 65 2d 74 68 72 65 61 64 20 72 75 6e  (make-thread run
36a0: 69 74 29 29 29 0a 09 20 20 20 20 28 73 65 74 21  it)))..    (set!
36b0: 20 6a 6f 62 2d 74 68 72 65 61 64 20 74 68 32 29   job-thread th2)
36c0: 0a 09 20 20 20 20 28 74 68 72 65 61 64 2d 73 74  ..    (thread-st
36d0: 61 72 74 21 20 74 68 31 29 0a 09 20 20 20 20 28  art! th1)..    (
36e0: 74 68 72 65 61 64 2d 73 74 61 72 74 21 20 74 68  thread-start! th
36f0: 32 29 0a 09 20 20 20 20 28 74 68 72 65 61 64 2d  2)..    (thread-
3700: 6a 6f 69 6e 21 20 74 68 32 29 0a 09 20 20 20 20  join! th2)..    
3710: 28 6d 75 74 65 78 2d 6c 6f 63 6b 21 20 6d 29 0a  (mutex-lock! m).
3720: 09 20 20 20 20 28 6c 65 74 2a 20 28 28 69 74 65  .    (let* ((ite
3730: 6d 2d 70 61 74 68 20 28 69 74 65 6d 2d 6c 69 73  m-path (item-lis
3740: 74 2d 3e 70 61 74 68 20 69 74 65 6d 64 61 74 29  t->path itemdat)
3750: 29 0a 09 09 20 20 20 28 74 65 73 74 69 6e 66 6f  )...   (testinfo
3760: 20 20 28 63 64 62 3a 67 65 74 2d 74 65 73 74 2d    (cdb:get-test-
3770: 69 6e 66 6f 2d 62 79 2d 69 64 20 2a 72 75 6e 72  info-by-id *runr
3780: 65 6d 6f 74 65 2a 20 74 65 73 74 2d 69 64 29 29  emote* test-id))
3790: 29 20 3b 3b 20 29 29 20 3b 3b 20 72 75 6e 2d 69  ) ;; )) ;; run-i
37a0: 64 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d  d test-name item
37b0: 2d 70 61 74 68 29 29 29 0a 09 20 20 20 20 20 20  -path)))..      
37c0: 3b 3b 20 41 6d 20 49 20 63 6f 6d 70 6c 65 74 65  ;; Am I complete
37d0: 64 3f 0a 09 20 20 20 20 20 20 28 69 66 20 28 6e  d?..      (if (n
37e0: 6f 74 20 28 65 71 75 61 6c 3f 20 28 64 62 3a 74  ot (equal? (db:t
37f0: 65 73 74 2d 67 65 74 2d 73 74 61 74 65 20 74 65  est-get-state te
3800: 73 74 69 6e 66 6f 29 20 22 43 4f 4d 50 4c 45 54  stinfo) "COMPLET
3810: 45 44 22 29 29 0a 09 09 20 20 28 62 65 67 69 6e  ED"))...  (begin
3820: 0a 09 09 20 20 20 20 28 64 65 62 75 67 3a 70 72  ...    (debug:pr
3830: 69 6e 74 20 32 20 22 54 65 73 74 20 4e 4f 54 20  int 2 "Test NOT 
3840: 6c 6f 67 67 65 64 20 61 73 20 43 4f 4d 50 4c 45  logged as COMPLE
3850: 54 45 44 2c 20 28 73 74 61 74 65 3d 22 20 28 64  TED, (state=" (d
3860: 62 3a 74 65 73 74 2d 67 65 74 2d 73 74 61 74 65  b:test-get-state
3870: 20 74 65 73 74 69 6e 66 6f 29 20 22 29 2c 20 75   testinfo) "), u
3880: 70 64 61 74 69 6e 67 20 72 65 73 75 6c 74 2c 20  pdating result, 
3890: 72 6f 6c 6c 75 70 2d 73 74 61 74 75 73 20 69 73  rollup-status is
38a0: 20 22 20 72 6f 6c 6c 75 70 2d 73 74 61 74 75 73   " rollup-status
38b0: 29 0a 09 09 20 20 20 20 28 74 65 73 74 73 3a 74  )...    (tests:t
38c0: 65 73 74 2d 73 65 74 2d 73 74 61 74 75 73 21 20  est-set-status! 
38d0: 74 65 73 74 2d 69 64 20 0a 09 09 09 09 20 20 20  test-id .....   
38e0: 20 28 69 66 20 6b 69 6c 6c 2d 6a 6f 62 3f 20 22   (if kill-job? "
38f0: 4b 49 4c 4c 45 44 22 20 22 43 4f 4d 50 4c 45 54  KILLED" "COMPLET
3900: 45 44 22 29 0a 09 09 09 09 20 20 20 20 28 63 6f  ED").....    (co
3910: 6e 64 0a 09 09 09 09 20 20 20 20 20 28 28 6e 6f  nd.....     ((no
3920: 74 20 28 76 65 63 74 6f 72 2d 72 65 66 20 65 78  t (vector-ref ex
3930: 69 74 2d 69 6e 66 6f 20 31 29 29 20 22 46 41 49  it-info 1)) "FAI
3940: 4c 22 29 20 3b 3b 20 6a 6f 62 20 66 61 69 6c 65  L") ;; job faile
3950: 64 20 74 6f 20 72 75 6e 0a 09 09 09 09 20 20 20  d to run.....   
3960: 20 20 28 28 65 71 3f 20 72 6f 6c 6c 75 70 2d 73    ((eq? rollup-s
3970: 74 61 74 75 73 20 30 29 0a 09 09 09 09 20 20 20  tatus 0).....   
3980: 20 20 20 3b 3b 20 69 66 20 74 68 65 20 63 75 72     ;; if the cur
3990: 72 65 6e 74 20 73 74 61 74 75 73 20 69 73 20 41  rent status is A
39a0: 55 54 4f 20 74 68 65 20 64 65 66 65 72 20 74 6f  UTO the defer to
39b0: 20 74 68 65 20 63 61 6c 63 75 6c 61 74 65 64 20   the calculated 
39c0: 76 61 6c 75 65 20 28 69 2e 65 2e 20 6c 65 61 76  value (i.e. leav
39d0: 65 20 74 68 69 73 20 41 55 54 4f 29 0a 09 09 09  e this AUTO)....
39e0: 09 20 20 20 20 20 20 28 69 66 20 28 65 71 75 61  .      (if (equa
39f0: 6c 3f 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d  l? (db:test-get-
3a00: 73 74 61 74 75 73 20 74 65 73 74 69 6e 66 6f 29  status testinfo)
3a10: 20 22 41 55 54 4f 22 29 20 22 41 55 54 4f 22 20   "AUTO") "AUTO" 
3a20: 22 50 41 53 53 22 29 29 0a 09 09 09 09 20 20 20  "PASS")).....   
3a30: 20 20 28 28 65 71 3f 20 72 6f 6c 6c 75 70 2d 73    ((eq? rollup-s
3a40: 74 61 74 75 73 20 31 29 20 22 46 41 49 4c 22 29  tatus 1) "FAIL")
3a50: 0a 09 09 09 09 20 20 20 20 20 28 28 65 71 3f 20  .....     ((eq? 
3a60: 72 6f 6c 6c 75 70 2d 73 74 61 74 75 73 20 32 29  rollup-status 2)
3a70: 0a 09 09 09 09 20 20 20 20 20 20 3b 3b 20 69 66  .....      ;; if
3a80: 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61   the current sta
3a90: 74 75 73 20 69 73 20 41 55 54 4f 20 74 68 65 20  tus is AUTO the 
3aa0: 64 65 66 65 72 20 74 6f 20 74 68 65 20 63 61 6c  defer to the cal
3ab0: 63 75 6c 61 74 65 64 20 76 61 6c 75 65 20 62 75  culated value bu
3ac0: 74 20 71 75 61 6c 69 66 79 20 28 69 2e 65 2e 20  t qualify (i.e. 
3ad0: 6d 61 6b 65 20 74 68 69 73 20 41 55 54 4f 2d 57  make this AUTO-W
3ae0: 41 52 4e 29 0a 09 09 09 09 20 20 20 20 20 20 28  ARN).....      (
3af0: 69 66 20 28 65 71 75 61 6c 3f 20 28 64 62 3a 74  if (equal? (db:t
3b00: 65 73 74 2d 67 65 74 2d 73 74 61 74 75 73 20 74  est-get-status t
3b10: 65 73 74 69 6e 66 6f 29 20 22 41 55 54 4f 22 29  estinfo) "AUTO")
3b20: 20 22 41 55 54 4f 2d 57 41 52 4e 22 20 22 57 41   "AUTO-WARN" "WA
3b30: 52 4e 22 29 29 0a 09 09 09 09 20 20 20 20 20 28  RN")).....     (
3b40: 65 6c 73 65 20 22 46 41 49 4c 22 29 29 0a 09 09  else "FAIL"))...
3b50: 09 09 20 20 20 20 28 61 72 67 73 3a 67 65 74 2d  ..    (args:get-
3b60: 61 72 67 20 22 2d 6d 22 29 20 23 66 29 29 29 0a  arg "-m") #f))).
3b70: 09 20 20 20 20 20 20 3b 3b 20 66 6f 72 20 61 75  .      ;; for au
3b80: 74 6f 6d 61 74 65 64 20 63 72 65 61 74 69 6f 6e  tomated creation
3b90: 20 6f 66 20 74 68 65 20 72 6f 6c 6c 75 70 20 68   of the rollup h
3ba0: 74 6d 6c 20 66 69 6c 65 20 74 68 69 73 20 69 73  tml file this is
3bb0: 20 61 20 67 6f 6f 64 20 70 6c 61 63 65 2e 2e 2e   a good place...
3bc0: 0a 09 20 20 20 20 20 20 28 69 66 20 28 6e 6f 74  ..      (if (not
3bd0: 20 28 65 71 75 61 6c 3f 20 69 74 65 6d 2d 70 61   (equal? item-pa
3be0: 74 68 20 22 22 29 29 0a 09 09 20 20 28 6f 70 65  th ""))...  (ope
3bf0: 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20 74 65 73 74  n-run-close test
3c00: 73 3a 73 75 6d 6d 61 72 69 7a 65 2d 69 74 65 6d  s:summarize-item
3c10: 73 20 23 66 20 72 75 6e 2d 69 64 20 74 65 73 74  s #f run-id test
3c20: 2d 6e 61 6d 65 20 23 66 29 29 20 3b 3b 20 64 6f  -name #f)) ;; do
3c30: 6e 27 74 20 66 6f 72 63 65 20 2d 20 6a 75 73 74  n't force - just
3c40: 20 75 70 64 61 74 65 20 69 66 20 6e 6f 0a 09 20   update if no.. 
3c50: 20 20 20 20 20 29 0a 09 20 20 20 20 28 6d 75 74       )..    (mut
3c60: 65 78 2d 75 6e 6c 6f 63 6b 21 20 6d 29 0a 09 20  ex-unlock! m).. 
3c70: 20 20 20 3b 3b 20 28 65 78 65 63 2d 72 65 73 75     ;; (exec-resu
3c80: 6c 74 73 20 28 63 6d 64 2d 72 75 6e 2d 3e 6c 69  lts (cmd-run->li
3c90: 73 74 20 66 75 6c 6c 72 75 6e 73 63 72 69 70 74  st fullrunscript
3ca0: 29 29 20 3b 3b 20 20 28 6c 69 73 74 20 22 3e 22  )) ;;  (list ">"
3cb0: 20 28 63 6f 6e 63 20 74 65 73 74 2d 6e 61 6d 65   (conc test-name
3cc0: 20 22 2d 72 75 6e 2e 6c 6f 67 22 29 29 29 29 0a   "-run.log")))).
3cd0: 09 20 20 20 20 3b 3b 20 28 73 75 63 63 65 73 73  .    ;; (success
3ce0: 20 20 20 20 20 20 65 78 65 63 2d 72 65 73 75 6c        exec-resul
3cf0: 74 73 29 29 20 3b 3b 20 28 65 71 3f 20 28 63 61  ts)) ;; (eq? (ca
3d00: 64 72 20 65 78 65 63 2d 72 65 73 75 6c 74 73 29  dr exec-results)
3d10: 20 30 29 29 29 0a 09 20 20 20 20 28 64 65 62 75   0)))..    (debu
3d20: 67 3a 70 72 69 6e 74 20 32 20 22 4f 75 74 70 75  g:print 2 "Outpu
3d30: 74 20 66 72 6f 6d 20 72 75 6e 6e 69 6e 67 20 22  t from running "
3d40: 20 66 75 6c 6c 72 75 6e 73 63 72 69 70 74 20 22   fullrunscript "
3d50: 2c 20 70 69 64 20 22 20 28 76 65 63 74 6f 72 2d  , pid " (vector-
3d60: 72 65 66 20 65 78 69 74 2d 69 6e 66 6f 20 30 29  ref exit-info 0)
3d70: 20 22 20 69 6e 20 77 6f 72 6b 20 61 72 65 61 20   " in work area 
3d80: 22 20 0a 09 09 09 20 77 6f 72 6b 2d 61 72 65 61  " .... work-area
3d90: 20 22 3a 5c 6e 3d 3d 3d 3d 5c 6e 20 65 78 69 74   ":\n====\n exit
3da0: 20 63 6f 64 65 20 22 20 28 76 65 63 74 6f 72 2d   code " (vector-
3db0: 72 65 66 20 65 78 69 74 2d 69 6e 66 6f 20 32 29  ref exit-info 2)
3dc0: 20 22 5c 6e 22 20 22 3d 3d 3d 3d 5c 6e 22 29 0a   "\n" "====\n").
3dd0: 09 20 20 20 20 3b 3b 20 28 73 71 6c 69 74 65 33  .    ;; (sqlite3
3de0: 3a 66 69 6e 61 6c 69 7a 65 21 20 64 62 29 0a 09  :finalize! db)..
3df0: 20 20 20 20 3b 3b 20 28 73 71 6c 69 74 65 33 3a      ;; (sqlite3:
3e00: 66 69 6e 61 6c 69 7a 65 21 20 74 64 62 29 0a 09  finalize! tdb)..
3e10: 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 76 65      (if (not (ve
3e20: 63 74 6f 72 2d 72 65 66 20 65 78 69 74 2d 69 6e  ctor-ref exit-in
3e30: 66 6f 20 31 29 29 0a 09 09 28 65 78 69 74 20 34  fo 1))...(exit 4
3e40: 29 29 29 29 29 29 29 0a 0a 3b 3b 20 73 65 74 20  )))))))..;; set 
3e50: 75 70 20 74 68 65 20 76 65 72 79 20 62 61 73 69  up the very basi
3e60: 63 73 20 6e 65 65 64 65 64 20 66 6f 72 20 64 6f  cs needed for do
3e70: 69 6e 67 20 61 6e 79 74 68 69 6e 67 20 68 65 72  ing anything her
3e80: 65 2e 0a 28 64 65 66 69 6e 65 20 28 73 65 74 75  e..(define (setu
3e90: 70 2d 66 6f 72 2d 72 75 6e 29 0a 20 20 3b 3b 20  p-for-run).  ;; 
3ea0: 77 6f 75 6c 64 20 73 65 74 20 76 61 6c 75 65 73  would set values
3eb0: 20 66 6f 72 20 4b 45 59 53 20 69 6e 20 74 68 65   for KEYS in the
3ec0: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 68 65 72   environment her
3ed0: 65 20 66 6f 72 20 62 65 74 74 65 72 20 73 75 70  e for better sup
3ee0: 70 6f 72 74 20 6f 66 20 65 6e 76 2d 6f 76 65 72  port of env-over
3ef0: 72 69 64 65 20 62 75 74 20 0a 20 20 3b 3b 20 68  ride but .  ;; h
3f00: 61 76 65 20 63 68 69 63 6b 65 6e 2f 65 67 67 20  ave chicken/egg 
3f10: 73 63 65 6e 61 72 69 6f 2e 20 6e 65 65 64 20 74  scenario. need t
3f20: 6f 20 72 65 61 64 20 6d 65 67 61 74 65 73 74 2e  o read megatest.
3f30: 63 6f 6e 66 69 67 20 74 68 65 6e 20 72 65 61 64  config then read
3f40: 20 69 74 20 61 67 61 69 6e 2e 20 47 6f 69 6e 67   it again. Going
3f50: 20 74 6f 20 0a 20 20 3b 3b 20 70 61 73 73 20 6f   to .  ;; pass o
3f60: 6e 20 74 68 61 74 20 69 64 65 61 20 66 6f 72 20  n that idea for 
3f70: 6e 6f 77 0a 20 20 3b 3b 20 73 70 65 63 69 61 6c  now.  ;; special
3f80: 20 63 61 73 65 0a 20 20 28 73 65 74 21 20 2a 63   case.  (set! *c
3f90: 6f 6e 66 69 67 69 6e 66 6f 2a 20 28 66 69 6e 64  onfiginfo* (find
3fa0: 2d 61 6e 64 2d 72 65 61 64 2d 63 6f 6e 66 69 67  -and-read-config
3fb0: 20 0a 09 09 20 20 20 20 20 20 28 69 66 20 28 61   ...      (if (a
3fc0: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 63 6f  rgs:get-arg "-co
3fd0: 6e 66 69 67 22 29 28 61 72 67 73 3a 67 65 74 2d  nfig")(args:get-
3fe0: 61 72 67 20 22 2d 63 6f 6e 66 69 67 22 29 20 22  arg "-config") "
3ff0: 6d 65 67 61 74 65 73 74 2e 63 6f 6e 66 69 67 22  megatest.config"
4000: 29 0a 09 09 20 20 20 20 20 20 65 6e 76 69 72 6f  )...      enviro
4010: 6e 2d 70 61 74 74 3a 20 22 65 6e 76 2d 6f 76 65  n-patt: "env-ove
4020: 72 72 69 64 65 22 0a 09 09 20 20 20 20 20 20 67  rride"...      g
4030: 69 76 65 6e 2d 74 6f 70 70 61 74 68 3a 20 28 67  iven-toppath: (g
4040: 65 74 2d 65 6e 76 69 72 6f 6e 6d 65 6e 74 2d 76  et-environment-v
4050: 61 72 69 61 62 6c 65 20 22 4d 54 5f 52 55 4e 5f  ariable "MT_RUN_
4060: 41 52 45 41 5f 48 4f 4d 45 22 29 0a 09 09 20 20  AREA_HOME")...  
4070: 20 20 20 20 70 61 74 68 65 6e 76 76 61 72 3a 20      pathenvvar: 
4080: 22 4d 54 5f 52 55 4e 5f 41 52 45 41 5f 48 4f 4d  "MT_RUN_AREA_HOM
4090: 45 22 29 29 0a 20 20 28 73 65 74 21 20 2a 63 6f  E")).  (set! *co
40a0: 6e 66 69 67 64 61 74 2a 20 20 28 69 66 20 28 63  nfigdat*  (if (c
40b0: 61 72 20 2a 63 6f 6e 66 69 67 69 6e 66 6f 2a 29  ar *configinfo*)
40c0: 28 63 61 72 20 2a 63 6f 6e 66 69 67 69 6e 66 6f  (car *configinfo
40d0: 2a 29 20 23 66 29 29 0a 20 20 28 73 65 74 21 20  *) #f)).  (set! 
40e0: 2a 74 6f 70 70 61 74 68 2a 20 20 20 20 28 69 66  *toppath*    (if
40f0: 20 28 63 61 72 20 2a 63 6f 6e 66 69 67 69 6e 66   (car *configinf
4100: 6f 2a 29 28 63 61 64 72 20 2a 63 6f 6e 66 69 67  o*)(cadr *config
4110: 69 6e 66 6f 2a 29 20 23 66 29 29 0a 20 20 28 69  info*) #f)).  (i
4120: 66 20 2a 74 6f 70 70 61 74 68 2a 0a 20 20 20 20  f *toppath*.    
4130: 20 20 28 73 65 74 65 6e 76 20 22 4d 54 5f 52 55    (setenv "MT_RU
4140: 4e 5f 41 52 45 41 5f 48 4f 4d 45 22 20 2a 74 6f  N_AREA_HOME" *to
4150: 70 70 61 74 68 2a 29 20 3b 3b 20 74 6f 20 62 65  ppath*) ;; to be
4160: 20 64 65 70 72 65 63 61 74 65 64 0a 20 20 20 20   deprecated.    
4170: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30    (debug:print 0
4180: 20 22 45 52 52 4f 52 3a 20 66 61 69 6c 65 64 20   "ERROR: failed 
4190: 74 6f 20 66 69 6e 64 20 74 68 65 20 74 6f 70 20  to find the top 
41a0: 70 61 74 68 20 74 6f 20 79 6f 75 72 20 72 75 6e  path to your run
41b0: 20 73 65 74 75 70 2e 22 29 29 0a 20 20 2a 74 6f   setup.")).  *to
41c0: 70 70 61 74 68 2a 29 0a 0a 28 64 65 66 69 6e 65  ppath*)..(define
41d0: 20 28 67 65 74 2d 62 65 73 74 2d 64 69 73 6b 20   (get-best-disk 
41e0: 63 6f 6e 66 64 61 74 29 0a 20 20 28 6c 65 74 2a  confdat).  (let*
41f0: 20 28 28 64 69 73 6b 73 20 20 20 20 28 68 61 73   ((disks    (has
4200: 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61  h-table-ref/defa
4210: 75 6c 74 20 63 6f 6e 66 64 61 74 20 22 64 69 73  ult confdat "dis
4220: 6b 73 22 20 23 66 29 29 0a 09 20 28 62 65 73 74  ks" #f)).. (best
4230: 20 20 20 20 20 23 66 29 0a 09 20 28 62 65 73 74       #f).. (best
4240: 73 69 7a 65 20 30 29 29 0a 20 20 20 20 28 69 66  size 0)).    (if
4250: 20 64 69 73 6b 73 20 0a 09 28 66 6f 72 2d 65 61   disks ..(for-ea
4260: 63 68 20 0a 09 20 28 6c 61 6d 62 64 61 20 28 64  ch .. (lambda (d
4270: 69 73 6b 2d 6e 75 6d 29 0a 09 20 20 20 28 6c 65  isk-num)..   (le
4280: 74 2a 20 28 28 64 69 72 70 61 74 68 20 20 20 20  t* ((dirpath    
4290: 28 63 61 64 72 20 28 61 73 73 6f 63 20 64 69 73  (cadr (assoc dis
42a0: 6b 2d 6e 75 6d 20 64 69 73 6b 73 29 29 29 0a 09  k-num disks)))..
42b0: 09 20 20 28 66 72 65 65 73 70 63 20 20 20 20 28  .  (freespc    (
42c0: 69 66 20 28 61 6e 64 20 28 64 69 72 65 63 74 6f  if (and (directo
42d0: 72 79 3f 20 64 69 72 70 61 74 68 29 0a 09 09 09  ry? dirpath)....
42e0: 09 20 20 20 20 20 20 20 28 66 69 6c 65 2d 77 72  .       (file-wr
42f0: 69 74 65 2d 61 63 63 65 73 73 3f 20 64 69 72 70  ite-access? dirp
4300: 61 74 68 29 29 0a 09 09 09 09 20 20 28 67 65 74  ath)).....  (get
4310: 2d 64 66 20 64 69 72 70 61 74 68 29 0a 09 09 09  -df dirpath)....
4320: 09 20 20 28 62 65 67 69 6e 0a 09 09 09 09 20 20  .  (begin.....  
4330: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30    (debug:print 0
4340: 20 22 57 41 52 4e 49 4e 47 3a 20 70 61 74 68 20   "WARNING: path 
4350: 22 20 64 69 72 70 61 74 68 20 22 20 69 6e 20 5b  " dirpath " in [
4360: 64 69 73 6b 73 5d 20 73 65 63 74 69 6f 6e 20 6e  disks] section n
4370: 6f 74 20 76 61 6c 69 64 20 6f 72 20 77 72 69 74  ot valid or writ
4380: 61 62 6c 65 22 29 0a 09 09 09 09 20 20 20 20 30  able").....    0
4390: 29 29 29 29 0a 09 20 20 20 20 20 28 69 66 20 28  ))))..     (if (
43a0: 3e 20 66 72 65 65 73 70 63 20 62 65 73 74 73 69  > freespc bestsi
43b0: 7a 65 29 0a 09 09 20 28 62 65 67 69 6e 0a 09 09  ze)... (begin...
43c0: 20 20 20 28 73 65 74 21 20 62 65 73 74 20 20 20     (set! best   
43d0: 20 20 64 69 72 70 61 74 68 29 0a 09 09 20 20 20    dirpath)...   
43e0: 28 73 65 74 21 20 62 65 73 74 73 69 7a 65 20 66  (set! bestsize f
43f0: 72 65 65 73 70 63 29 29 29 29 29 0a 09 20 28 6d  reespc))))).. (m
4400: 61 70 20 63 61 72 20 64 69 73 6b 73 29 29 29 0a  ap car disks))).
4410: 20 20 20 20 28 69 66 20 62 65 73 74 0a 09 62 65      (if best..be
4420: 73 74 0a 09 28 62 65 67 69 6e 0a 09 20 20 28 64  st..(begin..  (d
4430: 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 45 52  ebug:print 0 "ER
4440: 52 4f 52 3a 20 4e 6f 20 76 61 6c 69 64 20 64 69  ROR: No valid di
4450: 73 6b 73 20 66 6f 75 6e 64 20 69 6e 20 6d 65 67  sks found in meg
4460: 61 74 65 73 74 2e 63 6f 6e 66 69 67 2e 20 50 6c  atest.config. Pl
4470: 65 61 73 65 20 61 64 64 20 73 6f 6d 65 20 74 6f  ease add some to
4480: 20 79 6f 75 72 20 5b 64 69 73 6b 73 5d 20 73 65   your [disks] se
4490: 63 74 69 6f 6e 22 29 0a 09 20 20 28 65 78 69 74  ction")..  (exit
44a0: 20 31 29 29 29 29 29 0a 0a 3b 3b 20 44 65 73 69   1)))))..;; Desi
44b0: 72 65 64 20 64 69 72 65 63 74 6f 72 79 20 73 74  red directory st
44c0: 72 75 63 74 75 72 65 3a 0a 3b 3b 0a 3b 3b 20 20  ructure:.;;.;;  
44d0: 3c 6c 69 6e 6b 64 69 72 3e 20 2d 20 3c 74 61 72  <linkdir> - <tar
44e0: 67 65 74 3e 20 2d 20 3c 74 65 73 74 6e 61 6d 65  get> - <testname
44f0: 3e 20 2d 2e 0a 3b 3b 20 20 20 20 20 20 20 20 20  > -..;;         
4500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4510: 20 20 20 20 20 20 20 20 20 20 20 20 7c 0a 3b 3b              |.;;
4520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4540: 20 20 20 20 20 76 0a 3b 3b 20 20 3c 72 75 6e 64       v.;;  <rund
4550: 69 72 3e 20 20 2d 20 20 3c 74 61 72 67 65 74 3e  ir>  -  <target>
4560: 20 20 2d 20 20 20 20 3c 74 65 73 74 6e 61 6d 65    -    <testname
4570: 3e 20 2d 7c 2d 20 3c 69 74 65 6d 70 61 74 68 28  > -|- <itempath(
4580: 73 29 3e 0a 3b 3b 0a 3b 3b 20 20 64 69 72 20 73  s)>.;;.;;  dir s
4590: 74 6f 72 65 64 20 69 6e 20 74 65 73 74 20 69 73  tored in test is
45a0: 3a 0a 3b 3b 20 0a 3b 3b 20 20 3c 6c 69 6e 6b 64  :.;; .;;  <linkd
45b0: 69 72 3e 20 2d 20 3c 74 61 72 67 65 74 3e 20 2d  ir> - <target> -
45c0: 20 3c 74 65 73 74 6e 61 6d 65 3e 20 5b 20 2d 20   <testname> [ - 
45d0: 3c 69 74 65 6d 70 61 74 68 3e 20 5d 0a 3b 3b 20  <itempath> ].;; 
45e0: 0a 3b 3b 20 41 6c 6c 20 6c 6f 67 20 66 69 6c 65  .;; All log file
45f0: 20 6c 69 6e 6b 73 20 73 68 6f 75 6c 64 20 62 65   links should be
4600: 20 73 74 6f 72 65 64 20 72 65 6c 61 74 69 76 65   stored relative
4610: 20 74 6f 20 74 68 65 20 74 6f 70 20 6f 66 20 6c   to the top of l
4620: 69 6e 6b 20 70 61 74 68 0a 3b 3b 20 20 0a 3b 3b  ink path.;;  .;;
4630: 20 3c 74 61 72 67 65 74 3e 20 2d 20 3c 74 65 73   <target> - <tes
4640: 74 6e 61 6d 65 3e 20 5b 20 2d 20 3c 69 74 65 6d  tname> [ - <item
4650: 70 61 74 68 3e 20 5d 20 0a 3b 3b 0a 28 64 65 66  path> ] .;;.(def
4660: 69 6e 65 20 28 63 72 65 61 74 65 2d 77 6f 72 6b  ine (create-work
4670: 2d 61 72 65 61 20 64 62 20 72 75 6e 2d 69 64 20  -area db run-id 
4680: 74 65 73 74 2d 69 64 20 74 65 73 74 2d 73 72 63  test-id test-src
4690: 2d 70 61 74 68 20 64 69 73 6b 2d 70 61 74 68 20  -path disk-path 
46a0: 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 64 61 74  testname itemdat
46b0: 29 0a 20 20 28 6c 65 74 2a 20 28 28 72 75 6e 2d  ).  (let* ((run-
46c0: 69 6e 66 6f 20 28 63 64 62 3a 72 65 6d 6f 74 65  info (cdb:remote
46d0: 2d 72 75 6e 20 64 62 3a 67 65 74 2d 72 75 6e 2d  -run db:get-run-
46e0: 69 6e 66 6f 20 23 66 20 72 75 6e 2d 69 64 29 29  info #f run-id))
46f0: 0a 09 20 28 69 74 65 6d 2d 70 61 74 68 20 28 69  .. (item-path (i
4700: 74 65 6d 2d 6c 69 73 74 2d 3e 70 61 74 68 20 69  tem-list->path i
4710: 74 65 6d 64 61 74 29 29 0a 09 20 28 72 75 6e 6e  temdat)).. (runn
4720: 61 6d 65 20 20 28 64 62 3a 67 65 74 2d 76 61 6c  ame  (db:get-val
4730: 75 65 2d 62 79 2d 68 65 61 64 65 72 20 28 64 62  ue-by-header (db
4740: 3a 67 65 74 2d 72 6f 77 20 72 75 6e 2d 69 6e 66  :get-row run-inf
4750: 6f 29 0a 09 09 09 09 09 20 20 20 28 64 62 3a 67  o)......   (db:g
4760: 65 74 2d 68 65 61 64 65 72 20 72 75 6e 2d 69 6e  et-header run-in
4770: 66 6f 29 0a 09 09 09 09 09 20 20 20 22 72 75 6e  fo)......   "run
4780: 6e 61 6d 65 22 29 29 0a 09 20 3b 3b 20 63 6f 6e  name")).. ;; con
4790: 76 65 72 74 20 62 61 63 6b 20 74 6f 20 64 62 3a  vert back to db:
47a0: 20 66 72 6f 6d 20 72 64 62 3a 20 2d 20 74 68 69   from rdb: - thi
47b0: 73 20 69 73 20 61 6c 77 61 79 73 20 72 75 6e 20  s is always run 
47c0: 61 74 20 73 65 72 76 65 72 20 65 6e 64 0a 09 20  at server end.. 
47d0: 28 6b 65 79 2d 76 61 6c 73 20 28 63 64 62 3a 72  (key-vals (cdb:r
47e0: 65 6d 6f 74 65 2d 72 75 6e 20 64 62 3a 67 65 74  emote-run db:get
47f0: 2d 6b 65 79 2d 76 61 6c 73 20 23 66 20 72 75 6e  -key-vals #f run
4800: 2d 69 64 29 29 0a 09 20 28 74 61 72 67 65 74 20  -id)).. (target 
4810: 20 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73    (string-inters
4820: 70 65 72 73 65 20 6b 65 79 2d 76 61 6c 73 20 22  perse key-vals "
4830: 2f 22 29 29 0a 0a 09 20 28 6e 6f 74 2d 69 74 65  /"))... (not-ite
4840: 72 61 74 65 64 20 20 28 65 71 75 61 6c 3f 20 22  rated  (equal? "
4850: 22 20 69 74 65 6d 2d 70 61 74 68 29 29 0a 0a 09  " item-path))...
4860: 20 3b 3b 20 61 6c 6c 20 74 65 73 74 73 20 61 72   ;; all tests ar
4870: 65 20 66 6f 75 6e 64 20 61 74 20 3c 72 75 6e 64  e found at <rund
4880: 69 72 3e 2f 74 65 73 74 2d 62 61 73 65 20 6f 72  ir>/test-base or
4890: 20 3c 6c 69 6e 6b 64 69 72 3e 2f 74 65 73 74 2d   <linkdir>/test-
48a0: 62 61 73 65 0a 09 20 28 74 65 73 74 74 6f 70 2d  base.. (testtop-
48b0: 62 61 73 65 20 28 63 6f 6e 63 20 74 61 72 67 65  base (conc targe
48c0: 74 20 22 2f 22 20 72 75 6e 6e 61 6d 65 20 22 2f  t "/" runname "/
48d0: 22 20 74 65 73 74 6e 61 6d 65 29 29 0a 09 20 28  " testname)).. (
48e0: 74 65 73 74 2d 62 61 73 65 20 20 20 20 28 63 6f  test-base    (co
48f0: 6e 63 20 74 65 73 74 74 6f 70 2d 62 61 73 65 20  nc testtop-base 
4900: 28 69 66 20 6e 6f 74 2d 69 74 65 72 61 74 65 64  (if not-iterated
4910: 20 22 22 20 22 2f 22 29 20 69 74 65 6d 2d 70 61   "" "/") item-pa
4920: 74 68 29 29 0a 0a 09 20 3b 3b 20 6e 62 2f 2f 20  th))... ;; nb// 
4930: 69 66 20 69 74 65 6d 70 61 74 68 20 69 73 20 6e  if itempath is n
4940: 6f 74 20 22 22 20 74 68 65 6e 20 69 74 20 69 73  ot "" then it is
4950: 20 70 72 65 66 69 78 65 64 20 77 69 74 68 20 22   prefixed with "
4960: 2f 22 0a 09 20 28 74 6f 70 74 65 73 74 2d 70 61  /".. (toptest-pa
4970: 74 68 20 28 63 6f 6e 63 20 64 69 73 6b 2d 70 61  th (conc disk-pa
4980: 74 68 20 22 2f 22 20 74 65 73 74 74 6f 70 2d 62  th "/" testtop-b
4990: 61 73 65 29 29 0a 09 20 28 74 65 73 74 2d 70 61  ase)).. (test-pa
49a0: 74 68 20 20 20 20 28 63 6f 6e 63 20 64 69 73 6b  th    (conc disk
49b0: 2d 70 61 74 68 20 22 2f 22 20 74 65 73 74 2d 62  -path "/" test-b
49c0: 61 73 65 29 29 0a 0a 09 20 3b 3b 20 65 6e 73 75  ase))... ;; ensu
49d0: 72 65 20 74 68 69 73 20 65 78 69 73 74 73 20 66  re this exists f
49e0: 69 72 73 74 20 61 73 20 6c 69 6e 6b 73 20 74 6f  irst as links to
49f0: 20 73 75 62 74 65 73 74 73 20 6d 75 73 74 20 62   subtests must b
4a00: 65 20 63 72 65 61 74 65 64 20 74 68 65 72 65 0a  e created there.
4a10: 09 20 28 6c 69 6e 6b 74 72 65 65 20 20 28 6c 65  . (linktree  (le
4a20: 74 20 28 28 72 64 20 28 63 6f 6e 66 69 67 2d 6c  t ((rd (config-l
4a30: 6f 6f 6b 75 70 20 2a 63 6f 6e 66 69 67 64 61 74  ookup *configdat
4a40: 2a 20 22 73 65 74 75 70 22 20 22 6c 69 6e 6b 74  * "setup" "linkt
4a50: 72 65 65 22 29 29 29 0a 09 09 20 20 20 20 20 20  ree")))...      
4a60: 28 69 66 20 72 64 20 72 64 20 28 63 6f 6e 63 20  (if rd rd (conc 
4a70: 2a 74 6f 70 70 61 74 68 2a 20 22 2f 72 75 6e 73  *toppath* "/runs
4a80: 22 29 29 29 29 0a 0a 09 20 28 6c 6e 6b 62 61 73  "))))... (lnkbas
4a90: 65 20 20 28 63 6f 6e 63 20 6c 69 6e 6b 74 72 65  e  (conc linktre
4aa0: 65 20 22 2f 22 20 74 61 72 67 65 74 20 22 2f 22  e "/" target "/"
4ab0: 20 72 75 6e 6e 61 6d 65 29 29 0a 09 20 28 6c 6e   runname)).. (ln
4ac0: 6b 70 61 74 68 20 20 28 63 6f 6e 63 20 6c 6e 6b  kpath  (conc lnk
4ad0: 62 61 73 65 20 22 2f 22 20 74 65 73 74 6e 61 6d  base "/" testnam
4ae0: 65 29 29 0a 09 20 28 6c 6e 6b 70 61 74 68 66 20  e)).. (lnkpathf 
4af0: 28 63 6f 6e 63 20 6c 6e 6b 70 61 74 68 20 28 69  (conc lnkpath (i
4b00: 66 20 6e 6f 74 2d 69 74 65 72 61 74 65 64 20 22  f not-iterated "
4b10: 22 20 22 2f 22 29 20 69 74 65 6d 2d 70 61 74 68  " "/") item-path
4b20: 29 29 29 0a 0a 20 20 20 20 3b 3b 20 55 70 64 61  )))..    ;; Upda
4b30: 74 65 20 74 68 65 20 72 75 6e 64 69 72 20 70 61  te the rundir pa
4b40: 74 68 20 69 6e 20 74 68 65 20 74 65 73 74 20 72  th in the test r
4b50: 65 63 6f 72 64 20 66 6f 72 20 61 6c 6c 0a 20 20  ecord for all.  
4b60: 20 20 28 63 64 62 3a 74 65 73 74 2d 73 65 74 2d    (cdb:test-set-
4b70: 72 75 6e 64 69 72 2d 62 79 2d 74 65 73 74 2d 69  rundir-by-test-i
4b80: 64 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 74 65  d *runremote* te
4b90: 73 74 2d 69 64 20 6c 6e 6b 70 61 74 68 66 29 0a  st-id lnkpathf).
4ba0: 0a 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e  .    (debug:prin
4bb0: 74 20 32 20 22 49 4e 46 4f 3a 5c 6e 20 20 20 20  t 2 "INFO:\n    
4bc0: 20 20 20 6c 6e 6b 62 61 73 65 3d 22 20 6c 6e 6b     lnkbase=" lnk
4bd0: 62 61 73 65 20 22 5c 6e 20 20 20 20 20 20 20 6c  base "\n       l
4be0: 6e 6b 70 61 74 68 3d 22 20 6c 6e 6b 70 61 74 68  nkpath=" lnkpath
4bf0: 20 22 5c 6e 20 20 74 6f 70 74 65 73 74 2d 70 61   "\n  toptest-pa
4c00: 74 68 3d 22 20 74 6f 70 74 65 73 74 2d 70 61 74  th=" toptest-pat
4c10: 68 20 22 5c 6e 20 20 20 20 20 74 65 73 74 2d 70  h "\n     test-p
4c20: 61 74 68 3d 22 20 74 65 73 74 2d 70 61 74 68 29  ath=" test-path)
4c30: 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 66  .    (if (not (f
4c40: 69 6c 65 2d 65 78 69 73 74 73 3f 20 6c 69 6e 6b  ile-exists? link
4c50: 74 72 65 65 29 29 0a 09 28 62 65 67 69 6e 0a 09  tree))..(begin..
4c60: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30    (debug:print 0
4c70: 20 22 57 41 52 4e 49 4e 47 3a 20 6c 69 6e 6b 74   "WARNING: linkt
4c80: 72 65 65 20 64 69 64 20 6e 6f 74 20 65 78 69 73  ree did not exis
4c90: 74 21 20 43 72 65 61 74 69 6e 67 20 69 74 20 6e  t! Creating it n
4ca0: 6f 77 20 61 74 20 22 20 6c 69 6e 6b 74 72 65 65  ow at " linktree
4cb0: 29 0a 09 20 20 28 63 72 65 61 74 65 2d 64 69 72  )..  (create-dir
4cc0: 65 63 74 6f 72 79 20 6c 69 6e 6b 74 72 65 65 20  ectory linktree 
4cd0: 23 74 29 29 29 20 3b 3b 20 28 73 79 73 74 65 6d  #t))) ;; (system
4ce0: 20 28 63 6f 6e 63 20 22 6d 6b 64 69 72 20 2d 70   (conc "mkdir -p
4cf0: 20 22 20 6c 69 6e 6b 74 72 65 65 29 29 29 29 0a   " linktree)))).
4d00: 20 20 20 20 3b 3b 20 63 72 65 61 74 65 20 74 68      ;; create th
4d10: 65 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20  e directory for 
4d20: 74 68 65 20 74 65 73 74 73 20 64 69 72 20 6c 69  the tests dir li
4d30: 6e 6b 73 2c 20 74 68 69 73 20 69 73 20 6e 65 65  nks, this is nee
4d40: 64 65 64 20 6e 6f 20 6d 61 74 74 65 72 20 77 68  ded no matter wh
4d50: 61 74 2e 2e 2e 0a 20 20 20 20 28 69 66 20 28 6e  at....    (if (n
4d60: 6f 74 20 28 64 69 72 65 63 74 6f 72 79 2d 65 78  ot (directory-ex
4d70: 69 73 74 73 3f 20 6c 6e 6b 62 61 73 65 29 29 0a  ists? lnkbase)).
4d80: 09 28 63 72 65 61 74 65 2d 64 69 72 65 63 74 6f  .(create-directo
4d90: 72 79 20 6c 6e 6b 62 61 73 65 20 23 74 29 29 0a  ry lnkbase #t)).
4da0: 20 20 20 20 0a 20 20 20 20 3b 3b 20 75 70 64 61      .    ;; upda
4db0: 74 65 20 74 68 65 20 74 6f 70 74 65 73 74 20 72  te the toptest r
4dc0: 65 63 6f 72 64 20 77 69 74 68 20 69 74 73 20 6c  ecord with its l
4dd0: 6f 63 61 74 69 6f 6e 20 72 75 6e 64 69 72 2c 20  ocation rundir, 
4de0: 63 61 63 68 65 20 74 68 65 20 70 61 74 68 0a 20  cache the path. 
4df0: 20 20 20 3b 3b 20 54 68 69 73 20 77 61 73 73 20     ;; This wass 
4e00: 68 69 67 68 6c 79 20 69 6e 65 66 66 69 63 69 65  highly inefficie
4e10: 6e 74 2c 20 6f 6e 65 20 64 62 20 77 72 69 74 65  nt, one db write
4e20: 20 66 6f 72 20 65 76 65 72 79 20 73 75 62 74 65   for every subte
4e30: 73 74 2c 20 70 6f 74 65 6e 74 69 61 6c 6c 79 0a  st, potentially.
4e40: 20 20 20 20 3b 3b 20 74 68 6f 75 73 61 6e 64 73      ;; thousands
4e50: 20 6f 66 20 75 6e 6e 65 63 65 73 73 61 72 79 20   of unnecessary 
4e60: 75 70 64 61 74 65 73 2c 20 63 61 63 68 65 20 74  updates, cache t
4e70: 68 65 20 66 61 63 74 20 69 74 20 77 61 73 20 73  he fact it was s
4e80: 65 74 20 61 6e 64 20 64 6f 6e 27 74 20 73 65 74  et and don't set
4e90: 20 69 74 20 0a 20 20 20 20 3b 3b 20 61 67 61 69   it .    ;; agai
4ea0: 6e 2e 20 0a 0a 20 20 20 20 3b 3b 20 4e 42 20 2d  n. ..    ;; NB -
4eb0: 20 54 68 69 73 20 69 73 20 6e 6f 74 20 77 6f 72   This is not wor
4ec0: 6b 69 6e 67 20 72 69 67 68 74 20 2d 20 73 6f 6d  king right - som
4ed0: 65 20 74 6f 70 20 74 65 73 74 73 20 61 72 65 20  e top tests are 
4ee0: 6e 6f 74 20 67 65 74 74 69 6e 67 20 74 68 65 20  not getting the 
4ef0: 70 61 74 68 20 73 65 74 21 21 21 0a 0a 20 20 20  path set!!!..   
4f00: 20 28 69 66 20 28 6e 6f 74 20 28 68 61 73 68 2d   (if (not (hash-
4f10: 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c  table-ref/defaul
4f20: 74 20 2a 74 6f 70 74 65 73 74 2d 70 61 74 68 73  t *toptest-paths
4f30: 2a 20 74 65 73 74 6e 61 6d 65 20 23 66 29 29 0a  * testname #f)).
4f40: 09 28 6c 65 74 2a 20 28 28 74 65 73 74 69 6e 66  .(let* ((testinf
4f50: 6f 20 20 20 20 20 20 20 28 63 64 62 3a 67 65 74  o       (cdb:get
4f60: 2d 74 65 73 74 2d 69 6e 66 6f 2d 62 79 2d 69 64  -test-info-by-id
4f70: 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 74 65 73   *runremote* tes
4f80: 74 2d 69 64 29 29 20 3b 3b 20 20 72 75 6e 2d 69  t-id)) ;;  run-i
4f90: 64 20 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 2d  d testname item-
4fa0: 70 61 74 68 29 29 0a 09 20 20 20 20 20 20 20 28  path))..       (
4fb0: 63 75 72 72 2d 74 65 73 74 2d 70 61 74 68 20 28  curr-test-path (
4fc0: 69 66 20 74 65 73 74 69 6e 66 6f 20 28 64 62 3a  if testinfo (db:
4fd0: 74 65 73 74 2d 67 65 74 2d 72 75 6e 64 69 72 20  test-get-rundir 
4fe0: 74 65 73 74 69 6e 66 6f 29 20 23 66 29 29 29 0a  testinfo) #f))).
4ff0: 09 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 73  .  (hash-table-s
5000: 65 74 21 20 2a 74 6f 70 74 65 73 74 2d 70 61 74  et! *toptest-pat
5010: 68 73 2a 20 74 65 73 74 6e 61 6d 65 20 63 75 72  hs* testname cur
5020: 72 2d 74 65 73 74 2d 70 61 74 68 29 0a 09 20 20  r-test-path)..  
5030: 3b 3b 20 4e 42 2f 2f 20 57 61 73 20 74 68 69 73  ;; NB// Was this
5040: 20 66 6f 72 20 74 68 65 20 74 65 73 74 20 6f 72   for the test or
5050: 20 66 6f 72 20 74 68 65 20 70 61 72 65 6e 74 20   for the parent 
5060: 69 6e 20 61 6e 20 69 74 65 72 61 74 65 64 20 74  in an iterated t
5070: 65 73 74 3f 0a 09 20 20 28 63 64 62 3a 74 65 73  est?..  (cdb:tes
5080: 74 2d 73 65 74 2d 72 75 6e 64 69 72 21 20 2a 72  t-set-rundir! *r
5090: 75 6e 72 65 6d 6f 74 65 2a 20 72 75 6e 2d 69 64  unremote* run-id
50a0: 20 74 65 73 74 6e 61 6d 65 20 22 22 20 6c 6e 6b   testname "" lnk
50b0: 70 61 74 68 29 20 3b 3b 20 74 6f 70 74 65 73 74  path) ;; toptest
50c0: 2d 70 61 74 68 29 0a 09 20 20 28 69 66 20 28 6f  -path)..  (if (o
50d0: 72 20 28 6e 6f 74 20 63 75 72 72 2d 74 65 73 74  r (not curr-test
50e0: 2d 70 61 74 68 29 0a 09 09 20 20 28 6e 6f 74 20  -path)...  (not 
50f0: 28 64 69 72 65 63 74 6f 72 79 2d 65 78 69 73 74  (directory-exist
5100: 73 3f 20 74 6f 70 74 65 73 74 2d 70 61 74 68 29  s? toptest-path)
5110: 29 29 0a 09 20 20 20 20 20 20 28 62 65 67 69 6e  ))..      (begin
5120: 0a 09 09 28 64 65 62 75 67 3a 70 72 69 6e 74 2d  ...(debug:print-
5130: 69 6e 66 6f 20 32 20 22 43 72 65 61 74 69 6e 67  info 2 "Creating
5140: 20 22 20 74 6f 70 74 65 73 74 2d 70 61 74 68 20   " toptest-path 
5150: 22 20 61 6e 64 20 6c 69 6e 6b 20 22 20 6c 6e 6b  " and link " lnk
5160: 70 61 74 68 29 0a 09 09 28 63 72 65 61 74 65 2d  path)...(create-
5170: 64 69 72 65 63 74 6f 72 79 20 74 6f 70 74 65 73  directory toptes
5180: 74 2d 70 61 74 68 20 23 74 29 0a 09 09 28 68 61  t-path #t)...(ha
5190: 73 68 2d 74 61 62 6c 65 2d 73 65 74 21 20 2a 74  sh-table-set! *t
51a0: 6f 70 74 65 73 74 2d 70 61 74 68 73 2a 20 74 65  optest-paths* te
51b0: 73 74 6e 61 6d 65 20 74 6f 70 74 65 73 74 2d 70  stname toptest-p
51c0: 61 74 68 29 29 29 29 29 0a 0a 20 20 20 20 3b 3b  ath)))))..    ;;
51d0: 20 4e 6f 77 20 63 72 65 61 74 65 20 74 68 65 20   Now create the 
51e0: 6c 69 6e 6b 20 66 72 6f 6d 20 74 68 65 20 74 65  link from the te
51f0: 73 74 20 70 61 74 68 20 74 6f 20 74 68 65 20 6c  st path to the l
5200: 69 6e 6b 20 74 72 65 65 2c 20 68 6f 77 65 76 65  ink tree, howeve
5210: 72 0a 20 20 20 20 3b 3b 20 69 66 20 74 68 65 20  r.    ;; if the 
5220: 74 65 73 74 20 69 73 20 69 74 65 72 61 74 65 64  test is iterated
5230: 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72 79   it is necessary
5240: 20 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 70   to create the p
5250: 61 72 65 6e 74 20 70 61 74 68 0a 20 20 20 20 3b  arent path.    ;
5260: 3b 20 74 6f 20 74 68 65 20 69 74 65 72 61 74 69  ; to the iterati
5270: 6f 6e 2e 20 75 73 65 20 70 61 74 68 6e 61 6d 65  on. use pathname
5280: 2d 64 69 72 65 63 74 6f 72 79 20 74 6f 20 74 72  -directory to tr
5290: 69 6d 20 74 68 65 20 70 61 74 68 20 62 79 20 6f  im the path by o
52a0: 6e 65 0a 20 20 20 20 3b 3b 20 6c 65 76 65 6c 0a  ne.    ;; level.
52b0: 20 20 20 20 28 69 66 20 28 6e 6f 74 20 6e 6f 74      (if (not not
52c0: 2d 69 74 65 72 61 74 65 64 29 20 3b 3b 20 69 2e  -iterated) ;; i.
52d0: 65 2e 20 69 74 65 72 61 74 65 64 0a 09 28 6c 65  e. iterated..(le
52e0: 74 20 28 28 69 74 65 72 61 74 65 64 2d 70 61 72  t ((iterated-par
52f0: 65 6e 74 20 20 28 70 61 74 68 6e 61 6d 65 2d 64  ent  (pathname-d
5300: 69 72 65 63 74 6f 72 79 20 28 63 6f 6e 63 20 6c  irectory (conc l
5310: 6e 6b 70 61 74 68 20 22 2f 22 20 69 74 65 6d 2d  nkpath "/" item-
5320: 70 61 74 68 29 29 29 29 0a 09 20 20 28 64 65 62  path))))..  (deb
5330: 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 32 20  ug:print-info 2 
5340: 22 43 72 65 61 74 69 6e 67 20 69 74 65 72 61 74  "Creating iterat
5350: 65 64 20 70 61 72 65 6e 74 20 22 20 69 74 65 72  ed parent " iter
5360: 61 74 65 64 2d 70 61 72 65 6e 74 29 0a 09 20 20  ated-parent)..  
5370: 28 63 72 65 61 74 65 2d 64 69 72 65 63 74 6f 72  (create-director
5380: 79 20 69 74 65 72 61 74 65 64 2d 70 61 72 65 6e  y iterated-paren
5390: 74 20 23 74 29 29 29 0a 0a 20 20 20 20 28 69 66  t #t)))..    (if
53a0: 20 28 73 79 6d 62 6f 6c 69 63 2d 6c 69 6e 6b 3f   (symbolic-link?
53b0: 20 6c 6e 6b 70 61 74 68 29 20 28 64 65 6c 65 74   lnkpath) (delet
53c0: 65 2d 66 69 6c 65 20 6c 6e 6b 70 61 74 68 29 29  e-file lnkpath))
53d0: 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20 28 6f  .    (if (not (o
53e0: 72 20 28 66 69 6c 65 2d 65 78 69 73 74 73 3f 20  r (file-exists? 
53f0: 6c 6e 6b 70 61 74 68 29 0a 09 09 20 28 73 79 6d  lnkpath)... (sym
5400: 62 6f 6c 69 63 2d 6c 69 6e 6b 3f 20 6c 6e 6b 70  bolic-link? lnkp
5410: 61 74 68 29 29 29 0a 09 28 63 72 65 61 74 65 2d  ath)))..(create-
5420: 73 79 6d 62 6f 6c 69 63 2d 6c 69 6e 6b 20 74 6f  symbolic-link to
5430: 70 74 65 73 74 2d 70 61 74 68 20 6c 6e 6b 70 61  ptest-path lnkpa
5440: 74 68 29 29 0a 20 20 20 20 0a 20 20 20 20 3b 3b  th)).    .    ;;
5450: 20 54 68 65 20 74 6f 70 74 65 73 74 20 70 61 74   The toptest pat
5460: 68 20 68 61 73 20 62 65 65 6e 20 63 72 65 61 74  h has been creat
5470: 65 64 2c 20 74 68 65 20 6c 69 6e 6b 20 74 6f 20  ed, the link to 
5480: 74 68 65 20 74 65 73 74 20 69 6e 20 74 68 65 20  the test in the 
5490: 6c 69 6e 6b 74 72 65 65 20 68 61 73 0a 20 20 20  linktree has.   
54a0: 20 3b 3b 20 62 65 65 6e 20 63 72 65 61 74 65 64   ;; been created
54b0: 2e 20 4e 6f 77 2c 20 69 66 20 74 68 69 73 20 69  . Now, if this i
54c0: 73 20 61 6e 20 69 74 65 72 61 74 65 64 20 74 65  s an iterated te
54d0: 73 74 20 74 68 65 20 72 65 61 6c 20 74 65 73 74  st the real test
54e0: 20 64 69 72 20 6d 75 73 74 20 62 65 20 63 72 65   dir must be cre
54f0: 61 74 65 64 0a 20 20 20 20 28 69 66 20 28 6e 6f  ated.    (if (no
5500: 74 20 6e 6f 74 2d 69 74 65 72 61 74 65 64 29 20  t not-iterated) 
5510: 3b 3b 20 74 68 69 73 20 69 73 20 61 6e 20 69 74  ;; this is an it
5520: 65 72 61 74 65 64 20 74 65 73 74 0a 09 28 6c 65  erated test..(le
5530: 74 20 28 28 6c 6e 6b 74 61 72 67 65 74 20 28 63  t ((lnktarget (c
5540: 6f 6e 63 20 6c 6e 6b 70 61 74 68 20 22 2f 22 20  onc lnkpath "/" 
5550: 69 74 65 6d 2d 70 61 74 68 29 29 29 0a 09 20 20  item-path)))..  
5560: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 32 20 22  (debug:print 2 "
5570: 53 65 74 74 69 6e 67 20 75 70 20 73 75 62 20 74  Setting up sub t
5580: 65 73 74 20 72 75 6e 20 61 72 65 61 22 29 0a 09  est run area")..
5590: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 32    (debug:print 2
55a0: 20 22 20 2d 20 63 72 65 61 74 69 6e 67 20 72 75   " - creating ru
55b0: 6e 20 61 72 65 61 20 69 6e 20 22 20 74 65 73 74  n area in " test
55c0: 2d 70 61 74 68 29 0a 09 20 20 28 63 72 65 61 74  -path)..  (creat
55d0: 65 2d 64 69 72 65 63 74 6f 72 79 20 74 65 73 74  e-directory test
55e0: 2d 70 61 74 68 20 23 74 29 20 3b 3b 20 28 73 79  -path #t) ;; (sy
55f0: 73 74 65 6d 20 20 28 63 6f 6e 63 20 22 6d 6b 64  stem  (conc "mkd
5600: 69 72 20 2d 70 20 22 20 74 65 73 74 2d 70 61 74  ir -p " test-pat
5610: 68 29 29 0a 09 20 20 28 64 65 62 75 67 3a 70 72  h))..  (debug:pr
5620: 69 6e 74 20 32 20 0a 09 09 20 20 20 20 20 20 20  int 2 ...       
5630: 22 20 2d 20 63 72 65 61 74 69 6e 67 20 6c 69 6e  " - creating lin
5640: 6b 20 66 72 6f 6d 3a 20 22 20 74 65 73 74 2d 70  k from: " test-p
5650: 61 74 68 20 22 5c 6e 22 0a 09 09 20 20 20 20 20  ath "\n"...     
5660: 20 20 22 20 20 20 20 20 20 20 20 20 20 20 20 20    "             
5670: 20 20 20 20 20 20 74 6f 3a 20 22 20 6c 6e 6b 74        to: " lnkt
5680: 61 72 67 65 74 29 0a 09 20 20 3b 3b 20 28 63 72  arget)..  ;; (cr
5690: 65 61 74 65 2d 64 69 72 65 63 74 6f 72 79 20 6c  eate-directory l
56a0: 6e 6b 70 61 74 68 20 23 74 29 20 3b 3b 20 28 73  nkpath #t) ;; (s
56b0: 79 73 74 65 6d 20 20 28 63 6f 6e 63 20 22 6d 6b  ystem  (conc "mk
56c0: 64 69 72 20 2d 70 20 22 20 6c 6e 6b 70 61 74 68  dir -p " lnkpath
56d0: 29 29 0a 0a 09 20 20 3b 3b 20 49 66 20 74 68 65  ))...  ;; If the
56e0: 72 65 20 69 73 20 61 6c 72 65 61 64 79 20 61 20  re is already a 
56f0: 73 79 6d 6c 69 6e 6b 20 64 65 6c 65 74 65 20 69  symlink delete i
5700: 74 20 61 6e 64 20 72 65 63 72 65 61 74 65 20 69  t and recreate i
5710: 74 2e 0a 09 20 20 28 69 66 20 28 73 79 6d 62 6f  t...  (if (symbo
5720: 6c 69 63 2d 6c 69 6e 6b 3f 20 6c 6e 6b 74 61 72  lic-link? lnktar
5730: 67 65 74 29 20 20 20 20 20 28 64 65 6c 65 74 65  get)     (delete
5740: 2d 66 69 6c 65 20 6c 6e 6b 74 61 72 67 65 74 29  -file lnktarget)
5750: 29 0a 09 20 20 28 69 66 20 28 6e 6f 74 20 28 66  )..  (if (not (f
5760: 69 6c 65 2d 65 78 69 73 74 73 3f 20 6c 6e 6b 74  ile-exists? lnkt
5770: 61 72 67 65 74 29 29 20 28 63 72 65 61 74 65 2d  arget)) (create-
5780: 73 79 6d 62 6f 6c 69 63 2d 6c 69 6e 6b 20 74 65  symbolic-link te
5790: 73 74 2d 70 61 74 68 20 6c 6e 6b 74 61 72 67 65  st-path lnktarge
57a0: 74 29 29 29 29 0a 0a 20 20 20 20 3b 3b 20 49 20  t))))..    ;; I 
57b0: 73 75 73 70 65 63 74 20 74 68 69 73 20 73 65 63  suspect this sec
57c0: 74 69 6f 6e 20 77 61 73 20 64 65 6c 65 74 69 6e  tion was deletin
57d0: 67 20 74 65 73 74 20 64 69 72 65 63 74 6f 72 69  g test directori
57e0: 65 73 20 75 6e 64 65 72 20 73 6f 6d 65 20 0a 20  es under some . 
57f0: 20 20 20 3b 3b 20 77 69 65 72 64 20 73 69 74 61     ;; wierd sita
5800: 74 69 6f 6e 73 3f 20 54 68 69 73 20 64 6f 65 73  tions? This does
5810: 6e 27 74 20 6d 61 6b 65 20 73 65 6e 73 65 20 2d  n't make sense -
5820: 20 72 65 65 6e 61 62 6c 69 6e 67 20 74 68 65 20   reenabling the 
5830: 72 6d 20 2d 66 20 0a 20 20 20 20 3b 3b 20 49 20  rm -f .    ;; I 
5840: 68 6f 6e 65 73 74 6c 79 20 64 6f 6e 27 74 20 72  honestly don't r
5850: 65 6d 65 6d 62 65 72 20 2a 77 68 79 2a 20 74 68  emember *why* th
5860: 69 73 20 63 68 75 6e 6b 20 77 61 73 20 6e 65 65  is chunk was nee
5870: 64 65 64 2e 2e 2e 0a 20 20 20 20 3b 3b 20 28 6c  ded....    ;; (l
5880: 65 74 20 28 28 74 65 73 74 6c 69 6e 6b 20 28 63  et ((testlink (c
5890: 6f 6e 63 20 6c 6e 6b 70 61 74 68 20 22 2f 22 20  onc lnkpath "/" 
58a0: 74 65 73 74 6e 61 6d 65 29 29 29 0a 20 20 20 20  testname))).    
58b0: 3b 3b 20 20 20 28 69 66 20 28 61 6e 64 20 28 66  ;;   (if (and (f
58c0: 69 6c 65 2d 65 78 69 73 74 73 3f 20 74 65 73 74  ile-exists? test
58d0: 6c 69 6e 6b 29 0a 20 20 20 20 3b 3b 20 20 20 20  link).    ;;    
58e0: 20 20 20 20 20 20 20 20 28 6f 72 20 28 72 65 67          (or (reg
58f0: 75 6c 61 72 2d 66 69 6c 65 3f 20 74 65 73 74 6c  ular-file? testl
5900: 69 6e 6b 29 0a 20 20 20 20 3b 3b 20 20 20 20 20  ink).    ;;     
5910: 09 20 20 20 28 73 79 6d 62 6f 6c 69 63 2d 6c 69  .   (symbolic-li
5920: 6e 6b 3f 20 74 65 73 74 6c 69 6e 6b 29 29 29 0a  nk? testlink))).
5930: 20 20 20 20 3b 3b 20 20 20 20 20 20 20 28 73 79      ;;       (sy
5940: 73 74 65 6d 20 28 63 6f 6e 63 20 22 72 6d 20 2d  stem (conc "rm -
5950: 66 20 22 20 74 65 73 74 6c 69 6e 6b 29 29 29 0a  f " testlink))).
5960: 20 20 20 20 3b 3b 20 20 20 28 73 79 73 74 65 6d      ;;   (system
5970: 20 20 28 63 6f 6e 63 20 22 6c 6e 20 2d 73 66 20    (conc "ln -sf 
5980: 22 20 74 65 73 74 2d 70 61 74 68 20 22 20 22 20  " test-path " " 
5990: 74 65 73 74 6c 69 6e 6b 29 29 29 0a 20 20 20 20  testlink))).    
59a0: 28 69 66 20 28 64 69 72 65 63 74 6f 72 79 3f 20  (if (directory? 
59b0: 74 65 73 74 2d 70 61 74 68 29 0a 09 28 62 65 67  test-path)..(beg
59c0: 69 6e 0a 09 20 20 28 6c 65 74 2a 20 28 28 63 6d  in..  (let* ((cm
59d0: 64 20 20 20 20 28 63 6f 6e 63 20 22 72 73 79 6e  d    (conc "rsyn
59e0: 63 20 2d 61 76 22 20 28 69 66 20 28 64 65 62 75  c -av" (if (debu
59f0: 67 3a 64 65 62 75 67 2d 6d 6f 64 65 20 31 29 20  g:debug-mode 1) 
5a00: 22 22 20 22 71 22 29 20 22 20 22 20 74 65 73 74  "" "q") " " test
5a10: 2d 73 72 63 2d 70 61 74 68 20 22 2f 20 22 20 74  -src-path "/ " t
5a20: 65 73 74 2d 70 61 74 68 20 22 2f 22 29 29 0a 09  est-path "/"))..
5a30: 09 20 28 73 74 61 74 75 73 20 28 73 79 73 74 65  . (status (syste
5a40: 6d 20 63 6d 64 29 29 29 0a 09 20 20 20 20 28 69  m cmd)))..    (i
5a50: 66 20 28 6e 6f 74 20 28 65 71 3f 20 73 74 61 74  f (not (eq? stat
5a60: 75 73 20 30 29 29 0a 09 09 28 64 65 62 75 67 3a  us 0))...(debug:
5a70: 70 72 69 6e 74 20 32 20 22 45 52 52 4f 52 3a 20  print 2 "ERROR: 
5a80: 70 72 6f 62 6c 65 6d 20 77 69 74 68 20 72 75 6e  problem with run
5a90: 6e 69 6e 67 20 5c 22 22 20 63 6d 64 20 22 5c 22  ning \"" cmd "\"
5aa0: 22 29 29 29 0a 09 20 20 28 6c 69 73 74 20 6c 6e  ")))..  (list ln
5ab0: 6b 70 61 74 68 66 20 6c 6e 6b 70 61 74 68 20 29  kpathf lnkpath )
5ac0: 29 0a 09 28 6c 69 73 74 20 23 66 20 23 66 29 29  )..(list #f #f))
5ad0: 29 29 0a 0a 3b 3b 20 31 2e 20 6c 6f 6f 6b 20 74  ))..;; 1. look t
5ae0: 68 6f 75 67 68 20 64 69 73 6b 73 20 6c 69 73 74  hough disks list
5af0: 20 66 6f 72 20 64 69 73 6b 20 77 69 74 68 20 6d   for disk with m
5b00: 6f 73 74 20 73 70 61 63 65 0a 3b 3b 20 32 2e 20  ost space.;; 2. 
5b10: 63 72 65 61 74 65 20 72 75 6e 20 64 69 72 20 6f  create run dir o
5b20: 6e 20 64 69 73 6b 2c 20 70 61 74 68 20 6e 61 6d  n disk, path nam
5b30: 65 20 69 73 20 6d 65 61 6e 69 6e 67 66 75 6c 0a  e is meaningful.
5b40: 3b 3b 20 33 2e 20 63 72 65 61 74 65 20 6c 69 6e  ;; 3. create lin
5b50: 6b 20 66 72 6f 6d 20 72 75 6e 20 64 69 72 20 74  k from run dir t
5b60: 6f 20 6d 65 67 61 74 65 73 74 20 72 75 6e 73 20  o megatest runs 
5b70: 61 72 65 61 20 0a 3b 3b 20 34 2e 20 72 65 6d 6f  area .;; 4. remo
5b80: 74 65 6c 79 20 72 75 6e 20 74 68 65 20 74 65 73  tely run the tes
5b90: 74 20 6f 6e 20 61 6c 6c 6f 63 61 74 65 64 20 68  t on allocated h
5ba0: 6f 73 74 0a 3b 3b 20 20 20 20 2d 20 63 6f 75 6c  ost.;;    - coul
5bb0: 64 20 62 65 20 73 73 68 20 74 6f 20 68 6f 73 74  d be ssh to host
5bc0: 20 66 72 6f 6d 20 68 6f 73 74 73 20 74 61 62 6c   from hosts tabl
5bd0: 65 20 28 75 70 64 61 74 65 20 72 65 67 75 6c 61  e (update regula
5be0: 72 6c 79 20 77 69 74 68 20 6c 6f 61 64 29 0a 3b  rly with load).;
5bf0: 3b 20 20 20 20 2d 20 63 6f 75 6c 64 20 62 65 20  ;    - could be 
5c00: 6e 65 74 62 61 74 63 68 0a 3b 3b 20 20 20 20 20  netbatch.;;     
5c10: 20 28 6c 61 75 6e 63 68 2d 74 65 73 74 20 64 62   (launch-test db
5c20: 20 28 63 61 64 72 20 73 74 61 74 75 73 29 20 74   (cadr status) t
5c30: 65 73 74 2d 63 6f 6e 66 29 29 0a 28 64 65 66 69  est-conf)).(defi
5c40: 6e 65 20 28 6c 61 75 6e 63 68 2d 74 65 73 74 20  ne (launch-test 
5c50: 64 62 20 72 75 6e 2d 69 64 20 72 75 6e 6e 61 6d  db run-id runnam
5c60: 65 20 74 65 73 74 2d 63 6f 6e 66 20 6b 65 79 76  e test-conf keyv
5c70: 61 6c 6c 73 74 20 74 65 73 74 2d 6e 61 6d 65 20  allst test-name 
5c80: 74 65 73 74 2d 70 61 74 68 20 69 74 65 6d 64 61  test-path itemda
5c90: 74 20 70 61 72 61 6d 73 29 0a 20 20 28 63 68 61  t params).  (cha
5ca0: 6e 67 65 2d 64 69 72 65 63 74 6f 72 79 20 2a 74  nge-directory *t
5cb0: 6f 70 70 61 74 68 2a 29 0a 20 20 28 61 6c 69 73  oppath*).  (alis
5cc0: 74 2d 3e 65 6e 76 2d 76 61 72 73 20 3b 3b 20 63  t->env-vars ;; c
5cd0: 6f 6e 73 6f 6c 69 64 61 74 65 20 74 68 69 73 20  onsolidate this 
5ce0: 63 6f 64 65 20 77 69 74 68 20 74 68 65 20 63 6f  code with the co
5cf0: 64 65 20 69 6e 20 6d 65 67 61 74 65 73 74 2e 73  de in megatest.s
5d00: 63 6d 20 66 6f 72 20 22 2d 65 78 65 63 75 74 65  cm for "-execute
5d10: 22 0a 20 20 20 28 6c 69 73 74 20 3b 3b 20 28 6c  ".   (list ;; (l
5d20: 69 73 74 20 22 4d 54 5f 54 45 53 54 5f 52 55 4e  ist "MT_TEST_RUN
5d30: 5f 44 49 52 22 20 77 6f 72 6b 2d 61 72 65 61 29  _DIR" work-area)
5d40: 0a 20 20 20 20 28 6c 69 73 74 20 22 4d 54 5f 52  .    (list "MT_R
5d50: 55 4e 5f 41 52 45 41 5f 48 4f 4d 45 22 20 2a 74  UN_AREA_HOME" *t
5d60: 6f 70 70 61 74 68 2a 29 0a 20 20 20 20 28 6c 69  oppath*).    (li
5d70: 73 74 20 22 4d 54 5f 54 45 53 54 5f 4e 41 4d 45  st "MT_TEST_NAME
5d80: 22 20 74 65 73 74 2d 6e 61 6d 65 29 0a 20 20 20  " test-name).   
5d90: 20 3b 3b 20 28 6c 69 73 74 20 22 4d 54 5f 49 54   ;; (list "MT_IT
5da0: 45 4d 5f 49 4e 46 4f 22 20 28 63 6f 6e 63 20 69  EM_INFO" (conc i
5db0: 74 65 6d 64 61 74 29 29 20 0a 20 20 20 20 28 6c  temdat)) .    (l
5dc0: 69 73 74 20 22 4d 54 5f 52 55 4e 4e 41 4d 45 22  ist "MT_RUNNAME"
5dd0: 20 20 20 72 75 6e 6e 61 6d 65 29 0a 20 20 20 20     runname).    
5de0: 3b 3b 20 28 6c 69 73 74 20 22 4d 54 5f 54 41 52  ;; (list "MT_TAR
5df0: 47 45 54 22 20 20 20 20 6d 74 5f 74 61 72 67 65  GET"    mt_targe
5e00: 74 29 0a 20 20 20 20 29 29 0a 20 20 28 6c 65 74  t).    )).  (let
5e10: 2a 20 28 28 75 73 65 73 68 65 6c 6c 20 20 20 28  * ((useshell   (
5e20: 63 6f 6e 66 69 67 2d 6c 6f 6f 6b 75 70 20 2a 63  config-lookup *c
5e30: 6f 6e 66 69 67 64 61 74 2a 20 22 6a 6f 62 74 6f  onfigdat* "jobto
5e40: 6f 6c 73 22 20 20 20 20 20 22 75 73 65 73 68 65  ols"     "useshe
5e50: 6c 6c 22 29 29 0a 09 20 28 6c 61 75 6e 63 68 65  ll")).. (launche
5e60: 72 20 20 20 28 63 6f 6e 66 69 67 2d 6c 6f 6f 6b  r   (config-look
5e70: 75 70 20 2a 63 6f 6e 66 69 67 64 61 74 2a 20 22  up *configdat* "
5e80: 6a 6f 62 74 6f 6f 6c 73 22 20 20 20 20 20 22 6c  jobtools"     "l
5e90: 61 75 6e 63 68 65 72 22 29 29 0a 09 20 28 72 75  auncher")).. (ru
5ea0: 6e 73 63 72 69 70 74 20 20 28 63 6f 6e 66 69 67  nscript  (config
5eb0: 2d 6c 6f 6f 6b 75 70 20 74 65 73 74 2d 63 6f 6e  -lookup test-con
5ec0: 66 20 20 20 22 73 65 74 75 70 22 20 20 20 20 20  f   "setup"     
5ed0: 20 20 20 22 72 75 6e 73 63 72 69 70 74 22 29 29     "runscript"))
5ee0: 0a 09 20 28 65 7a 73 74 65 70 73 20 20 20 20 28  .. (ezsteps    (
5ef0: 3e 20 28 6c 65 6e 67 74 68 20 28 68 61 73 68 2d  > (length (hash-
5f00: 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c  table-ref/defaul
5f10: 74 20 74 65 73 74 2d 63 6f 6e 66 20 22 65 7a 73  t test-conf "ezs
5f20: 74 65 70 73 22 20 27 28 29 29 29 20 30 29 29 20  teps" '())) 0)) 
5f30: 3b 3b 20 64 6f 6e 27 74 20 73 65 6e 64 20 61 6c  ;; don't send al
5f40: 6c 20 74 68 65 20 73 74 65 70 73 2c 20 63 6f 75  l the steps, cou
5f50: 6c 64 20 62 65 20 62 69 67 0a 09 20 28 64 69 73  ld be big.. (dis
5f60: 6b 73 70 61 63 65 20 20 28 63 6f 6e 66 69 67 2d  kspace  (config-
5f70: 6c 6f 6f 6b 75 70 20 74 65 73 74 2d 63 6f 6e 66  lookup test-conf
5f80: 20 20 20 22 72 65 71 75 69 72 65 6d 65 6e 74 73     "requirements
5f90: 22 20 22 64 69 73 6b 73 70 61 63 65 22 29 29 0a  " "diskspace")).
5fa0: 09 20 28 6d 65 6d 6f 72 79 20 20 20 20 20 28 63  . (memory     (c
5fb0: 6f 6e 66 69 67 2d 6c 6f 6f 6b 75 70 20 74 65 73  onfig-lookup tes
5fc0: 74 2d 63 6f 6e 66 20 20 20 22 72 65 71 75 69 72  t-conf   "requir
5fd0: 65 6d 65 6e 74 73 22 20 22 6d 65 6d 6f 72 79 22  ements" "memory"
5fe0: 29 29 0a 09 20 28 68 6f 73 74 73 20 20 20 20 20  )).. (hosts     
5ff0: 20 28 63 6f 6e 66 69 67 2d 6c 6f 6f 6b 75 70 20   (config-lookup 
6000: 2a 63 6f 6e 66 69 67 64 61 74 2a 20 22 6a 6f 62  *configdat* "job
6010: 74 6f 6f 6c 73 22 20 20 20 20 20 22 77 6f 72 6b  tools"     "work
6020: 68 6f 73 74 73 22 29 29 0a 09 20 28 72 65 6d 6f  hosts")).. (remo
6030: 74 65 2d 6d 65 67 61 74 65 73 74 20 28 63 6f 6e  te-megatest (con
6040: 66 69 67 2d 6c 6f 6f 6b 75 70 20 2a 63 6f 6e 66  fig-lookup *conf
6050: 69 67 64 61 74 2a 20 22 73 65 74 75 70 22 20 22  igdat* "setup" "
6060: 65 78 65 63 75 74 61 62 6c 65 22 29 29 0a 09 20  executable")).. 
6070: 3b 3b 20 46 49 58 4d 45 20 53 4f 4d 45 44 41 59  ;; FIXME SOMEDAY
6080: 3a 20 6e 6f 74 20 67 6f 6f 64 20 68 6f 77 20 74  : not good how t
6090: 68 69 73 20 69 73 20 73 6f 20 6f 62 74 75 73 65  his is so obtuse
60a0: 2c 20 74 68 69 73 20 68 61 63 6b 20 69 73 20 74  , this hack is t
60b0: 6f 20 0a 09 20 3b 3b 20 20 20 20 20 20 20 20 20  o .. ;;         
60c0: 20 20 20 20 20 20 20 61 6c 6c 6f 77 20 72 75 6e         allow run
60d0: 6e 69 6e 67 20 66 72 6f 6d 20 64 61 73 68 62 6f  ning from dashbo
60e0: 61 72 64 2e 20 45 78 74 72 61 63 74 20 74 68 65  ard. Extract the
60f0: 20 70 61 74 68 0a 09 20 3b 3b 20 20 20 20 20 20   path.. ;;      
6100: 20 20 20 20 20 20 20 20 20 20 66 72 6f 6d 20 74            from t
6110: 68 65 20 63 61 6c 6c 65 64 20 6d 65 67 61 74 65  he called megate
6120: 73 74 20 61 6e 64 20 63 6f 6e 76 65 72 74 20 64  st and convert d
6130: 61 73 68 62 6f 61 72 64 0a 09 20 3b 3b 20 20 20  ashboard.. ;;   
6140: 20 20 20 20 20 20 20 20 20 20 09 20 20 6f 72 20            .  or 
6150: 64 62 6f 61 72 64 20 74 6f 20 6d 65 67 61 74 65  dboard to megate
6160: 73 74 0a 09 20 28 6c 6f 63 61 6c 2d 6d 65 67 61  st.. (local-mega
6170: 74 65 73 74 20 20 28 6c 65 74 2a 20 28 28 6c 6d  test  (let* ((lm
6180: 20 20 28 63 61 72 20 28 61 72 67 76 29 29 29 0a    (car (argv))).
6190: 09 09 09 09 20 28 64 69 72 20 28 70 61 74 68 6e  .... (dir (pathn
61a0: 61 6d 65 2d 64 69 72 65 63 74 6f 72 79 20 6c 6d  ame-directory lm
61b0: 29 29 0a 09 09 09 09 20 28 65 78 65 20 28 70 61  ))..... (exe (pa
61c0: 74 68 6e 61 6d 65 2d 73 74 72 69 70 2d 64 69 72  thname-strip-dir
61d0: 65 63 74 6f 72 79 20 6c 6d 29 29 29 0a 09 09 09  ectory lm)))....
61e0: 20 20 20 20 28 63 6f 6e 63 20 28 69 66 20 64 69      (conc (if di
61f0: 72 20 28 63 6f 6e 63 20 64 69 72 20 22 2f 22 29  r (conc dir "/")
6200: 20 22 22 29 0a 09 09 09 09 20 20 28 63 61 73 65   "").....  (case
6210: 20 28 73 74 72 69 6e 67 2d 3e 73 79 6d 62 6f 6c   (string->symbol
6220: 20 65 78 65 29 0a 09 09 09 09 20 20 20 20 28 28   exe).....    ((
6230: 64 62 6f 61 72 64 29 20 20 20 20 22 6d 65 67 61  dboard)    "mega
6240: 74 65 73 74 22 29 0a 09 09 09 09 20 20 20 20 28  test").....    (
6250: 28 6d 74 65 73 74 29 20 20 20 20 20 22 6d 65 67  (mtest)     "meg
6260: 61 74 65 73 74 22 29 0a 09 09 09 09 20 20 20 20  atest").....    
6270: 28 28 64 61 73 68 62 6f 61 72 64 29 20 22 6d 65  ((dashboard) "me
6280: 67 61 74 65 73 74 22 29 0a 09 09 09 09 20 20 20  gatest").....   
6290: 20 28 65 6c 73 65 20 65 78 65 29 29 29 29 29 0a   (else exe))))).
62a0: 09 20 28 74 65 73 74 2d 73 69 67 20 20 20 28 63  . (test-sig   (c
62b0: 6f 6e 63 20 74 65 73 74 2d 6e 61 6d 65 20 22 3a  onc test-name ":
62c0: 22 20 28 69 74 65 6d 2d 6c 69 73 74 2d 3e 70 61  " (item-list->pa
62d0: 74 68 20 69 74 65 6d 64 61 74 29 29 29 20 3b 3b  th itemdat))) ;;
62e0: 20 74 65 73 74 2d 70 61 74 68 20 69 73 20 74 68   test-path is th
62f0: 65 20 66 75 6c 6c 20 70 61 74 68 20 69 6e 63 6c  e full path incl
6300: 75 64 69 6e 67 20 74 68 65 20 69 74 65 6d 2d 70  uding the item-p
6310: 61 74 68 0a 09 20 28 77 6f 72 6b 2d 61 72 65 61  ath.. (work-area
6320: 20 20 23 66 29 0a 09 20 28 74 6f 70 74 65 73 74    #f).. (toptest
6330: 2d 77 6f 72 6b 2d 61 72 65 61 20 23 66 29 20 3b  -work-area #f) ;
6340: 3b 20 66 6f 72 20 69 74 65 72 61 74 65 64 20 74  ; for iterated t
6350: 65 73 74 73 20 74 68 65 20 74 6f 70 20 74 65 73  ests the top tes
6360: 74 20 63 6f 6e 74 61 69 6e 73 20 64 61 74 61 20  t contains data 
6370: 72 65 6c 65 76 61 6e 74 20 66 6f 72 20 61 6c 6c  relevant for all
6380: 0a 09 20 28 64 69 73 6b 70 61 74 68 20 20 20 23  .. (diskpath   #
6390: 66 29 0a 09 20 28 63 6d 64 70 61 72 6d 73 20 20  f).. (cmdparms  
63a0: 20 23 66 29 0a 09 20 28 66 75 6c 6c 63 6d 64 20   #f).. (fullcmd 
63b0: 20 20 20 23 66 29 20 3b 3b 20 28 64 65 66 69 6e     #f) ;; (defin
63c0: 65 20 61 20 28 77 69 74 68 2d 6f 75 74 70 75 74  e a (with-output
63d0: 2d 74 6f 2d 73 74 72 69 6e 67 20 28 6c 61 6d 62  -to-string (lamb
63e0: 64 61 20 28 29 28 77 72 69 74 65 20 78 29 29 29  da ()(write x)))
63f0: 29 0a 09 20 28 6d 74 2d 62 69 6e 64 69 72 2d 70  ).. (mt-bindir-p
6400: 61 74 68 20 23 66 29 0a 09 20 28 69 74 65 6d 2d  ath #f).. (item-
6410: 70 61 74 68 20 28 69 74 65 6d 2d 6c 69 73 74 2d  path (item-list-
6420: 3e 70 61 74 68 20 69 74 65 6d 64 61 74 29 29 0a  >path itemdat)).
6430: 09 20 28 74 65 73 74 2d 69 64 20 20 20 20 28 63  . (test-id    (c
6440: 64 62 3a 72 65 6d 6f 74 65 2d 72 75 6e 20 64 62  db:remote-run db
6450: 3a 67 65 74 2d 74 65 73 74 2d 69 64 20 23 66 20  :get-test-id #f 
6460: 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65  run-id test-name
6470: 20 69 74 65 6d 2d 70 61 74 68 29 29 0a 09 20 28   item-path)).. (
6480: 74 65 73 74 69 6e 66 6f 20 20 20 28 63 64 62 3a  testinfo   (cdb:
6490: 67 65 74 2d 74 65 73 74 2d 69 6e 66 6f 2d 62 79  get-test-info-by
64a0: 2d 69 64 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20  -id *runremote* 
64b0: 74 65 73 74 2d 69 64 29 29 0a 09 20 28 6d 74 5f  test-id)).. (mt_
64c0: 74 61 72 67 65 74 20 20 28 73 74 72 69 6e 67 2d  target  (string-
64d0: 69 6e 74 65 72 73 70 65 72 73 65 20 28 6d 61 70  intersperse (map
64e0: 20 63 61 64 72 20 6b 65 79 76 61 6c 6c 73 74 29   cadr keyvallst)
64f0: 20 22 2f 22 29 29 0a 09 20 28 64 65 62 75 67 2d   "/")).. (debug-
6500: 70 61 72 61 6d 20 28 61 70 70 65 6e 64 20 28 69  param (append (i
6510: 66 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20  f (args:get-arg 
6520: 22 2d 64 65 62 75 67 22 29 20 20 28 6c 69 73 74  "-debug")  (list
6530: 20 22 2d 64 65 62 75 67 22 20 28 61 72 67 73 3a   "-debug" (args:
6540: 67 65 74 2d 61 72 67 20 22 2d 64 65 62 75 67 22  get-arg "-debug"
6550: 29 29 20 27 28 29 29 0a 09 09 09 20 20 20 20 20  )) '())....     
6560: 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61   (if (args:get-a
6570: 72 67 20 22 2d 6c 6f 67 67 69 6e 67 22 29 28 6c  rg "-logging")(l
6580: 69 73 74 20 22 2d 6c 6f 67 67 69 6e 67 22 29 20  ist "-logging") 
6590: 27 28 29 29 29 29 29 0a 20 20 20 20 28 69 66 20  '())))).    (if 
65a0: 68 6f 73 74 73 20 28 73 65 74 21 20 68 6f 73 74  hosts (set! host
65b0: 73 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 74 20  s (string-split 
65c0: 68 6f 73 74 73 29 29 29 0a 20 20 20 20 3b 3b 20  hosts))).    ;; 
65d0: 73 65 74 20 74 68 65 20 6d 65 67 61 74 65 73 74  set the megatest
65e0: 20 74 6f 20 62 65 20 63 61 6c 6c 65 64 20 6f 6e   to be called on
65f0: 20 74 68 65 20 72 65 6d 6f 74 65 20 68 6f 73 74   the remote host
6600: 0a 20 20 20 20 28 69 66 20 28 6e 6f 74 20 72 65  .    (if (not re
6610: 6d 6f 74 65 2d 6d 65 67 61 74 65 73 74 29 28 73  mote-megatest)(s
6620: 65 74 21 20 72 65 6d 6f 74 65 2d 6d 65 67 61 74  et! remote-megat
6630: 65 73 74 20 6c 6f 63 61 6c 2d 6d 65 67 61 74 65  est local-megate
6640: 73 74 29 29 20 3b 3b 20 22 6d 65 67 61 74 65 73  st)) ;; "megates
6650: 74 22 29 29 0a 20 20 20 20 28 73 65 74 21 20 6d  t")).    (set! m
6660: 74 2d 62 69 6e 64 69 72 2d 70 61 74 68 20 28 70  t-bindir-path (p
6670: 61 74 68 6e 61 6d 65 2d 64 69 72 65 63 74 6f 72  athname-director
6680: 79 20 72 65 6d 6f 74 65 2d 6d 65 67 61 74 65 73  y remote-megates
6690: 74 29 29 0a 20 20 20 20 28 69 66 20 6c 61 75 6e  t)).    (if laun
66a0: 63 68 65 72 20 28 73 65 74 21 20 6c 61 75 6e 63  cher (set! launc
66b0: 68 65 72 20 28 73 74 72 69 6e 67 2d 73 70 6c 69  her (string-spli
66c0: 74 20 6c 61 75 6e 63 68 65 72 29 29 29 0a 20 20  t launcher))).  
66d0: 20 20 3b 3b 20 73 65 74 20 75 70 20 74 68 65 20    ;; set up the 
66e0: 72 75 6e 20 77 6f 72 6b 20 61 72 65 61 20 66 6f  run work area fo
66f0: 72 20 74 68 69 73 20 74 65 73 74 0a 20 20 20 20  r this test.    
6700: 28 73 65 74 21 20 64 69 73 6b 70 61 74 68 20 28  (set! diskpath (
6710: 67 65 74 2d 62 65 73 74 2d 64 69 73 6b 20 2a 63  get-best-disk *c
6720: 6f 6e 66 69 67 64 61 74 2a 29 29 0a 20 20 20 20  onfigdat*)).    
6730: 28 69 66 20 64 69 73 6b 70 61 74 68 0a 09 28 6c  (if diskpath..(l
6740: 65 74 20 28 28 64 61 74 20 20 28 6f 70 65 6e 2d  et ((dat  (open-
6750: 72 75 6e 2d 63 6c 6f 73 65 20 63 72 65 61 74 65  run-close create
6760: 2d 77 6f 72 6b 2d 61 72 65 61 20 64 62 20 72 75  -work-area db ru
6770: 6e 2d 69 64 20 74 65 73 74 2d 69 64 20 74 65 73  n-id test-id tes
6780: 74 2d 70 61 74 68 20 64 69 73 6b 70 61 74 68 20  t-path diskpath 
6790: 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 64 61  test-name itemda
67a0: 74 29 29 29 0a 09 20 20 28 73 65 74 21 20 77 6f  t)))..  (set! wo
67b0: 72 6b 2d 61 72 65 61 20 28 63 61 72 20 64 61 74  rk-area (car dat
67c0: 29 29 0a 09 20 20 28 73 65 74 21 20 74 6f 70 74  ))..  (set! topt
67d0: 65 73 74 2d 77 6f 72 6b 2d 61 72 65 61 20 28 63  est-work-area (c
67e0: 61 64 72 20 64 61 74 29 29 0a 09 20 20 28 64 65  adr dat))..  (de
67f0: 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 32  bug:print-info 2
6800: 20 22 55 73 69 6e 67 20 77 6f 72 6b 20 61 72 65   "Using work are
6810: 61 20 22 20 77 6f 72 6b 2d 61 72 65 61 29 29 0a  a " work-area)).
6820: 09 28 62 65 67 69 6e 0a 09 20 20 28 73 65 74 21  .(begin..  (set!
6830: 20 77 6f 72 6b 2d 61 72 65 61 20 28 63 6f 6e 63   work-area (conc
6840: 20 74 65 73 74 2d 70 61 74 68 20 22 2f 74 6d 70   test-path "/tmp
6850: 5f 72 75 6e 22 29 29 0a 09 20 20 28 63 72 65 61  _run"))..  (crea
6860: 74 65 2d 64 69 72 65 63 74 6f 72 79 20 77 6f 72  te-directory wor
6870: 6b 2d 61 72 65 61 20 23 74 29 0a 09 20 20 28 64  k-area #t)..  (d
6880: 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 57 41  ebug:print 0 "WA
6890: 52 4e 49 4e 47 3a 20 4e 6f 20 64 69 73 6b 20 77  RNING: No disk w
68a0: 6f 72 6b 20 61 72 65 61 20 73 70 65 63 69 66 69  ork area specifi
68b0: 65 64 20 2d 20 72 75 6e 6e 69 6e 67 20 69 6e 20  ed - running in 
68c0: 74 68 65 20 74 65 73 74 20 64 69 72 65 63 74 6f  the test directo
68d0: 72 79 20 75 6e 64 65 72 20 74 6d 70 5f 72 75 6e  ry under tmp_run
68e0: 22 29 29 29 0a 20 20 20 20 28 73 65 74 21 20 63  "))).    (set! c
68f0: 6d 64 70 61 72 6d 73 20 28 62 61 73 65 36 34 3a  mdparms (base64:
6900: 62 61 73 65 36 34 2d 65 6e 63 6f 64 65 20 0a 09  base64-encode ..
6910: 09 20 20 20 20 28 77 69 74 68 2d 6f 75 74 70 75  .    (with-outpu
6920: 74 2d 74 6f 2d 73 74 72 69 6e 67 0a 09 09 20 20  t-to-string...  
6930: 20 20 20 20 28 6c 61 6d 62 64 61 20 28 29 20 3b      (lambda () ;
6940: 3b 20 28 6c 69 73 74 20 27 68 6f 73 74 73 20 20  ; (list 'hosts  
6950: 20 20 20 68 6f 73 74 73 29 0a 09 09 09 28 77 72     hosts)....(wr
6960: 69 74 65 20 28 6c 69 73 74 20 28 6c 69 73 74 20  ite (list (list 
6970: 27 74 65 73 74 70 61 74 68 20 20 74 65 73 74 2d  'testpath  test-
6980: 70 61 74 68 29 0a 09 09 09 09 20 20 20 20 20 28  path).....     (
6990: 6c 69 73 74 20 27 72 75 6e 72 65 6d 6f 74 65 20  list 'runremote 
69a0: 2a 72 75 6e 72 65 6d 6f 74 65 2a 29 0a 09 09 09  *runremote*)....
69b0: 09 20 20 20 20 20 28 6c 69 73 74 20 27 74 72 61  .     (list 'tra
69c0: 6e 73 70 6f 72 74 20 2a 74 72 61 6e 73 70 6f 72  nsport *transpor
69d0: 74 2d 74 79 70 65 2a 29 0a 09 09 09 09 20 20 20  t-type*).....   
69e0: 20 20 28 6c 69 73 74 20 27 74 6f 70 70 61 74 68    (list 'toppath
69f0: 20 20 20 2a 74 6f 70 70 61 74 68 2a 29 0a 09 09     *toppath*)...
6a00: 09 09 20 20 20 20 20 28 6c 69 73 74 20 27 77 6f  ..     (list 'wo
6a10: 72 6b 2d 61 72 65 61 20 77 6f 72 6b 2d 61 72 65  rk-area work-are
6a20: 61 29 0a 09 09 09 09 20 20 20 20 20 28 6c 69 73  a).....     (lis
6a30: 74 20 27 74 65 73 74 2d 6e 61 6d 65 20 74 65 73  t 'test-name tes
6a40: 74 2d 6e 61 6d 65 29 20 0a 09 09 09 09 20 20 20  t-name) .....   
6a50: 20 20 28 6c 69 73 74 20 27 72 75 6e 73 63 72 69    (list 'runscri
6a60: 70 74 20 72 75 6e 73 63 72 69 70 74 29 20 0a 09  pt runscript) ..
6a70: 09 09 09 20 20 20 20 20 28 6c 69 73 74 20 27 72  ...     (list 'r
6a80: 75 6e 2d 69 64 20 20 20 20 72 75 6e 2d 69 64 20  un-id    run-id 
6a90: 20 20 29 0a 09 09 09 09 20 20 20 20 20 28 6c 69    ).....     (li
6aa0: 73 74 20 27 74 65 73 74 2d 69 64 20 20 20 74 65  st 'test-id   te
6ab0: 73 74 2d 69 64 20 20 29 0a 09 09 09 09 20 20 20  st-id  ).....   
6ac0: 20 20 28 6c 69 73 74 20 27 69 74 65 6d 64 61 74    (list 'itemdat
6ad0: 20 20 20 69 74 65 6d 64 61 74 20 20 29 0a 09 09     itemdat  )...
6ae0: 09 09 20 20 20 20 20 28 6c 69 73 74 20 27 6d 65  ..     (list 'me
6af0: 67 61 74 65 73 74 20 20 72 65 6d 6f 74 65 2d 6d  gatest  remote-m
6b00: 65 67 61 74 65 73 74 29 0a 09 09 09 09 20 20 20  egatest).....   
6b10: 20 20 28 6c 69 73 74 20 27 65 7a 73 74 65 70 73    (list 'ezsteps
6b20: 20 20 20 65 7a 73 74 65 70 73 29 20 0a 09 09 09     ezsteps) ....
6b30: 09 20 20 20 20 20 28 6c 69 73 74 20 27 74 61 72  .     (list 'tar
6b40: 67 65 74 20 20 20 20 6d 74 5f 74 61 72 67 65 74  get    mt_target
6b50: 29 0a 09 09 09 09 20 20 20 20 20 28 6c 69 73 74  ).....     (list
6b60: 20 27 65 6e 76 2d 6f 76 72 64 20 20 28 68 61 73   'env-ovrd  (has
6b70: 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61  h-table-ref/defa
6b80: 75 6c 74 20 2a 63 6f 6e 66 69 67 64 61 74 2a 20  ult *configdat* 
6b90: 22 65 6e 76 2d 6f 76 65 72 72 69 64 65 22 20 27  "env-override" '
6ba0: 28 29 29 29 20 0a 09 09 09 09 20 20 20 20 20 28  ())) .....     (
6bb0: 6c 69 73 74 20 27 73 65 74 2d 76 61 72 73 20 20  list 'set-vars  
6bc0: 28 69 66 20 70 61 72 61 6d 73 20 28 68 61 73 68  (if params (hash
6bd0: 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75  -table-ref/defau
6be0: 6c 74 20 70 61 72 61 6d 73 20 22 2d 73 65 74 76  lt params "-setv
6bf0: 61 72 73 22 20 23 66 29 29 29 0a 09 09 09 09 20  ars" #f)))..... 
6c00: 20 20 20 20 28 6c 69 73 74 20 27 72 75 6e 6e 61      (list 'runna
6c10: 6d 65 20 20 20 72 75 6e 6e 61 6d 65 29 0a 09 09  me   runname)...
6c20: 09 09 20 20 20 20 20 28 6c 69 73 74 20 27 6d 74  ..     (list 'mt
6c30: 2d 62 69 6e 64 69 72 2d 70 61 74 68 20 6d 74 2d  -bindir-path mt-
6c40: 62 69 6e 64 69 72 2d 70 61 74 68 29 29 29 29 29  bindir-path)))))
6c50: 29 29 20 3b 3b 20 28 73 74 72 69 6e 67 2d 69 6e  )) ;; (string-in
6c60: 74 65 72 73 70 65 72 73 65 20 6b 65 79 76 61 6c  tersperse keyval
6c70: 6c 73 74 20 22 20 22 29 29 29 29 0a 20 20 20 20  lst " ")))).    
6c80: 3b 3b 20 63 6c 65 61 6e 20 6f 75 74 20 73 74 65  ;; clean out ste
6c90: 70 20 72 65 63 6f 72 64 73 20 66 72 6f 6d 20 70  p records from p
6ca0: 72 65 76 69 6f 75 73 20 72 75 6e 20 69 66 20 74  revious run if t
6cb0: 68 65 79 20 65 78 69 73 74 0a 20 20 20 20 3b 3b  hey exist.    ;;
6cc0: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e   (debug:print-in
6cd0: 66 6f 20 34 20 22 46 49 58 4d 45 45 45 45 45 21  fo 4 "FIXMEEEEE!
6ce0: 21 21 21 20 54 68 69 73 20 63 61 6e 20 62 65 20  !!! This can be 
6cf0: 72 65 6d 6f 76 65 64 20 73 6f 6d 65 20 64 61 79  removed some day
6d00: 2c 20 70 65 72 68 61 70 73 20 6d 6f 76 65 20 61  , perhaps move a
6d10: 6c 6c 20 74 65 73 74 20 72 65 63 6f 72 64 73 20  ll test records 
6d20: 74 6f 20 74 68 65 20 74 65 73 74 20 64 62 3f 22  to the test db?"
6d30: 29 0a 20 20 20 20 3b 3b 20 28 6f 70 65 6e 2d 72  ).    ;; (open-r
6d40: 75 6e 2d 63 6c 6f 73 65 20 64 62 3a 64 65 6c 65  un-close db:dele
6d50: 74 65 2d 74 65 73 74 2d 73 74 65 70 2d 72 65 63  te-test-step-rec
6d60: 6f 72 64 73 20 64 62 20 74 65 73 74 2d 69 64 29  ords db test-id)
6d70: 0a 20 20 20 20 28 63 68 61 6e 67 65 2d 64 69 72  .    (change-dir
6d80: 65 63 74 6f 72 79 20 77 6f 72 6b 2d 61 72 65 61  ectory work-area
6d90: 29 20 3b 3b 20 73 6f 20 74 68 61 74 20 6c 6f 67  ) ;; so that log
6da0: 20 66 69 6c 65 73 20 66 72 6f 6d 20 74 68 65 20   files from the 
6db0: 6c 61 75 6e 63 68 20 70 72 6f 63 65 73 73 20 64  launch process d
6dc0: 6f 6e 27 74 20 63 6c 75 74 74 65 72 20 74 68 65  on't clutter the
6dd0: 20 74 65 73 74 20 64 69 72 0a 20 20 20 20 28 74   test dir.    (t
6de0: 65 73 74 73 3a 74 65 73 74 2d 73 65 74 2d 73 74  ests:test-set-st
6df0: 61 74 75 73 21 20 74 65 73 74 2d 69 64 20 22 4c  atus! test-id "L
6e00: 41 55 4e 43 48 45 44 22 20 22 6e 2f 61 22 20 23  AUNCHED" "n/a" #
6e10: 66 20 23 66 29 20 3b 3b 20 28 69 66 20 6c 61 75  f #f) ;; (if lau
6e20: 6e 63 68 2d 72 65 73 75 6c 74 73 20 6c 61 75 6e  nch-results laun
6e30: 63 68 2d 72 65 73 75 6c 74 73 20 22 46 41 49 4c  ch-results "FAIL
6e40: 45 44 22 29 29 0a 20 20 20 20 28 63 6f 6e 64 0a  ED")).    (cond.
6e50: 20 20 20 20 20 28 28 61 6e 64 20 6c 61 75 6e 63       ((and launc
6e60: 68 65 72 20 68 6f 73 74 73 29 20 3b 3b 20 6d 75  her hosts) ;; mu
6e70: 73 74 20 62 65 20 75 73 69 6e 67 20 73 73 68 20  st be using ssh 
6e80: 68 6f 73 74 6e 61 6d 65 0a 20 20 20 20 20 20 28  hostname.      (
6e90: 73 65 74 21 20 66 75 6c 6c 63 6d 64 20 28 61 70  set! fullcmd (ap
6ea0: 70 65 6e 64 20 6c 61 75 6e 63 68 65 72 20 28 63  pend launcher (c
6eb0: 61 72 20 68 6f 73 74 73 29 28 6c 69 73 74 20 72  ar hosts)(list r
6ec0: 65 6d 6f 74 65 2d 6d 65 67 61 74 65 73 74 20 74  emote-megatest t
6ed0: 65 73 74 2d 73 69 67 20 22 2d 65 78 65 63 75 74  est-sig "-execut
6ee0: 65 22 20 63 6d 64 70 61 72 6d 73 29 20 64 65 62  e" cmdparms) deb
6ef0: 75 67 2d 70 61 72 61 6d 29 29 29 0a 20 20 20 20  ug-param))).    
6f00: 20 3b 3b 20 28 73 65 74 21 20 66 75 6c 6c 63 6d   ;; (set! fullcm
6f10: 64 20 28 61 70 70 65 6e 64 20 6c 61 75 6e 63 68  d (append launch
6f20: 65 72 20 28 63 61 72 20 68 6f 73 74 73 29 28 6c  er (car hosts)(l
6f30: 69 73 74 20 72 65 6d 6f 74 65 2d 6d 65 67 61 74  ist remote-megat
6f40: 65 73 74 20 74 65 73 74 2d 73 69 67 20 22 2d 65  est test-sig "-e
6f50: 78 65 63 75 74 65 22 20 63 6d 64 70 61 72 6d 73  xecute" cmdparms
6f60: 29 29 29 29 0a 20 20 20 20 20 28 6c 61 75 6e 63  )))).     (launc
6f70: 68 65 72 0a 20 20 20 20 20 20 28 73 65 74 21 20  her.      (set! 
6f80: 66 75 6c 6c 63 6d 64 20 28 61 70 70 65 6e 64 20  fullcmd (append 
6f90: 6c 61 75 6e 63 68 65 72 20 28 6c 69 73 74 20 72  launcher (list r
6fa0: 65 6d 6f 74 65 2d 6d 65 67 61 74 65 73 74 20 74  emote-megatest t
6fb0: 65 73 74 2d 73 69 67 20 22 2d 65 78 65 63 75 74  est-sig "-execut
6fc0: 65 22 20 63 6d 64 70 61 72 6d 73 29 20 64 65 62  e" cmdparms) deb
6fd0: 75 67 2d 70 61 72 61 6d 29 29 29 0a 20 20 20 20  ug-param))).    
6fe0: 20 3b 3b 20 28 73 65 74 21 20 66 75 6c 6c 63 6d   ;; (set! fullcm
6ff0: 64 20 28 61 70 70 65 6e 64 20 6c 61 75 6e 63 68  d (append launch
7000: 65 72 20 28 6c 69 73 74 20 72 65 6d 6f 74 65 2d  er (list remote-
7010: 6d 65 67 61 74 65 73 74 20 74 65 73 74 2d 73 69  megatest test-si
7020: 67 20 22 2d 65 78 65 63 75 74 65 22 20 63 6d 64  g "-execute" cmd
7030: 70 61 72 6d 73 29 29 29 29 0a 20 20 20 20 20 28  parms)))).     (
7040: 65 6c 73 65 0a 20 20 20 20 20 20 28 69 66 20 28  else.      (if (
7050: 6e 6f 74 20 75 73 65 73 68 65 6c 6c 29 28 64 65  not useshell)(de
7060: 62 75 67 3a 70 72 69 6e 74 20 30 20 22 57 41 52  bug:print 0 "WAR
7070: 4e 49 4e 47 3a 20 69 6e 74 65 72 6e 61 6c 20 6c  NING: internal l
7080: 61 75 6e 63 68 69 6e 67 20 77 69 6c 6c 20 6e 6f  aunching will no
7090: 74 20 77 6f 72 6b 20 77 65 6c 6c 20 77 69 74 68  t work well with
70a0: 6f 75 74 20 5c 22 75 73 65 73 68 65 6c 6c 20 79  out \"useshell y
70b0: 65 73 5c 22 20 69 6e 20 79 6f 75 72 20 5b 6a 6f  es\" in your [jo
70c0: 62 74 6f 6f 6c 73 5d 20 73 65 63 74 69 6f 6e 22  btools] section"
70d0: 29 29 0a 20 20 20 20 20 20 28 73 65 74 21 20 66  )).      (set! f
70e0: 75 6c 6c 63 6d 64 20 28 61 70 70 65 6e 64 20 28  ullcmd (append (
70f0: 6c 69 73 74 20 72 65 6d 6f 74 65 2d 6d 65 67 61  list remote-mega
7100: 74 65 73 74 20 74 65 73 74 2d 73 69 67 20 22 2d  test test-sig "-
7110: 65 78 65 63 75 74 65 22 20 63 6d 64 70 61 72 6d  execute" cmdparm
7120: 73 29 20 64 65 62 75 67 2d 70 61 72 61 6d 20 28  s) debug-param (
7130: 6c 69 73 74 20 28 69 66 20 75 73 65 73 68 65 6c  list (if useshel
7140: 6c 20 22 26 22 20 22 22 29 29 29 29 29 29 0a 20  l "&" "")))))). 
7150: 20 20 20 3b 3b 20 28 73 65 74 21 20 66 75 6c 6c     ;; (set! full
7160: 63 6d 64 20 28 6c 69 73 74 20 72 65 6d 6f 74 65  cmd (list remote
7170: 2d 6d 65 67 61 74 65 73 74 20 74 65 73 74 2d 73  -megatest test-s
7180: 69 67 20 22 2d 65 78 65 63 75 74 65 22 20 63 6d  ig "-execute" cm
7190: 64 70 61 72 6d 73 20 28 69 66 20 75 73 65 73 68  dparms (if usesh
71a0: 65 6c 6c 20 22 26 22 20 22 22 29 29 29 29 29 0a  ell "&" ""))))).
71b0: 20 20 20 20 28 69 66 20 28 61 72 67 73 3a 67 65      (if (args:ge
71c0: 74 2d 61 72 67 20 22 2d 78 74 65 72 6d 22 29 28  t-arg "-xterm")(
71d0: 73 65 74 21 20 66 75 6c 6c 63 6d 64 20 28 61 70  set! fullcmd (ap
71e0: 70 65 6e 64 20 66 75 6c 6c 63 6d 64 20 28 6c 69  pend fullcmd (li
71f0: 73 74 20 22 2d 78 74 65 72 6d 22 29 29 29 29 0a  st "-xterm")))).
7200: 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74      (debug:print
7210: 20 31 20 22 4c 61 75 6e 63 68 69 6e 67 20 22 20   1 "Launching " 
7220: 77 6f 72 6b 2d 61 72 65 61 29 0a 20 20 20 20 3b  work-area).    ;
7230: 3b 20 73 65 74 20 70 72 65 2d 6c 61 75 6e 63 68  ; set pre-launch
7240: 2d 65 6e 76 2d 76 61 72 73 20 62 65 66 6f 72 65  -env-vars before
7250: 20 6c 61 75 6e 63 68 69 6e 67 2c 20 6b 65 65 70   launching, keep
7260: 20 74 68 65 20 76 61 72 73 20 69 6e 20 70 72 65   the vars in pre
7270: 76 76 61 6c 73 20 61 6e 64 20 70 75 74 20 74 68  vvals and put th
7280: 65 20 65 6e 76 69 6f 6e 6d 65 6e 74 20 62 61 63  e envionment bac
7290: 6b 20 77 68 65 6e 20 64 6f 6e 65 0a 20 20 20 20  k when done.    
72a0: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22  (debug:print 4 "
72b0: 66 75 6c 6c 63 6d 64 3a 20 22 20 66 75 6c 6c 63  fullcmd: " fullc
72c0: 6d 64 29 0a 20 20 20 20 28 6c 65 74 2a 20 28 28  md).    (let* ((
72d0: 63 6f 6d 6d 6f 6e 70 72 65 76 76 61 6c 73 20 28  commonprevvals (
72e0: 61 6c 69 73 74 2d 3e 65 6e 76 2d 76 61 72 73 0a  alist->env-vars.
72f0: 09 09 09 20 20 20 20 28 68 61 73 68 2d 74 61 62  ...    (hash-tab
7300: 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74 20 2a  le-ref/default *
7310: 63 6f 6e 66 69 67 64 61 74 2a 20 22 65 6e 76 2d  configdat* "env-
7320: 6f 76 65 72 72 69 64 65 22 20 27 28 29 29 29 29  override" '())))
7330: 0a 09 20 20 20 28 74 65 73 74 70 72 65 76 76 61  ..   (testprevva
7340: 6c 73 20 20 20 28 61 6c 69 73 74 2d 3e 65 6e 76  ls   (alist->env
7350: 2d 76 61 72 73 0a 09 09 09 20 20 20 20 28 68 61  -vars....    (ha
7360: 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66  sh-table-ref/def
7370: 61 75 6c 74 20 74 65 73 74 2d 63 6f 6e 66 20 22  ault test-conf "
7380: 70 72 65 2d 6c 61 75 6e 63 68 2d 65 6e 76 2d 6f  pre-launch-env-o
7390: 76 65 72 72 69 64 65 73 22 20 27 28 29 29 29 29  verrides" '())))
73a0: 0a 09 20 20 20 28 6d 69 73 63 70 72 65 76 76 61  ..   (miscprevva
73b0: 6c 73 20 20 20 28 61 6c 69 73 74 2d 3e 65 6e 76  ls   (alist->env
73c0: 2d 76 61 72 73 20 3b 3b 20 63 6f 6e 73 6f 6c 69  -vars ;; consoli
73d0: 64 61 74 65 20 74 68 69 73 20 63 6f 64 65 20 77  date this code w
73e0: 69 74 68 20 74 68 65 20 63 6f 64 65 20 69 6e 20  ith the code in 
73f0: 6d 65 67 61 74 65 73 74 2e 73 63 6d 20 66 6f 72  megatest.scm for
7400: 20 22 2d 65 78 65 63 75 74 65 22 0a 09 09 09 20   "-execute".... 
7410: 20 20 20 28 61 70 70 65 6e 64 20 28 6c 69 73 74     (append (list
7420: 20 28 6c 69 73 74 20 22 4d 54 5f 54 45 53 54 5f   (list "MT_TEST_
7430: 52 55 4e 5f 44 49 52 22 20 77 6f 72 6b 2d 61 72  RUN_DIR" work-ar
7440: 65 61 29 0a 09 09 09 09 09 20 20 28 6c 69 73 74  ea)......  (list
7450: 20 22 4d 54 5f 54 45 53 54 5f 4e 41 4d 45 22 20   "MT_TEST_NAME" 
7460: 74 65 73 74 2d 6e 61 6d 65 29 0a 09 09 09 09 09  test-name)......
7470: 20 20 28 6c 69 73 74 20 22 4d 54 5f 49 54 45 4d    (list "MT_ITEM
7480: 5f 49 4e 46 4f 22 20 28 63 6f 6e 63 20 69 74 65  _INFO" (conc ite
7490: 6d 64 61 74 29 29 20 0a 09 09 09 09 09 20 20 28  mdat)) ......  (
74a0: 6c 69 73 74 20 22 4d 54 5f 52 55 4e 4e 41 4d 45  list "MT_RUNNAME
74b0: 22 20 20 20 72 75 6e 6e 61 6d 65 29 0a 09 09 09  "   runname)....
74c0: 09 09 20 20 28 6c 69 73 74 20 22 4d 54 5f 54 41  ..  (list "MT_TA
74d0: 52 47 45 54 22 20 20 20 20 6d 74 5f 74 61 72 67  RGET"    mt_targ
74e0: 65 74 29 0a 09 09 09 09 09 20 20 29 0a 09 09 09  et)......  )....
74f0: 09 20 20 20 20 69 74 65 6d 64 61 74 29 29 29 0a  .    itemdat))).
7500: 09 20 20 20 28 6c 61 75 6e 63 68 2d 72 65 73 75  .   (launch-resu
7510: 6c 74 73 20 28 61 70 70 6c 79 20 63 6d 64 2d 72  lts (apply cmd-r
7520: 75 6e 2d 77 69 74 68 2d 73 74 64 65 72 72 2d 3e  un-with-stderr->
7530: 6c 69 73 74 20 3b 3b 20 63 6d 64 2d 72 75 6e 2d  list ;; cmd-run-
7540: 70 72 6f 63 2d 65 61 63 68 2d 6c 69 6e 65 0a 09  proc-each-line..
7550: 09 09 09 20 20 28 69 66 20 75 73 65 73 68 65 6c  ...  (if useshel
7560: 6c 0a 09 09 09 09 20 20 20 20 20 20 28 73 74 72  l.....      (str
7570: 69 6e 67 2d 69 6e 74 65 72 73 70 65 72 73 65 20  ing-intersperse 
7580: 66 75 6c 6c 63 6d 64 20 22 20 22 29 0a 09 09 09  fullcmd " ")....
7590: 09 20 20 20 20 20 20 28 63 61 72 20 66 75 6c 6c  .      (car full
75a0: 63 6d 64 29 29 0a 09 09 09 09 20 20 3b 3b 20 63  cmd)).....  ;; c
75b0: 6f 6e 63 0a 09 09 09 09 20 20 28 69 66 20 75 73  onc.....  (if us
75c0: 65 73 68 65 6c 6c 0a 09 09 09 09 20 20 20 20 20  eshell.....     
75d0: 20 27 28 29 0a 09 09 09 09 20 20 20 20 20 20 28   '().....      (
75e0: 63 64 72 20 66 75 6c 6c 63 6d 64 29 29 29 29 29  cdr fullcmd)))))
75f0: 20 3b 3b 20 20 6c 61 75 6e 63 68 65 72 20 66 75   ;;  launcher fu
7600: 6c 6c 63 6d 64 29 29 29 3b 3b 20 28 61 70 70 6c  llcmd)));; (appl
7610: 79 20 63 6d 64 2d 72 75 6e 2d 70 72 6f 63 2d 65  y cmd-run-proc-e
7620: 61 63 68 2d 6c 69 6e 65 20 6c 61 75 6e 63 68 65  ach-line launche
7630: 72 20 70 72 69 6e 74 20 66 75 6c 6c 63 6d 64 29  r print fullcmd)
7640: 29 29 20 3b 3b 20 28 63 6d 64 2d 72 75 6e 2d 3e  )) ;; (cmd-run->
7650: 6c 69 73 74 20 66 75 6c 6c 63 6d 64 29 29 0a 20  list fullcmd)). 
7660: 20 20 20 20 20 28 77 69 74 68 2d 6f 75 74 70 75       (with-outpu
7670: 74 2d 74 6f 2d 66 69 6c 65 20 22 6d 74 5f 6c 61  t-to-file "mt_la
7680: 75 6e 63 68 2e 6c 6f 67 22 0a 09 28 6c 61 6d 62  unch.log"..(lamb
7690: 64 61 20 28 29 0a 09 20 20 28 61 70 70 6c 79 20  da ()..  (apply 
76a0: 70 72 69 6e 74 20 6c 61 75 6e 63 68 2d 72 65 73  print launch-res
76b0: 75 6c 74 73 29 29 29 0a 20 20 20 20 20 20 28 64  ults))).      (d
76c0: 65 62 75 67 3a 70 72 69 6e 74 20 32 20 22 4c 61  ebug:print 2 "La
76d0: 75 6e 63 68 69 6e 67 20 63 6f 6d 70 6c 65 74 65  unching complete
76e0: 64 2c 20 75 70 64 61 74 69 6e 67 20 64 62 22 29  d, updating db")
76f0: 0a 20 20 20 20 20 20 28 64 65 62 75 67 3a 70 72  .      (debug:pr
7700: 69 6e 74 20 32 20 22 4c 61 75 6e 63 68 20 72 65  int 2 "Launch re
7710: 73 75 6c 74 73 3a 20 22 20 6c 61 75 6e 63 68 2d  sults: " launch-
7720: 72 65 73 75 6c 74 73 29 0a 20 20 20 20 20 20 28  results).      (
7730: 69 66 20 28 6e 6f 74 20 6c 61 75 6e 63 68 2d 72  if (not launch-r
7740: 65 73 75 6c 74 73 29 0a 09 20 20 28 62 65 67 69  esults)..  (begi
7750: 6e 0a 09 20 20 20 20 28 70 72 69 6e 74 20 22 45  n..    (print "E
7760: 52 52 4f 52 3a 20 46 61 69 6c 65 64 20 74 6f 20  RROR: Failed to 
7770: 72 75 6e 20 22 20 28 73 74 72 69 6e 67 2d 69 6e  run " (string-in
7780: 74 65 72 73 70 65 72 73 65 20 66 75 6c 6c 63 6d  tersperse fullcm
7790: 64 20 22 20 22 29 20 22 2c 20 65 78 69 74 69 6e  d " ") ", exitin
77a0: 67 20 6e 6f 77 22 29 0a 09 20 20 20 20 3b 3b 20  g now")..    ;; 
77b0: 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69 7a  (sqlite3:finaliz
77c0: 65 21 20 64 62 29 0a 09 20 20 20 20 3b 3b 20 67  e! db)..    ;; g
77d0: 6f 6f 64 20 6f 6c 65 20 22 65 78 69 74 22 20 73  ood ole "exit" s
77e0: 65 65 6d 73 20 6e 6f 74 20 74 6f 20 77 6f 72 6b  eems not to work
77f0: 0a 09 20 20 20 20 3b 3b 20 28 5f 65 78 69 74 20  ..    ;; (_exit 
7800: 39 29 0a 09 20 20 20 20 3b 3b 20 62 75 74 20 74  9)..    ;; but t
7810: 68 69 73 20 68 61 63 6b 20 77 69 6c 6c 20 77 6f  his hack will wo
7820: 72 6b 21 20 54 68 61 6e 6b 73 20 67 6f 20 74 6f  rk! Thanks go to
7830: 20 41 6c 61 6e 20 50 6f 73 74 20 6f 66 20 74 68   Alan Post of th
7840: 65 20 43 68 69 63 6b 65 6e 20 65 6d 61 69 6c 20  e Chicken email 
7850: 6c 69 73 74 0a 09 20 20 20 20 3b 3b 20 4e 42 2f  list..    ;; NB/
7860: 2f 20 49 73 20 74 68 69 73 20 73 74 69 6c 6c 20  / Is this still 
7870: 6e 65 65 64 65 64 3f 20 53 68 6f 75 6c 64 20 62  needed? Should b
7880: 65 20 73 61 66 65 20 74 6f 20 67 6f 20 62 61 63  e safe to go bac
7890: 6b 20 74 6f 20 22 65 78 69 74 22 20 6e 6f 77 3f  k to "exit" now?
78a0: 0a 09 20 20 20 20 28 70 72 6f 63 65 73 73 2d 73  ..    (process-s
78b0: 69 67 6e 61 6c 20 28 63 75 72 72 65 6e 74 2d 70  ignal (current-p
78c0: 72 6f 63 65 73 73 2d 69 64 29 20 73 69 67 6e 61  rocess-id) signa
78d0: 6c 2f 6b 69 6c 6c 29 0a 09 20 20 20 20 29 29 0a  l/kill)..    )).
78e0: 20 20 20 20 20 20 28 61 6c 69 73 74 2d 3e 65 6e        (alist->en
78f0: 76 2d 76 61 72 73 20 6d 69 73 63 70 72 65 76 76  v-vars miscprevv
7900: 61 6c 73 29 0a 20 20 20 20 20 20 28 61 6c 69 73  als).      (alis
7910: 74 2d 3e 65 6e 76 2d 76 61 72 73 20 74 65 73 74  t->env-vars test
7920: 70 72 65 76 76 61 6c 73 29 0a 20 20 20 20 20 20  prevvals).      
7930: 28 61 6c 69 73 74 2d 3e 65 6e 76 2d 76 61 72 73  (alist->env-vars
7940: 20 63 6f 6d 6d 6f 6e 70 72 65 76 76 61 6c 73 29   commonprevvals)
7950: 0a 20 20 20 20 20 20 6c 61 75 6e 63 68 2d 72 65  .      launch-re
7960: 73 75 6c 74 73 29 29 0a 20 20 28 63 68 61 6e 67  sults)).  (chang
7970: 65 2d 64 69 72 65 63 74 6f 72 79 20 2a 74 6f 70  e-directory *top
7980: 70 61 74 68 2a 29 29 0a 0a                       path*))..