Megatest

Hex Artifact Content
Login

Artifact b605c5e7c58483b13aac4cfda4b3b1227d3d6557:


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 20 20 73   PURPOSE...;;  s
0150: 74 72 66 74 69 6d 65 28 27 25 6d 2f 25 64 2f 25  trftime('%m/%d/%
0160: 59 20 25 48 3a 25 4d 3a 25 53 27 2c 27 6e 6f 77  Y %H:%M:%S','now
0170: 27 2c 27 6c 6f 63 61 6c 74 69 6d 65 27 29 0a 0a  ','localtime')..
0180: 28 75 73 65 20 73 71 6c 69 74 65 33 20 73 72 66  (use sqlite3 srf
0190: 69 2d 31 20 70 6f 73 69 78 20 72 65 67 65 78 20  i-1 posix regex 
01a0: 72 65 67 65 78 2d 63 61 73 65 20 73 72 66 69 2d  regex-case srfi-
01b0: 36 39 20 64 6f 74 2d 6c 6f 63 6b 69 6e 67 20 28  69 dot-locking (
01c0: 73 72 66 69 20 31 38 29 20 70 6f 73 69 78 2d 65  srfi 18) posix-e
01d0: 78 74 72 61 73 20 64 69 72 65 63 74 6f 72 79 2d  xtras directory-
01e0: 75 74 69 6c 73 29 0a 28 69 6d 70 6f 72 74 20 28  utils).(import (
01f0: 70 72 65 66 69 78 20 73 71 6c 69 74 65 33 20 73  prefix sqlite3 s
0200: 71 6c 69 74 65 33 3a 29 29 0a 0a 28 64 65 63 6c  qlite3:))..(decl
0210: 61 72 65 20 28 75 6e 69 74 20 72 75 6e 73 29 29  are (unit runs))
0220: 0a 28 64 65 63 6c 61 72 65 20 28 75 73 65 73 20  .(declare (uses 
0230: 64 62 29 29 0a 28 64 65 63 6c 61 72 65 20 28 75  db)).(declare (u
0240: 73 65 73 20 63 6f 6d 6d 6f 6e 29 29 0a 28 64 65  ses common)).(de
0250: 63 6c 61 72 65 20 28 75 73 65 73 20 69 74 65 6d  clare (uses item
0260: 73 29 29 0a 28 64 65 63 6c 61 72 65 20 28 75 73  s)).(declare (us
0270: 65 73 20 72 75 6e 63 6f 6e 66 69 67 29 29 0a 28  es runconfig)).(
0280: 64 65 63 6c 61 72 65 20 28 75 73 65 73 20 74 65  declare (uses te
0290: 73 74 73 29 29 0a 28 64 65 63 6c 61 72 65 20 28  sts)).(declare (
02a0: 75 73 65 73 20 73 65 72 76 65 72 29 29 0a 0a 28  uses server))..(
02b0: 69 6e 63 6c 75 64 65 20 22 63 6f 6d 6d 6f 6e 5f  include "common_
02c0: 72 65 63 6f 72 64 73 2e 73 63 6d 22 29 0a 28 69  records.scm").(i
02d0: 6e 63 6c 75 64 65 20 22 6b 65 79 5f 72 65 63 6f  nclude "key_reco
02e0: 72 64 73 2e 73 63 6d 22 29 0a 28 69 6e 63 6c 75  rds.scm").(inclu
02f0: 64 65 20 22 64 62 5f 72 65 63 6f 72 64 73 2e 73  de "db_records.s
0300: 63 6d 22 29 0a 28 69 6e 63 6c 75 64 65 20 22 72  cm").(include "r
0310: 75 6e 5f 72 65 63 6f 72 64 73 2e 73 63 6d 22 29  un_records.scm")
0320: 0a 28 69 6e 63 6c 75 64 65 20 22 74 65 73 74 5f  .(include "test_
0330: 72 65 63 6f 72 64 73 2e 73 63 6d 22 29 0a 0a 3b  records.scm")..;
0340: 3b 20 72 75 6e 73 3a 67 65 74 2d 72 75 6e 73 2d  ; runs:get-runs-
0350: 62 79 2d 70 61 74 74 0a 3b 3b 20 67 65 74 20 72  by-patt.;; get r
0360: 75 6e 73 20 62 79 20 6c 69 73 74 20 6f 66 20 63  uns by list of c
0370: 72 69 74 65 72 69 61 0a 3b 3b 20 72 65 67 69 73  riteria.;; regis
0380: 74 65 72 20 61 20 74 65 73 74 20 72 75 6e 20 77  ter a test run w
0390: 69 74 68 20 74 68 65 20 64 62 0a 3b 3b 0a 3b 3b  ith the db.;;.;;
03a0: 20 55 73 65 3a 20 28 64 62 2d 67 65 74 2d 76 61   Use: (db-get-va
03b0: 6c 75 65 2d 62 79 2d 68 65 61 64 65 72 20 28 64  lue-by-header (d
03c0: 62 3a 67 65 74 2d 68 65 61 64 65 72 20 72 75 6e  b:get-header run
03d0: 69 6e 66 6f 29 28 64 62 3a 67 65 74 2d 72 6f 77  info)(db:get-row
03e0: 20 72 75 6e 69 6e 66 6f 29 29 0a 3b 3b 20 20 74   runinfo)).;;  t
03f0: 6f 20 65 78 74 72 61 63 74 20 69 6e 66 6f 20 66  o extract info f
0400: 72 6f 6d 20 74 68 65 20 73 74 72 75 63 74 75 72  rom the structur
0410: 65 20 72 65 74 75 72 6e 65 64 0a 3b 3b 0a 28 64  e returned.;;.(d
0420: 65 66 69 6e 65 20 28 72 75 6e 73 3a 67 65 74 2d  efine (runs:get-
0430: 72 75 6e 73 2d 62 79 2d 70 61 74 74 20 64 62 20  runs-by-patt db 
0440: 6b 65 79 73 20 72 75 6e 6e 61 6d 65 70 61 74 74  keys runnamepatt
0450: 29 20 3b 3b 20 74 65 73 74 2d 6e 61 6d 65 29 0a  ) ;; test-name).
0460: 20 20 28 6c 65 74 2a 20 28 28 6b 65 79 76 61 6c    (let* ((keyval
0470: 6c 73 74 20 28 6b 65 79 73 2d 3e 76 61 6c 6c 69  lst (keys->valli
0480: 73 74 20 6b 65 79 73 29 29 0a 09 20 28 74 6d 70  st keys)).. (tmp
0490: 20 20 20 20 20 20 28 72 75 6e 73 3a 67 65 74 2d        (runs:get-
04a0: 73 74 64 2d 72 75 6e 2d 66 69 65 6c 64 73 20 6b  std-run-fields k
04b0: 65 79 73 20 27 28 22 69 64 22 20 22 72 75 6e 6e  eys '("id" "runn
04c0: 61 6d 65 22 20 22 73 74 61 74 65 22 20 22 73 74  ame" "state" "st
04d0: 61 74 75 73 22 20 22 6f 77 6e 65 72 22 20 22 65  atus" "owner" "e
04e0: 76 65 6e 74 5f 74 69 6d 65 22 29 29 29 0a 09 20  vent_time"))).. 
04f0: 28 6b 65 79 73 74 72 20 20 20 28 63 61 72 20 74  (keystr   (car t
0500: 6d 70 29 29 0a 09 20 28 68 65 61 64 65 72 20 20  mp)).. (header  
0510: 20 28 63 61 64 72 20 74 6d 70 29 29 0a 09 20 28   (cadr tmp)).. (
0520: 72 65 73 20 20 20 20 20 27 28 29 29 0a 09 20 28  res     '()).. (
0530: 6b 65 79 2d 70 61 74 74 20 22 22 29 0a 09 20 28  key-patt "").. (
0540: 72 75 6e 77 69 6c 64 74 79 70 65 20 28 69 66 20  runwildtype (if 
0550: 28 73 75 62 73 74 72 69 6e 67 2d 69 6e 64 65 78  (substring-index
0560: 20 22 25 22 20 72 75 6e 6e 61 6d 65 70 61 74 74   "%" runnamepatt
0570: 29 20 22 6c 69 6b 65 22 20 22 67 6c 6f 62 22 29  ) "like" "glob")
0580: 29 0a 09 20 28 71 72 79 2d 73 74 72 20 20 23 66  ).. (qry-str  #f
0590: 29 29 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 68  )).    (for-each
05a0: 20 28 6c 61 6d 62 64 61 20 28 6b 65 79 76 61 6c   (lambda (keyval
05b0: 29 0a 09 09 28 6c 65 74 2a 20 28 28 6b 65 79 20  )...(let* ((key 
05c0: 20 20 20 28 76 65 63 74 6f 72 2d 72 65 66 20 6b     (vector-ref k
05d0: 65 79 76 61 6c 20 30 29 29 0a 09 09 20 20 20 20  eyval 0))...    
05e0: 20 20 20 28 66 75 6c 6b 65 79 20 28 63 6f 6e 63     (fulkey (conc
05f0: 20 22 3a 22 20 6b 65 79 29 29 0a 09 09 20 20 20   ":" key))...   
0600: 20 20 20 20 28 70 61 74 74 20 20 20 28 61 72 67      (patt   (arg
0610: 73 3a 67 65 74 2d 61 72 67 20 66 75 6c 6b 65 79  s:get-arg fulkey
0620: 29 29 0a 09 09 20 20 20 20 20 20 20 28 77 69 6c  ))...       (wil
0630: 64 74 79 70 65 20 28 69 66 20 28 73 75 62 73 74  dtype (if (subst
0640: 72 69 6e 67 2d 69 6e 64 65 78 20 22 25 22 20 70  ring-index "%" p
0650: 61 74 74 29 20 22 6c 69 6b 65 22 20 22 67 6c 6f  att) "like" "glo
0660: 62 22 29 29 29 0a 09 09 20 20 28 69 66 20 70 61  b")))...  (if pa
0670: 74 74 0a 09 09 20 20 20 20 20 20 28 73 65 74 21  tt...      (set!
0680: 20 6b 65 79 2d 70 61 74 74 20 28 63 6f 6e 63 20   key-patt (conc 
0690: 6b 65 79 2d 70 61 74 74 20 22 20 41 4e 44 20 22  key-patt " AND "
06a0: 20 6b 65 79 20 22 20 22 20 77 69 6c 64 74 79 70   key " " wildtyp
06b0: 65 20 22 20 27 22 20 70 61 74 74 20 22 27 22 29  e " '" patt "'")
06c0: 29 0a 09 09 20 20 20 20 20 20 28 62 65 67 69 6e  )...      (begin
06d0: 0a 09 09 09 28 64 65 62 75 67 3a 70 72 69 6e 74  ....(debug:print
06e0: 20 30 20 22 45 52 52 4f 52 3a 20 73 65 61 72 63   0 "ERROR: searc
06f0: 68 69 6e 67 20 66 6f 72 20 72 75 6e 73 20 77 69  hing for runs wi
0700: 74 68 20 6e 6f 20 70 61 74 74 65 72 6e 20 73 65  th no pattern se
0710: 74 20 66 6f 72 20 22 20 66 75 6c 6b 65 79 29 0a  t for " fulkey).
0720: 09 09 09 28 65 78 69 74 20 36 29 29 29 29 29 0a  ...(exit 6))))).
0730: 09 20 20 20 20 20 20 6b 65 79 73 29 0a 20 20 20  .      keys).   
0740: 20 28 73 65 74 21 20 71 72 79 2d 73 74 72 20 28   (set! qry-str (
0750: 63 6f 6e 63 20 22 53 45 4c 45 43 54 20 22 20 6b  conc "SELECT " k
0760: 65 79 73 74 72 20 22 20 46 52 4f 4d 20 72 75 6e  eystr " FROM run
0770: 73 20 57 48 45 52 45 20 72 75 6e 6e 61 6d 65 20  s WHERE runname 
0780: 22 20 72 75 6e 77 69 6c 64 74 79 70 65 20 22 20  " runwildtype " 
0790: 3f 20 22 20 6b 65 79 2d 70 61 74 74 20 22 3b 22  ? " key-patt ";"
07a0: 29 29 0a 20 20 20 20 28 64 65 62 75 67 3a 70 72  )).    (debug:pr
07b0: 69 6e 74 2d 69 6e 66 6f 20 34 20 22 72 75 6e 73  int-info 4 "runs
07c0: 3a 67 65 74 2d 72 75 6e 73 2d 62 79 2d 70 61 74  :get-runs-by-pat
07d0: 74 20 71 72 79 3d 22 20 71 72 79 2d 73 74 72 20  t qry=" qry-str 
07e0: 22 20 22 20 72 75 6e 6e 61 6d 65 70 61 74 74 29  " " runnamepatt)
07f0: 0a 20 20 20 20 28 73 71 6c 69 74 65 33 3a 66 6f  .    (sqlite3:fo
0800: 72 2d 65 61 63 68 2d 72 6f 77 20 0a 20 20 20 20  r-each-row .    
0810: 20 28 6c 61 6d 62 64 61 20 28 61 20 2e 20 72 29   (lambda (a . r)
0820: 0a 20 20 20 20 20 20 20 28 73 65 74 21 20 72 65  .       (set! re
0830: 73 20 28 63 6f 6e 73 20 28 6c 69 73 74 2d 3e 76  s (cons (list->v
0840: 65 63 74 6f 72 20 28 63 6f 6e 73 20 61 20 72 29  ector (cons a r)
0850: 29 20 72 65 73 29 29 29 0a 20 20 20 20 20 64 62  ) res))).     db
0860: 20 0a 20 20 20 20 20 71 72 79 2d 73 74 72 0a 20   .     qry-str. 
0870: 20 20 20 20 72 75 6e 6e 61 6d 65 70 61 74 74 29      runnamepatt)
0880: 0a 20 20 20 20 28 76 65 63 74 6f 72 20 68 65 61  .    (vector hea
0890: 64 65 72 20 72 65 73 29 29 29 0a 0a 28 64 65 66  der res)))..(def
08a0: 69 6e 65 20 28 72 75 6e 73 3a 74 65 73 74 2d 67  ine (runs:test-g
08b0: 65 74 2d 66 75 6c 6c 2d 70 61 74 68 20 74 65 73  et-full-path tes
08c0: 74 29 0a 20 20 28 6c 65 74 2a 20 28 28 74 65 73  t).  (let* ((tes
08d0: 74 6e 61 6d 65 20 28 64 62 3a 74 65 73 74 2d 67  tname (db:test-g
08e0: 65 74 2d 74 65 73 74 6e 61 6d 65 20 20 20 74 65  et-testname   te
08f0: 73 74 29 29 0a 09 20 28 69 74 65 6d 70 61 74 68  st)).. (itempath
0900: 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 69 74   (db:test-get-it
0910: 65 6d 2d 70 61 74 68 20 74 65 73 74 29 29 29 0a  em-path test))).
0920: 20 20 20 20 28 63 6f 6e 63 20 74 65 73 74 6e 61      (conc testna
0930: 6d 65 20 28 69 66 20 28 65 71 75 61 6c 3f 20 69  me (if (equal? i
0940: 74 65 6d 70 61 74 68 20 22 22 29 20 22 22 20 28  tempath "") "" (
0950: 63 6f 6e 63 20 22 28 22 20 69 74 65 6d 70 61 74  conc "(" itempat
0960: 68 20 22 29 22 29 29 29 29 29 0a 0a 28 64 65 66  h ")")))))..(def
0970: 69 6e 65 20 28 73 65 74 2d 6d 65 67 61 74 65 73  ine (set-megates
0980: 74 2d 65 6e 76 2d 76 61 72 73 20 72 75 6e 2d 69  t-env-vars run-i
0990: 64 20 23 21 6b 65 79 20 28 69 6e 6b 65 79 73 20  d #!key (inkeys 
09a0: 23 66 29 28 69 6e 72 75 6e 6e 61 6d 65 20 23 66  #f)(inrunname #f
09b0: 29 29 0a 20 20 28 6c 65 74 20 28 28 6b 65 79 73  )).  (let ((keys
09c0: 20 28 69 66 20 69 6e 6b 65 79 73 20 69 6e 6b 65   (if inkeys inke
09d0: 79 73 20 28 63 64 62 3a 72 65 6d 6f 74 65 2d 72  ys (cdb:remote-r
09e0: 75 6e 20 64 62 3a 67 65 74 2d 6b 65 79 73 20 23  un db:get-keys #
09f0: 66 29 29 29 0a 09 28 76 61 6c 73 20 28 68 61 73  f)))..(vals (has
0a00: 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61  h-table-ref/defa
0a10: 75 6c 74 20 2a 65 6e 76 2d 76 61 72 73 2d 62 79  ult *env-vars-by
0a20: 2d 72 75 6e 2d 69 64 2a 20 72 75 6e 2d 69 64 20  -run-id* run-id 
0a30: 23 66 29 29 29 0a 20 20 20 20 3b 3b 20 67 65 74  #f))).    ;; get
0a40: 20 74 68 65 20 69 6e 66 6f 20 66 72 6f 6d 20 74   the info from t
0a50: 68 65 20 64 62 20 61 6e 64 20 70 75 74 20 69 74  he db and put it
0a60: 20 69 6e 20 74 68 65 20 63 61 63 68 65 0a 20 20   in the cache.  
0a70: 20 20 28 69 66 20 28 6e 6f 74 20 76 61 6c 73 29    (if (not vals)
0a80: 0a 09 28 6c 65 74 20 28 28 68 74 20 28 6d 61 6b  ..(let ((ht (mak
0a90: 65 2d 68 61 73 68 2d 74 61 62 6c 65 29 29 29 0a  e-hash-table))).
0aa0: 09 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 73  .  (hash-table-s
0ab0: 65 74 21 20 2a 65 6e 76 2d 76 61 72 73 2d 62 79  et! *env-vars-by
0ac0: 2d 72 75 6e 2d 69 64 2a 20 72 75 6e 2d 69 64 20  -run-id* run-id 
0ad0: 68 74 29 0a 09 20 20 28 73 65 74 21 20 76 61 6c  ht)..  (set! val
0ae0: 73 20 68 74 29 0a 09 20 20 28 66 6f 72 2d 65 61  s ht)..  (for-ea
0af0: 63 68 0a 09 20 20 20 28 6c 61 6d 62 64 61 20 28  ch..   (lambda (
0b00: 6b 65 79 29 0a 09 20 20 20 20 20 28 68 61 73 68  key)..     (hash
0b10: 2d 74 61 62 6c 65 2d 73 65 74 21 20 76 61 6c 73  -table-set! vals
0b20: 20 6b 65 79 20 28 63 64 62 3a 72 65 6d 6f 74 65   key (cdb:remote
0b30: 2d 72 75 6e 20 64 62 3a 67 65 74 2d 72 75 6e 2d  -run db:get-run-
0b40: 6b 65 79 2d 76 61 6c 20 23 66 20 72 75 6e 2d 69  key-val #f run-i
0b50: 64 20 6b 65 79 29 29 29 0a 09 20 20 20 6b 65 79  d key)))..   key
0b60: 73 29 29 29 0a 20 20 20 20 3b 3b 20 66 72 6f 6d  s))).    ;; from
0b70: 20 74 68 65 20 63 61 63 68 65 64 20 64 61 74 61   the cached data
0b80: 20 73 65 74 20 74 68 65 20 76 61 72 73 0a 20 20   set the vars.  
0b90: 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 66 6f    (hash-table-fo
0ba0: 72 2d 65 61 63 68 0a 20 20 20 20 20 76 61 6c 73  r-each.     vals
0bb0: 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 6b  .     (lambda (k
0bc0: 65 79 20 76 61 6c 29 0a 20 20 20 20 20 20 20 28  ey val).       (
0bd0: 64 65 62 75 67 3a 70 72 69 6e 74 20 32 20 22 73  debug:print 2 "s
0be0: 65 74 65 6e 76 20 22 20 28 6b 65 79 3a 67 65 74  etenv " (key:get
0bf0: 2d 66 69 65 6c 64 6e 61 6d 65 20 6b 65 79 29 20  -fieldname key) 
0c00: 22 20 22 20 76 61 6c 29 0a 20 20 20 20 20 20 20  " " val).       
0c10: 28 73 65 74 65 6e 76 20 28 6b 65 79 3a 67 65 74  (setenv (key:get
0c20: 2d 66 69 65 6c 64 6e 61 6d 65 20 6b 65 79 29 20  -fieldname key) 
0c30: 76 61 6c 29 29 29 0a 20 20 20 20 28 61 6c 69 73  val))).    (alis
0c40: 74 2d 3e 65 6e 76 2d 76 61 72 73 20 28 68 61 73  t->env-vars (has
0c50: 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61  h-table-ref/defa
0c60: 75 6c 74 20 2a 63 6f 6e 66 69 67 64 61 74 2a 20  ult *configdat* 
0c70: 22 65 6e 76 2d 6f 76 65 72 72 69 64 65 22 20 27  "env-override" '
0c80: 28 29 29 29 0a 20 20 20 20 3b 3b 20 4c 65 74 73  ())).    ;; Lets
0c90: 20 75 73 65 20 74 68 69 73 20 61 73 20 61 6e 20   use this as an 
0ca0: 6f 70 70 6f 72 74 75 6e 69 74 79 20 74 6f 20 70  opportunity to p
0cb0: 75 74 20 4d 54 5f 52 55 4e 4e 41 4d 45 20 69 6e  ut MT_RUNNAME in
0cc0: 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74   the environment
0cd0: 0a 20 20 20 20 28 73 65 74 65 6e 76 20 22 4d 54  .    (setenv "MT
0ce0: 5f 52 55 4e 4e 41 4d 45 22 20 28 69 66 20 69 6e  _RUNNAME" (if in
0cf0: 72 75 6e 6e 61 6d 65 20 69 6e 72 75 6e 6e 61 6d  runname inrunnam
0d00: 65 20 28 63 64 62 3a 72 65 6d 6f 74 65 2d 72 75  e (cdb:remote-ru
0d10: 6e 20 64 62 3a 67 65 74 2d 72 75 6e 2d 6e 61 6d  n db:get-run-nam
0d20: 65 2d 66 72 6f 6d 2d 69 64 20 23 66 20 72 75 6e  e-from-id #f run
0d30: 2d 69 64 29 29 29 0a 20 20 20 20 28 73 65 74 65  -id))).    (sete
0d40: 6e 76 20 22 4d 54 5f 52 55 4e 5f 41 52 45 41 5f  nv "MT_RUN_AREA_
0d50: 48 4f 4d 45 22 20 2a 74 6f 70 70 61 74 68 2a 29  HOME" *toppath*)
0d60: 0a 20 20 20 20 29 29 0a 0a 28 64 65 66 69 6e 65  .    ))..(define
0d70: 20 28 73 65 74 2d 69 74 65 6d 2d 65 6e 76 2d 76   (set-item-env-v
0d80: 61 72 73 20 69 74 65 6d 64 61 74 29 0a 20 20 28  ars itemdat).  (
0d90: 66 6f 72 2d 65 61 63 68 20 28 6c 61 6d 62 64 61  for-each (lambda
0da0: 20 28 69 74 65 6d 29 0a 09 20 20 20 20 20 20 28   (item)..      (
0db0: 64 65 62 75 67 3a 70 72 69 6e 74 20 32 20 22 73  debug:print 2 "s
0dc0: 65 74 65 6e 76 20 22 20 28 63 61 72 20 69 74 65  etenv " (car ite
0dd0: 6d 29 20 22 20 22 20 28 63 61 64 72 20 69 74 65  m) " " (cadr ite
0de0: 6d 29 29 0a 09 20 20 20 20 20 20 28 73 65 74 65  m))..      (sete
0df0: 6e 76 20 28 63 61 72 20 69 74 65 6d 29 20 28 63  nv (car item) (c
0e00: 61 64 72 20 69 74 65 6d 29 29 29 0a 09 20 20 20  adr item)))..   
0e10: 20 69 74 65 6d 64 61 74 29 29 0a 0a 28 64 65 66   itemdat))..(def
0e20: 69 6e 65 20 2a 6c 61 73 74 2d 6e 75 6d 2d 72 75  ine *last-num-ru
0e30: 6e 6e 69 6e 67 2d 74 65 73 74 73 2a 20 30 29 0a  nning-tests* 0).
0e40: 0a 3b 3b 20 45 76 65 72 79 20 74 69 6d 65 20 63  .;; Every time c
0e50: 61 6e 2d 72 75 6e 2d 6d 6f 72 65 2d 74 65 73 74  an-run-more-test
0e60: 73 20 69 73 20 63 61 6c 6c 65 64 20 69 6e 63 72  s is called incr
0e70: 65 6d 65 6e 74 20 74 68 65 20 64 65 6c 61 79 0a  ement the delay.
0e80: 3b 3b 20 69 66 20 74 68 65 20 63 6f 75 0a 28 64  ;; if the cou.(d
0e90: 65 66 69 6e 65 20 2a 72 75 6e 73 3a 63 61 6e 2d  efine *runs:can-
0ea0: 72 75 6e 2d 6d 6f 72 65 2d 74 65 73 74 73 2d 63  run-more-tests-c
0eb0: 6f 75 6e 74 2a 20 30 29 0a 28 64 65 66 69 6e 65  ount* 0).(define
0ec0: 20 28 72 75 6e 73 3a 73 68 72 69 6e 6b 2d 63 61   (runs:shrink-ca
0ed0: 6e 2d 72 75 6e 2d 6d 6f 72 65 2d 74 65 73 74 73  n-run-more-tests
0ee0: 2d 63 6f 75 6e 74 29 0a 20 20 28 73 65 74 21 20  -count).  (set! 
0ef0: 2a 72 75 6e 73 3a 63 61 6e 2d 72 75 6e 2d 6d 6f  *runs:can-run-mo
0f00: 72 65 2d 74 65 73 74 73 2d 63 6f 75 6e 74 2a 20  re-tests-count* 
0f10: 30 29 29 20 3b 3b 20 28 2f 20 2a 72 75 6e 73 3a  0)) ;; (/ *runs:
0f20: 63 61 6e 2d 72 75 6e 2d 6d 6f 72 65 2d 74 65 73  can-run-more-tes
0f30: 74 73 2d 63 6f 75 6e 74 2a 20 32 29 29 29 0a 0a  ts-count* 2)))..
0f40: 28 64 65 66 69 6e 65 20 28 72 75 6e 73 3a 63 61  (define (runs:ca
0f50: 6e 2d 72 75 6e 2d 6d 6f 72 65 2d 74 65 73 74 73  n-run-more-tests
0f60: 20 74 65 73 74 2d 72 65 63 6f 72 64 20 6d 61 78   test-record max
0f70: 2d 63 6f 6e 63 75 72 72 65 6e 74 2d 6a 6f 62 73  -concurrent-jobs
0f80: 29 0a 20 20 28 74 68 72 65 61 64 2d 73 6c 65 65  ).  (thread-slee
0f90: 70 21 20 28 63 6f 6e 64 0a 09 09 20 20 28 28 3e  p! (cond...  ((>
0fa0: 20 2a 72 75 6e 73 3a 63 61 6e 2d 72 75 6e 2d 6d   *runs:can-run-m
0fb0: 6f 72 65 2d 74 65 73 74 73 2d 63 6f 75 6e 74 2a  ore-tests-count*
0fc0: 20 32 30 29 20 32 29 3b 3b 20 6f 62 76 69 6f 75   20) 2);; obviou
0fd0: 73 6c 79 20 68 61 76 65 6e 27 74 20 68 61 64 20  sly haven't had 
0fe0: 61 6e 79 20 77 6f 72 6b 20 74 6f 20 64 6f 20 66  any work to do f
0ff0: 6f 72 20 61 20 77 68 69 6c 65 0a 09 09 20 20 28  or a while...  (
1000: 65 6c 73 65 20 30 29 29 29 0a 20 20 28 6c 65 74  else 0))).  (let
1010: 2a 20 28 28 74 63 6f 6e 66 69 67 20 20 20 20 20  * ((tconfig     
1020: 20 20 20 20 20 20 20 20 20 20 20 20 28 74 65 73              (tes
1030: 74 73 3a 74 65 73 74 71 75 65 75 65 2d 67 65 74  ts:testqueue-get
1040: 2d 74 65 73 74 63 6f 6e 66 69 67 20 74 65 73 74  -testconfig test
1050: 2d 72 65 63 6f 72 64 29 29 0a 09 20 28 6a 6f 62  -record)).. (job
1060: 67 72 6f 75 70 20 20 20 20 20 20 20 20 20 20 20  group           
1070: 20 20 20 20 20 28 63 6f 6e 66 69 67 2d 6c 6f 6f       (config-loo
1080: 6b 75 70 20 74 63 6f 6e 66 69 67 20 22 72 65 71  kup tconfig "req
1090: 75 69 72 65 6d 65 6e 74 73 22 20 22 6a 6f 62 67  uirements" "jobg
10a0: 72 6f 75 70 22 29 29 0a 09 20 28 6e 75 6d 2d 72  roup")).. (num-r
10b0: 75 6e 6e 69 6e 67 20 20 20 20 20 20 20 20 20 20  unning          
10c0: 20 20 20 28 63 64 62 3a 72 65 6d 6f 74 65 2d 72     (cdb:remote-r
10d0: 75 6e 20 64 62 3a 67 65 74 2d 63 6f 75 6e 74 2d  un db:get-count-
10e0: 74 65 73 74 73 2d 72 75 6e 6e 69 6e 67 20 23 66  tests-running #f
10f0: 29 29 0a 09 20 28 6e 75 6d 2d 72 75 6e 6e 69 6e  )).. (num-runnin
1100: 67 2d 69 6e 2d 6a 6f 62 67 72 6f 75 70 20 28 63  g-in-jobgroup (c
1110: 64 62 3a 72 65 6d 6f 74 65 2d 72 75 6e 20 64 62  db:remote-run db
1120: 3a 67 65 74 2d 63 6f 75 6e 74 2d 74 65 73 74 73  :get-count-tests
1130: 2d 72 75 6e 6e 69 6e 67 2d 69 6e 2d 6a 6f 62 67  -running-in-jobg
1140: 72 6f 75 70 20 23 66 20 6a 6f 62 67 72 6f 75 70  roup #f jobgroup
1150: 29 29 0a 09 20 28 6a 6f 62 2d 67 72 6f 75 70 2d  )).. (job-group-
1160: 6c 69 6d 69 74 20 20 20 20 20 20 20 20 20 28 63  limit         (c
1170: 6f 6e 66 69 67 2d 6c 6f 6f 6b 75 70 20 2a 63 6f  onfig-lookup *co
1180: 6e 66 69 67 64 61 74 2a 20 22 6a 6f 62 67 72 6f  nfigdat* "jobgro
1190: 75 70 73 22 20 6a 6f 62 67 72 6f 75 70 29 29 29  ups" jobgroup)))
11a0: 0a 20 20 20 20 28 69 66 20 28 3e 20 28 2b 20 6e  .    (if (> (+ n
11b0: 75 6d 2d 72 75 6e 6e 69 6e 67 20 6e 75 6d 2d 72  um-running num-r
11c0: 75 6e 6e 69 6e 67 2d 69 6e 2d 6a 6f 62 67 72 6f  unning-in-jobgro
11d0: 75 70 29 20 30 29 0a 09 28 73 65 74 21 20 2a 72  up) 0)..(set! *r
11e0: 75 6e 73 3a 63 61 6e 2d 72 75 6e 2d 6d 6f 72 65  uns:can-run-more
11f0: 2d 74 65 73 74 73 2d 63 6f 75 6e 74 2a 20 28 2b  -tests-count* (+
1200: 20 2a 72 75 6e 73 3a 63 61 6e 2d 72 75 6e 2d 6d   *runs:can-run-m
1210: 6f 72 65 2d 74 65 73 74 73 2d 63 6f 75 6e 74 2a  ore-tests-count*
1220: 20 31 29 29 29 0a 20 20 20 20 28 69 66 20 28 6e   1))).    (if (n
1230: 6f 74 20 28 65 71 3f 20 2a 6c 61 73 74 2d 6e 75  ot (eq? *last-nu
1240: 6d 2d 72 75 6e 6e 69 6e 67 2d 74 65 73 74 73 2a  m-running-tests*
1250: 20 6e 75 6d 2d 72 75 6e 6e 69 6e 67 29 29 0a 09   num-running))..
1260: 28 62 65 67 69 6e 0a 09 20 20 28 64 65 62 75 67  (begin..  (debug
1270: 3a 70 72 69 6e 74 20 32 20 22 6d 61 78 2d 63 6f  :print 2 "max-co
1280: 6e 63 75 72 72 65 6e 74 2d 6a 6f 62 73 3a 20 22  ncurrent-jobs: "
1290: 20 6d 61 78 2d 63 6f 6e 63 75 72 72 65 6e 74 2d   max-concurrent-
12a0: 6a 6f 62 73 20 22 2c 20 6e 75 6d 2d 72 75 6e 6e  jobs ", num-runn
12b0: 69 6e 67 3a 20 22 20 6e 75 6d 2d 72 75 6e 6e 69  ing: " num-runni
12c0: 6e 67 29 0a 09 20 20 28 73 65 74 21 20 2a 6c 61  ng)..  (set! *la
12d0: 73 74 2d 6e 75 6d 2d 72 75 6e 6e 69 6e 67 2d 74  st-num-running-t
12e0: 65 73 74 73 2a 20 6e 75 6d 2d 72 75 6e 6e 69 6e  ests* num-runnin
12f0: 67 29 29 29 0a 20 20 20 20 28 69 66 20 28 6e 6f  g))).    (if (no
1300: 74 20 28 65 71 3f 20 30 20 2a 67 6c 6f 62 61 6c  t (eq? 0 *global
1310: 65 78 69 74 73 74 61 74 75 73 2a 29 29 0a 09 28  exitstatus*))..(
1320: 6c 69 73 74 20 23 66 20 6e 75 6d 2d 72 75 6e 6e  list #f num-runn
1330: 69 6e 67 20 6e 75 6d 2d 72 75 6e 6e 69 6e 67 2d  ing num-running-
1340: 69 6e 2d 6a 6f 62 67 72 6f 75 70 20 6d 61 78 2d  in-jobgroup max-
1350: 63 6f 6e 63 75 72 72 65 6e 74 2d 6a 6f 62 73 20  concurrent-jobs 
1360: 6a 6f 62 2d 67 72 6f 75 70 2d 6c 69 6d 69 74 29  job-group-limit)
1370: 0a 09 28 6c 65 74 20 28 28 63 61 6e 2d 6e 6f 74  ..(let ((can-not
1380: 2d 72 75 6e 2d 6d 6f 72 65 20 28 63 6f 6e 64 0a  -run-more (cond.
1390: 09 09 09 09 20 3b 3b 20 69 66 20 6d 61 78 2d 63  .... ;; if max-c
13a0: 6f 6e 63 75 72 72 65 6e 74 2d 6a 6f 62 73 20 69  oncurrent-jobs i
13b0: 73 20 73 65 74 20 61 6e 64 20 74 68 65 20 6e 75  s set and the nu
13c0: 6d 62 65 72 20 72 75 6e 6e 69 6e 67 20 69 73 20  mber running is 
13d0: 67 72 65 61 74 65 72 20 0a 09 09 09 09 20 3b 3b  greater ..... ;;
13e0: 20 74 68 61 6e 20 69 74 20 74 68 61 6e 20 63 61   than it than ca
13f0: 6e 6e 6f 74 20 72 75 6e 20 6d 6f 72 65 20 6a 6f  nnot run more jo
1400: 62 73 0a 09 09 09 09 20 28 28 61 6e 64 20 6d 61  bs..... ((and ma
1410: 78 2d 63 6f 6e 63 75 72 72 65 6e 74 2d 6a 6f 62  x-concurrent-job
1420: 73 20 28 3e 3d 20 6e 75 6d 2d 72 75 6e 6e 69 6e  s (>= num-runnin
1430: 67 20 6d 61 78 2d 63 6f 6e 63 75 72 72 65 6e 74  g max-concurrent
1440: 2d 6a 6f 62 73 29 29 0a 09 09 09 09 20 20 28 64  -jobs)).....  (d
1450: 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 57 41  ebug:print 0 "WA
1460: 52 4e 49 4e 47 3a 20 4d 61 78 20 72 75 6e 6e 69  RNING: Max runni
1470: 6e 67 20 6a 6f 62 73 20 65 78 63 65 65 64 65 64  ng jobs exceeded
1480: 2c 20 63 75 72 72 65 6e 74 20 6e 75 6d 62 65 72  , current number
1490: 20 72 75 6e 6e 69 6e 67 3a 20 22 20 6e 75 6d 2d   running: " num-
14a0: 72 75 6e 6e 69 6e 67 20 0a 09 09 09 09 09 20 20  running ......  
14b0: 20 20 20 20 20 22 2c 20 6d 61 78 5f 63 6f 6e 63       ", max_conc
14c0: 75 72 72 65 6e 74 5f 6a 6f 62 73 3a 20 22 20 6d  urrent_jobs: " m
14d0: 61 78 2d 63 6f 6e 63 75 72 72 65 6e 74 2d 6a 6f  ax-concurrent-jo
14e0: 62 73 29 0a 09 09 09 09 20 20 23 74 29 0a 09 09  bs).....  #t)...
14f0: 09 09 20 3b 3b 20 69 66 20 6a 6f 62 2d 67 72 6f  .. ;; if job-gro
1500: 75 70 2d 6c 69 6d 69 74 20 69 73 20 73 65 74 20  up-limit is set 
1510: 61 6e 64 20 6e 75 6d 62 65 72 20 6f 66 20 6a 6f  and number of jo
1520: 62 73 20 69 6e 20 74 68 65 20 67 72 6f 75 70 20  bs in the group 
1530: 69 73 20 67 72 65 61 74 65 72 0a 09 09 09 09 20  is greater..... 
1540: 3b 3b 20 74 68 61 6e 20 74 68 65 20 6c 69 6d 69  ;; than the limi
1550: 74 20 74 68 65 6e 20 63 61 6e 6e 6f 74 20 72 75  t then cannot ru
1560: 6e 20 6d 6f 72 65 20 6a 6f 62 73 20 6f 66 20 74  n more jobs of t
1570: 68 69 73 20 6b 69 6e 64 0a 09 09 09 09 20 28 28  his kind..... ((
1580: 61 6e 64 20 6a 6f 62 2d 67 72 6f 75 70 2d 6c 69  and job-group-li
1590: 6d 69 74 0a 09 09 09 09 20 20 20 20 20 20 20 28  mit.....       (
15a0: 3e 3d 20 6e 75 6d 2d 72 75 6e 6e 69 6e 67 2d 69  >= num-running-i
15b0: 6e 2d 6a 6f 62 67 72 6f 75 70 20 6a 6f 62 2d 67  n-jobgroup job-g
15c0: 72 6f 75 70 2d 6c 69 6d 69 74 29 29 0a 09 09 09  roup-limit))....
15d0: 09 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20  .  (debug:print 
15e0: 31 20 22 57 41 52 4e 49 4e 47 3a 20 6e 75 6d 62  1 "WARNING: numb
15f0: 65 72 20 6f 66 20 6a 6f 62 73 20 22 20 6e 75 6d  er of jobs " num
1600: 2d 72 75 6e 6e 69 6e 67 2d 69 6e 2d 6a 6f 62 67  -running-in-jobg
1610: 72 6f 75 70 20 0a 09 09 09 09 09 20 20 20 20 20  roup ......     
1620: 20 20 22 20 69 6e 20 22 20 6a 6f 62 67 72 6f 75    " in " jobgrou
1630: 70 20 22 20 65 78 63 65 65 64 65 64 2c 20 77 69  p " exceeded, wi
1640: 6c 6c 20 6e 6f 74 20 72 75 6e 20 22 20 28 74 65  ll not run " (te
1650: 73 74 73 3a 74 65 73 74 71 75 65 75 65 2d 67 65  sts:testqueue-ge
1660: 74 2d 74 65 73 74 6e 61 6d 65 20 74 65 73 74 2d  t-testname test-
1670: 72 65 63 6f 72 64 29 29 0a 09 09 09 09 20 20 23  record)).....  #
1680: 74 29 0a 09 09 09 09 20 28 65 6c 73 65 20 23 66  t)..... (else #f
1690: 29 29 29 29 0a 09 20 20 28 6c 69 73 74 20 28 6e  ))))..  (list (n
16a0: 6f 74 20 63 61 6e 2d 6e 6f 74 2d 72 75 6e 2d 6d  ot can-not-run-m
16b0: 6f 72 65 29 20 6e 75 6d 2d 72 75 6e 6e 69 6e 67  ore) num-running
16c0: 20 6e 75 6d 2d 72 75 6e 6e 69 6e 67 2d 69 6e 2d   num-running-in-
16d0: 6a 6f 62 67 72 6f 75 70 20 6d 61 78 2d 63 6f 6e  jobgroup max-con
16e0: 63 75 72 72 65 6e 74 2d 6a 6f 62 73 20 6a 6f 62  current-jobs job
16f0: 2d 67 72 6f 75 70 2d 6c 69 6d 69 74 29 29 29 29  -group-limit))))
1700: 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  )..;;===========
1710: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1720: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1730: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1740: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 4e  ===========.;; N
1750: 65 77 20 6d 65 74 68 6f 64 6f 6c 6f 67 79 2e 20  ew methodology. 
1760: 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73 20 77  These routines w
1770: 69 6c 6c 20 72 65 70 6c 61 63 65 20 74 68 65 20  ill replace the 
1780: 61 62 6f 76 65 20 69 6e 20 74 69 6d 65 2e 20 46  above in time. F
1790: 6f 72 0a 3b 3b 20 6e 6f 77 20 74 68 65 20 63 6f  or.;; now the co
17a0: 64 65 20 69 73 20 64 75 70 6c 69 63 61 74 65 64  de is duplicated
17b0: 2e 20 54 68 69 73 20 73 74 75 66 66 20 69 73 20  . This stuff is 
17c0: 69 6e 69 74 69 61 6c 6c 79 20 75 73 65 64 20 69  initially used i
17d0: 6e 20 74 68 65 20 6d 6f 6e 69 74 6f 72 0a 3b 3b  n the monitor.;;
17e0: 20 62 61 73 65 64 20 63 6f 64 65 2e 0a 3b 3b 3d   based code..;;=
17f0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1800: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1810: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1820: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
1830: 3d 3d 3d 3d 3d 0a 0a 0a 3b 3b 20 54 68 69 73 20  =====...;; This 
1840: 69 73 20 61 20 64 75 70 6c 69 63 61 74 65 20 6f  is a duplicate o
1850: 66 20 72 75 6e 2d 74 65 73 74 73 20 28 77 68 69  f run-tests (whi
1860: 63 68 20 68 61 73 20 62 65 65 6e 20 64 65 70 72  ch has been depr
1870: 65 63 61 74 65 64 29 2e 20 55 73 65 20 74 68 69  ecated). Use thi
1880: 73 20 6f 6e 65 20 69 6e 73 74 65 61 64 20 6f 66  s one instead of
1890: 20 72 75 6e 20 74 65 73 74 73 2e 0a 3b 3b 20 6b   run tests..;; k
18a0: 65 79 76 61 6c 73 2e 0a 3b 3b 0a 3b 3b 20 20 74  eyvals..;;.;;  t
18b0: 65 73 74 2d 6e 61 6d 65 73 3a 20 43 6f 6d 6d 61  est-names: Comma
18c0: 20 73 65 70 61 72 61 74 65 64 20 70 61 74 74 65   separated patte
18d0: 72 6e 73 20 73 61 6d 65 20 61 73 20 74 65 73 74  rns same as test
18e0: 2d 70 61 74 74 73 20 62 75 74 20 75 73 65 64 20  -patts but used 
18f0: 69 6e 20 73 65 6c 65 63 74 69 6f 6e 20 0a 3b 3b  in selection .;;
1900: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 66                of
1910: 20 74 65 73 74 73 20 74 6f 20 72 75 6e 2e 20 54   tests to run. T
1920: 68 65 20 69 74 65 6d 20 70 6f 72 74 69 6f 6e 73  he item portions
1930: 20 61 72 65 20 6e 6f 74 20 72 65 73 70 65 63 74   are not respect
1940: 65 64 2e 0a 3b 3b 20 20 20 20 20 20 20 20 20 20  ed..;;          
1950: 20 20 20 20 46 49 58 4d 45 3a 20 65 72 72 6f 72      FIXME: error
1960: 20 6f 75 74 20 69 66 20 2f 70 61 74 74 20 73 70   out if /patt sp
1970: 65 63 69 66 69 65 64 0a 3b 3b 20 20 20 20 20 20  ecified.;;      
1980: 20 20 20 20 20 20 0a 28 64 65 66 69 6e 65 20 28        .(define (
1990: 72 75 6e 73 3a 72 75 6e 2d 74 65 73 74 73 20 74  runs:run-tests t
19a0: 61 72 67 65 74 20 72 75 6e 6e 61 6d 65 20 74 65  arget runname te
19b0: 73 74 2d 6e 61 6d 65 73 20 74 65 73 74 2d 70 61  st-names test-pa
19c0: 74 74 73 20 75 73 65 72 20 66 6c 61 67 73 29 0a  tts user flags).
19d0: 20 20 28 63 6f 6d 6d 6f 6e 3a 63 6c 65 61 72 2d    (common:clear-
19e0: 63 61 63 68 65 73 29 20 3b 3b 20 63 6c 65 61 72  caches) ;; clear
19f0: 20 61 6c 6c 20 63 61 63 68 65 73 0a 20 20 28 6c   all caches.  (l
1a00: 65 74 2a 20 28 28 64 62 20 20 20 20 20 20 20 20  et* ((db        
1a10: 20 20 23 66 29 0a 09 20 28 6b 65 79 73 20 20 20    #f).. (keys   
1a20: 20 20 20 20 20 28 63 64 62 3a 72 65 6d 6f 74 65       (cdb:remote
1a30: 2d 72 75 6e 20 64 62 3a 67 65 74 2d 6b 65 79 73  -run db:get-keys
1a40: 20 23 66 29 29 0a 09 20 28 6b 65 79 76 61 6c 6c   #f)).. (keyvall
1a50: 73 74 20 20 20 28 6b 65 79 73 3a 74 61 72 67 65  st   (keys:targe
1a60: 74 2d 3e 6b 65 79 76 61 6c 20 6b 65 79 73 20 74  t->keyval keys t
1a70: 61 72 67 65 74 29 29 0a 09 20 28 72 75 6e 2d 69  arget)).. (run-i
1a80: 64 20 20 20 20 20 20 28 63 64 62 3a 72 65 6d 6f  d      (cdb:remo
1a90: 74 65 2d 72 75 6e 20 64 62 3a 72 65 67 69 73 74  te-run db:regist
1aa0: 65 72 2d 72 75 6e 20 23 66 20 6b 65 79 73 20 6b  er-run #f keys k
1ab0: 65 79 76 61 6c 6c 73 74 20 72 75 6e 6e 61 6d 65  eyvallst runname
1ac0: 20 22 6e 65 77 22 20 22 6e 2f 61 22 20 75 73 65   "new" "n/a" use
1ad0: 72 29 29 20 20 3b 3b 20 20 74 65 73 74 2d 6e 61  r))  ;;  test-na
1ae0: 6d 65 29 29 29 0a 09 20 28 6b 65 79 76 61 6c 73  me))).. (keyvals
1af0: 20 20 20 20 20 28 69 66 20 72 75 6e 2d 69 64 20       (if run-id 
1b00: 28 63 64 62 3a 72 65 6d 6f 74 65 2d 72 75 6e 20  (cdb:remote-run 
1b10: 64 62 3a 67 65 74 2d 6b 65 79 2d 76 61 6c 73 20  db:get-key-vals 
1b20: 23 66 20 72 75 6e 2d 69 64 29 20 23 66 29 29 0a  #f run-id) #f)).
1b30: 09 20 28 64 65 66 65 72 72 65 64 20 20 20 20 27  . (deferred    '
1b40: 28 29 29 20 3b 3b 20 64 65 6c 61 79 20 72 75 6e  ()) ;; delay run
1b50: 6e 69 6e 67 20 74 68 65 73 65 20 73 69 6e 63 65  ning these since
1b60: 20 74 68 65 79 20 68 61 76 65 20 61 20 77 61 69   they have a wai
1b70: 74 6f 6e 20 63 6c 61 75 73 65 0a 09 20 3b 3b 20  ton clause.. ;; 
1b80: 6b 65 65 70 67 6f 69 6e 67 20 69 73 20 74 68 65  keepgoing is the
1b90: 20 64 65 66 61 63 74 6f 20 6d 6f 64 61 6c 69 74   defacto modalit
1ba0: 79 20 6e 6f 77 2c 20 77 69 6c 6c 20 61 64 64 20  y now, will add 
1bb0: 68 69 74 2d 6e 2d 72 75 6e 20 61 20 62 69 74 20  hit-n-run a bit 
1bc0: 6c 61 74 65 72 0a 09 20 3b 3b 20 28 6b 65 65 70  later.. ;; (keep
1bd0: 67 6f 69 6e 67 20 20 20 28 68 61 73 68 2d 74 61  going   (hash-ta
1be0: 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74 20  ble-ref/default 
1bf0: 66 6c 61 67 73 20 22 2d 6b 65 65 70 67 6f 69 6e  flags "-keepgoin
1c00: 67 22 20 23 66 29 29 0a 09 20 28 72 75 6e 63 6f  g" #f)).. (runco
1c10: 6e 66 69 67 66 20 20 20 28 63 6f 6e 63 20 20 2a  nfigf   (conc  *
1c20: 74 6f 70 70 61 74 68 2a 20 22 2f 72 75 6e 63 6f  toppath* "/runco
1c30: 6e 66 69 67 73 2e 63 6f 6e 66 69 67 22 29 29 0a  nfigs.config")).
1c40: 09 20 28 72 65 71 75 69 72 65 64 2d 74 65 73 74  . (required-test
1c50: 73 20 27 28 29 29 0a 09 20 28 74 65 73 74 2d 72  s '()).. (test-r
1c60: 65 63 6f 72 64 73 20 28 6d 61 6b 65 2d 68 61 73  ecords (make-has
1c70: 68 2d 74 61 62 6c 65 29 29 0a 20 20 20 20 20 28  h-table)).     (
1c80: 61 6c 6c 2d 74 65 73 74 2d 6e 61 6d 65 73 20 28  all-test-names (
1c90: 74 65 73 74 73 3a 67 65 74 2d 76 61 6c 69 64 2d  tests:get-valid-
1ca0: 74 65 73 74 73 20 2a 74 6f 70 70 61 74 68 2a 20  tests *toppath* 
1cb0: 22 25 22 29 29 29 20 3b 3b 20 77 65 20 6e 65 65  "%"))) ;; we nee
1cc0: 64 20 61 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  d a list of all 
1cd0: 76 61 6c 69 64 20 74 65 73 74 73 20 74 6f 20 63  valid tests to c
1ce0: 68 65 63 6b 20 77 61 69 74 6f 6e 20 6e 61 6d 65  heck waiton name
1cf0: 73 29 0a 0a 20 20 20 20 28 73 65 74 2d 6d 65 67  s)..    (set-meg
1d00: 61 74 65 73 74 2d 65 6e 76 2d 76 61 72 73 20 72  atest-env-vars r
1d10: 75 6e 2d 69 64 20 69 6e 6b 65 79 73 3a 20 6b 65  un-id inkeys: ke
1d20: 79 73 29 20 3b 3b 20 74 68 65 73 65 20 6d 61 79  ys) ;; these may
1d30: 20 62 65 20 6e 65 65 64 65 64 20 62 79 20 74 68   be needed by th
1d40: 65 20 6c 61 75 6e 63 68 69 6e 67 20 70 72 6f 63  e launching proc
1d50: 65 73 73 0a 0a 20 20 20 20 28 69 66 20 28 66 69  ess..    (if (fi
1d60: 6c 65 2d 65 78 69 73 74 73 3f 20 72 75 6e 63 6f  le-exists? runco
1d70: 6e 66 69 67 66 29 0a 09 28 73 65 74 75 70 2d 65  nfigf)..(setup-e
1d80: 6e 76 2d 64 65 66 61 75 6c 74 73 20 72 75 6e 63  nv-defaults runc
1d90: 6f 6e 66 69 67 66 20 72 75 6e 2d 69 64 20 2a 61  onfigf run-id *a
1da0: 6c 72 65 61 64 79 2d 73 65 65 6e 2d 72 75 6e 63  lready-seen-runc
1db0: 6f 6e 66 69 67 2d 69 6e 66 6f 2a 20 6b 65 79 73  onfig-info* keys
1dc0: 20 6b 65 79 76 61 6c 73 20 22 70 72 65 2d 6c 61   keyvals "pre-la
1dd0: 75 6e 63 68 2d 65 6e 76 2d 76 61 72 73 22 29 0a  unch-env-vars").
1de0: 09 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20  .(debug:print 0 
1df0: 22 57 41 52 4e 49 4e 47 3a 20 59 6f 75 20 64 6f  "WARNING: You do
1e00: 20 6e 6f 74 20 68 61 76 65 20 61 20 72 75 6e 20   not have a run 
1e10: 63 6f 6e 66 69 67 20 66 69 6c 65 3a 20 22 20 72  config file: " r
1e20: 75 6e 63 6f 6e 66 69 67 66 29 29 0a 20 20 20 20  unconfigf)).    
1e30: 0a 20 20 20 20 3b 3b 20 6c 6f 6f 6b 20 75 70 20  .    ;; look up 
1e40: 61 6c 6c 20 74 65 73 74 73 20 6d 61 74 63 68 69  all tests matchi
1e50: 6e 67 20 74 68 65 20 63 6f 6d 6d 61 20 73 65 70  ng the comma sep
1e60: 61 72 61 74 65 64 20 6c 69 73 74 20 6f 66 20 67  arated list of g
1e70: 6c 6f 62 73 20 69 6e 0a 20 20 20 20 3b 3b 20 74  lobs in.    ;; t
1e80: 65 73 74 2d 70 61 74 74 73 20 28 75 73 69 6e 67  est-patts (using
1e90: 20 25 20 61 73 20 77 69 6c 64 63 61 72 64 29 0a   % as wildcard).
1ea0: 0a 20 20 20 20 28 73 65 74 21 20 74 65 73 74 2d  .    (set! test-
1eb0: 6e 61 6d 65 73 20 28 74 65 73 74 73 3a 67 65 74  names (tests:get
1ec0: 2d 76 61 6c 69 64 2d 74 65 73 74 73 20 2a 74 6f  -valid-tests *to
1ed0: 70 70 61 74 68 2a 20 74 65 73 74 2d 6e 61 6d 65  ppath* test-name
1ee0: 73 29 29 0a 20 20 20 20 28 73 65 74 21 20 74 65  s)).    (set! te
1ef0: 73 74 2d 6e 61 6d 65 73 20 28 64 65 6c 65 74 65  st-names (delete
1f00: 2d 64 75 70 6c 69 63 61 74 65 73 20 74 65 73 74  -duplicates test
1f10: 2d 6e 61 6d 65 73 29 29 0a 0a 20 20 20 20 28 64  -names))..    (d
1f20: 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20  ebug:print-info 
1f30: 30 20 22 74 65 73 74 20 6e 61 6d 65 73 20 22 20  0 "test names " 
1f40: 74 65 73 74 2d 6e 61 6d 65 73 29 0a 0a 20 20 20  test-names)..   
1f50: 20 3b 3b 20 6f 6e 20 74 68 65 20 66 69 72 73 74   ;; on the first
1f60: 20 70 61 73 73 20 6f 72 20 63 61 6c 6c 20 74 6f   pass or call to
1f70: 20 72 75 6e 2d 74 65 73 74 73 20 73 65 74 20 46   run-tests set F
1f80: 41 49 4c 53 20 74 6f 20 4e 4f 54 5f 53 54 41 52  AILS to NOT_STAR
1f90: 54 45 44 20 69 66 0a 20 20 20 20 3b 3b 20 2d 6b  TED if.    ;; -k
1fa0: 65 65 70 67 6f 69 6e 67 20 69 73 20 73 70 65 63  eepgoing is spec
1fb0: 69 66 69 65 64 0a 20 20 20 20 28 69 66 20 28 65  ified.    (if (e
1fc0: 71 3f 20 2a 70 61 73 73 6e 75 6d 2a 20 30 29 0a  q? *passnum* 0).
1fd0: 09 28 62 65 67 69 6e 0a 09 20 20 3b 3b 20 68 61  .(begin..  ;; ha
1fe0: 76 65 20 74 6f 20 64 65 6c 65 74 65 20 74 65 73  ve to delete tes
1ff0: 74 20 72 65 63 6f 72 64 73 20 77 68 65 72 65 20  t records where 
2000: 4e 4f 54 5f 53 54 41 52 54 45 44 20 73 69 6e 63  NOT_STARTED sinc
2010: 65 20 74 68 65 79 20 63 61 6e 20 63 61 75 73 65  e they can cause
2020: 20 2d 6b 65 65 70 67 6f 69 6e 67 20 74 6f 20 0a   -keepgoing to .
2030: 09 20 20 3b 3b 20 67 65 74 20 73 74 75 63 6b 20  .  ;; get stuck 
2040: 64 75 65 20 74 6f 20 62 65 63 6f 6d 69 6e 67 20  due to becoming 
2050: 69 6e 61 63 63 65 73 73 69 62 6c 65 20 66 72 6f  inaccessible fro
2060: 6d 20 61 20 66 61 69 6c 65 64 20 74 65 73 74 2e  m a failed test.
2070: 20 49 2e 65 2e 20 69 66 20 74 65 73 74 20 42 20   I.e. if test B 
2080: 64 65 70 65 6e 64 73 20 0a 09 20 20 3b 3b 20 6f  depends ..  ;; o
2090: 6e 20 74 65 73 74 20 41 20 62 75 74 20 74 65 73  n test A but tes
20a0: 74 20 42 20 72 65 61 63 68 65 64 20 74 68 65 20  t B reached the 
20b0: 70 6f 69 6e 74 20 6f 6e 20 62 65 69 6e 67 20 72  point on being r
20c0: 65 67 69 73 74 65 72 65 64 20 61 73 20 4e 4f 54  egistered as NOT
20d0: 5f 53 54 41 52 54 45 44 20 61 6e 64 20 74 65 73  _STARTED and tes
20e0: 74 0a 09 20 20 3b 3b 20 41 20 66 61 69 6c 65 64  t..  ;; A failed
20f0: 20 66 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e   for some reason
2100: 20 74 68 65 6e 20 6f 6e 20 72 65 2d 72 75 6e 20   then on re-run 
2110: 75 73 69 6e 67 20 2d 6b 65 65 70 67 6f 69 6e 67  using -keepgoing
2120: 20 74 68 65 20 72 75 6e 20 63 61 6e 20 6e 65 76   the run can nev
2130: 65 72 20 63 6f 6d 70 6c 65 74 65 2e 0a 09 20 20  er complete...  
2140: 28 63 64 62 3a 64 65 6c 65 74 65 2d 74 65 73 74  (cdb:delete-test
2150: 73 2d 69 6e 2d 73 74 61 74 65 20 2a 72 75 6e 72  s-in-state *runr
2160: 65 6d 6f 74 65 2a 20 72 75 6e 2d 69 64 20 22 4e  emote* run-id "N
2170: 4f 54 5f 53 54 41 52 54 45 44 22 29 0a 09 20 20  OT_STARTED")..  
2180: 28 63 64 62 3a 72 65 6d 6f 74 65 2d 72 75 6e 20  (cdb:remote-run 
2190: 64 62 3a 73 65 74 2d 74 65 73 74 73 2d 73 74 61  db:set-tests-sta
21a0: 74 65 2d 73 74 61 74 75 73 20 23 66 20 72 75 6e  te-status #f run
21b0: 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 73 20 23  -id test-names #
21c0: 66 20 22 46 41 49 4c 22 20 22 4e 4f 54 5f 53 54  f "FAIL" "NOT_ST
21d0: 41 52 54 45 44 22 20 22 46 41 49 4c 22 29 29 29  ARTED" "FAIL")))
21e0: 0a 0a 20 20 20 20 3b 3b 20 66 72 6f 6d 20 68 65  ..    ;; from he
21f0: 72 65 20 6f 6e 20 6f 75 74 20 74 68 65 20 64 62  re on out the db
2200: 20 77 69 6c 6c 20 62 65 20 6f 70 65 6e 65 64 20   will be opened 
2210: 61 6e 64 20 63 6c 6f 73 65 64 20 6f 6e 20 65 76  and closed on ev
2220: 65 72 79 20 63 61 6c 6c 20 72 75 6e 73 3a 72 75  ery call runs:ru
2230: 6e 2d 74 65 73 74 73 2d 71 75 65 75 65 0a 20 20  n-tests-queue.  
2240: 20 20 3b 3b 20 28 73 71 6c 69 74 65 33 3a 66 69    ;; (sqlite3:fi
2250: 6e 61 6c 69 7a 65 21 20 64 62 29 20 0a 20 20 20  nalize! db) .   
2260: 20 3b 3b 20 6e 6f 77 20 61 64 64 20 6e 6f 6e 2d   ;; now add non-
2270: 64 69 72 65 63 74 6c 79 20 72 65 66 65 72 65 6e  directly referen
2280: 63 65 64 20 64 65 70 65 6e 64 65 6e 63 69 65 73  ced dependencies
2290: 20 28 69 2e 65 2e 20 77 61 69 74 6f 6e 29 0a 20   (i.e. waiton). 
22a0: 20 20 20 28 69 66 20 28 6e 6f 74 20 28 6e 75 6c     (if (not (nul
22b0: 6c 3f 20 74 65 73 74 2d 6e 61 6d 65 73 29 29 0a  l? test-names)).
22c0: 09 28 6c 65 74 20 6c 6f 6f 70 20 28 28 68 65 64  .(let loop ((hed
22d0: 20 28 63 61 72 20 74 65 73 74 2d 6e 61 6d 65 73   (car test-names
22e0: 29 29 0a 09 09 20 20 20 28 74 61 6c 20 28 63 64  ))...   (tal (cd
22f0: 72 20 74 65 73 74 2d 6e 61 6d 65 73 29 29 29 20  r test-names))) 
2300: 20 20 20 20 20 20 20 20 3b 3b 20 27 72 65 74 75          ;; 'retu
2310: 72 6e 2d 70 72 6f 63 73 20 74 65 6c 6c 73 20 74  rn-procs tells t
2320: 68 65 20 63 6f 6e 66 69 67 20 72 65 61 64 65 72  he config reader
2330: 20 74 6f 20 70 72 65 70 20 72 75 6e 6e 69 6e 67   to prep running
2340: 20 73 79 73 74 65 6d 20 62 75 74 20 72 65 74 75   system but retu
2350: 72 6e 20 61 20 70 72 6f 63 0a 09 20 20 28 64 65  rn a proc..  (de
2360: 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 34  bug:print-info 4
2370: 20 22 68 65 64 3d 22 20 68 65 64 20 22 20 61 74   "hed=" hed " at
2380: 20 74 6f 70 20 6f 66 20 6c 6f 6f 70 22 29 0a 09   top of loop")..
2390: 20 20 28 6c 65 74 2a 20 28 28 63 6f 6e 66 69 67    (let* ((config
23a0: 20 20 28 74 65 73 74 73 3a 67 65 74 2d 74 65 73    (tests:get-tes
23b0: 74 63 6f 6e 66 69 67 20 68 65 64 20 27 72 65 74  tconfig hed 'ret
23c0: 75 72 6e 2d 70 72 6f 63 73 29 29 0a 09 09 20 28  urn-procs))... (
23d0: 77 61 69 74 6f 6e 73 20 28 6c 65 74 20 28 28 69  waitons (let ((i
23e0: 6e 73 74 72 20 28 69 66 20 63 6f 6e 66 69 67 20  nstr (if config 
23f0: 0a 09 09 09 09 09 20 20 20 28 63 6f 6e 66 69 67  ......   (config
2400: 2d 6c 6f 6f 6b 75 70 20 63 6f 6e 66 69 67 20 22  -lookup config "
2410: 72 65 71 75 69 72 65 6d 65 6e 74 73 22 20 22 77  requirements" "w
2420: 61 69 74 6f 6e 22 29 0a 09 09 09 09 09 20 20 20  aiton")......   
2430: 28 62 65 67 69 6e 20 3b 3b 20 4e 6f 20 63 6f 6e  (begin ;; No con
2440: 66 69 67 20 6d 65 61 6e 73 20 74 68 69 73 20 69  fig means this i
2450: 73 20 61 20 6e 6f 6e 2d 65 78 69 73 74 61 6e 74  s a non-existant
2460: 20 74 65 73 74 0a 09 09 09 09 09 20 20 20 20 20   test......     
2470: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22  (debug:print 0 "
2480: 45 52 52 4f 52 3a 20 6e 6f 6e 2d 65 78 69 73 74  ERROR: non-exist
2490: 65 6e 74 20 72 65 71 75 69 72 65 64 20 74 65 73  ent required tes
24a0: 74 20 5c 22 22 20 68 65 64 20 22 5c 22 22 29 0a  t \"" hed "\"").
24b0: 09 09 09 09 09 20 20 20 20 20 28 69 66 20 64 62  .....     (if db
24c0: 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61 6c 69   (sqlite3:finali
24d0: 7a 65 21 20 64 62 29 29 0a 09 09 09 09 09 20 20  ze! db))......  
24e0: 20 20 20 28 65 78 69 74 20 31 29 29 29 29 29 0a     (exit 1))))).
24f0: 09 09 09 20 20 20 20 28 64 65 62 75 67 3a 70 72  ...    (debug:pr
2500: 69 6e 74 2d 69 6e 66 6f 20 38 20 22 77 61 69 74  int-info 8 "wait
2510: 6f 6e 73 20 73 74 72 69 6e 67 20 69 73 20 22 20  ons string is " 
2520: 69 6e 73 74 72 29 0a 09 09 09 20 20 20 20 28 6c  instr)....    (l
2530: 65 74 20 28 28 6e 65 77 77 61 69 74 6f 6e 73 0a  et ((newwaitons.
2540: 09 09 09 09 20 20 20 28 73 74 72 69 6e 67 2d 73  ....   (string-s
2550: 70 6c 69 74 20 28 63 6f 6e 64 0a 09 09 09 09 09  plit (cond......
2560: 09 20 20 28 28 70 72 6f 63 65 64 75 72 65 3f 20  .  ((procedure? 
2570: 69 6e 73 74 72 29 0a 09 09 09 09 09 09 20 20 20  instr).......   
2580: 28 6c 65 74 20 28 28 72 65 73 20 28 69 6e 73 74  (let ((res (inst
2590: 72 29 29 29 0a 09 09 09 09 09 09 20 20 20 20 20  r))).......     
25a0: 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66  (debug:print-inf
25b0: 6f 20 38 20 22 77 61 69 74 6f 6e 20 70 72 6f 63  o 8 "waiton proc
25c0: 65 64 75 72 65 20 72 65 73 75 6c 74 73 20 69 6e  edure results in
25d0: 20 73 74 72 69 6e 67 20 22 20 72 65 73 20 22 20   string " res " 
25e0: 66 6f 72 20 74 65 73 74 20 22 20 68 65 64 29 0a  for test " hed).
25f0: 09 09 09 09 09 09 20 20 20 20 20 72 65 73 29 29  ......     res))
2600: 0a 09 09 09 09 09 09 20 20 28 28 73 74 72 69 6e  .......  ((strin
2610: 67 3f 20 69 6e 73 74 72 29 20 20 20 20 20 69 6e  g? instr)     in
2620: 73 74 72 29 0a 09 09 09 09 09 09 20 20 28 65 6c  str).......  (el
2630: 73 65 20 0a 09 09 09 09 09 09 20 20 20 3b 3b 20  se .......   ;; 
2640: 4e 4f 54 45 3a 20 54 68 69 73 20 69 73 20 61 63  NOTE: This is ac
2650: 74 75 61 6c 6c 79 20 74 68 65 20 63 61 73 65 20  tually the case 
2660: 6f 66 20 2a 6e 6f 2a 20 77 61 69 74 6f 6e 73 21  of *no* waitons!
2670: 20 3b 3b 20 28 64 65 62 75 67 3a 70 72 69 6e 74   ;; (debug:print
2680: 20 30 20 22 45 52 52 4f 52 3a 20 73 6f 6d 65 74   0 "ERROR: somet
2690: 68 69 6e 67 20 77 65 6e 74 20 77 72 6f 6e 67 20  hing went wrong 
26a0: 69 6e 20 70 72 6f 63 65 73 73 69 6e 67 20 77 61  in processing wa
26b0: 69 74 6f 6e 73 20 66 6f 72 20 74 65 73 74 20 22  itons for test "
26c0: 20 68 65 64 29 0a 09 09 09 09 09 09 20 20 20 22   hed).......   "
26d0: 22 29 29 29 29 29 0a 09 09 09 20 20 20 20 20 20  ")))))....      
26e0: 28 66 69 6c 74 65 72 20 28 6c 61 6d 62 64 61 20  (filter (lambda 
26f0: 28 78 29 0a 09 09 09 09 09 28 69 66 20 28 6d 65  (x)......(if (me
2700: 6d 62 65 72 20 78 20 61 6c 6c 2d 74 65 73 74 2d  mber x all-test-
2710: 6e 61 6d 65 73 29 0a 09 09 09 09 09 20 20 20 20  names)......    
2720: 23 74 0a 09 09 09 09 09 20 20 20 20 28 62 65 67  #t......    (beg
2730: 69 6e 0a 09 09 09 09 09 20 20 20 20 20 20 28 64  in......      (d
2740: 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 45 52  ebug:print 0 "ER
2750: 52 4f 52 3a 20 74 65 73 74 20 22 20 68 65 64 20  ROR: test " hed 
2760: 22 20 68 61 73 20 75 6e 72 65 63 6f 67 6e 69 73  " has unrecognis
2770: 65 64 20 77 61 69 74 6f 6e 20 74 65 73 74 6e 61  ed waiton testna
2780: 6d 65 20 22 20 78 29 0a 09 09 09 09 09 20 20 20  me " x)......   
2790: 20 20 20 23 66 29 29 29 0a 09 09 09 09 20 20 20     #f))).....   
27a0: 20 20 20 6e 65 77 77 61 69 74 6f 6e 73 29 29 29     newwaitons)))
27b0: 29 29 0a 09 20 20 20 20 28 64 65 62 75 67 3a 70  ))..    (debug:p
27c0: 72 69 6e 74 2d 69 6e 66 6f 20 38 20 22 77 61 69  rint-info 8 "wai
27d0: 74 6f 6e 73 3a 20 22 20 77 61 69 74 6f 6e 73 29  tons: " waitons)
27e0: 0a 09 20 20 20 20 3b 3b 20 63 68 65 63 6b 20 66  ..    ;; check f
27f0: 6f 72 20 68 65 64 20 69 6e 20 77 61 69 74 6f 6e  or hed in waiton
2800: 73 20 3d 3e 20 74 68 69 73 20 77 6f 75 6c 64 20  s => this would 
2810: 62 65 20 63 69 72 63 75 6c 61 72 2c 20 72 65 6d  be circular, rem
2820: 6f 76 65 20 69 74 20 61 6e 64 20 69 73 73 75 65  ove it and issue
2830: 20 61 6e 0a 09 20 20 20 20 3b 3b 20 65 72 72 6f   an..    ;; erro
2840: 72 0a 09 20 20 20 20 28 69 66 20 28 6d 65 6d 62  r..    (if (memb
2850: 65 72 20 68 65 64 20 77 61 69 74 6f 6e 73 29 0a  er hed waitons).
2860: 09 09 28 62 65 67 69 6e 0a 09 09 20 20 28 64 65  ..(begin...  (de
2870: 62 75 67 3a 70 72 69 6e 74 20 30 20 22 45 52 52  bug:print 0 "ERR
2880: 4f 52 3a 20 74 65 73 74 20 22 20 68 65 64 20 22  OR: test " hed "
2890: 20 68 61 73 20 6c 69 73 74 65 64 20 69 74 73 65   has listed itse
28a0: 6c 66 20 61 73 20 61 20 77 61 69 74 6f 6e 2c 20  lf as a waiton, 
28b0: 70 6c 65 61 73 65 20 63 6f 72 72 65 63 74 20 74  please correct t
28c0: 68 69 73 21 22 29 0a 09 09 20 20 28 73 65 74 21  his!")...  (set!
28d0: 20 77 61 69 74 6f 6e 73 20 28 66 69 6c 74 65 72   waitons (filter
28e0: 20 28 6c 61 6d 62 64 61 20 28 78 29 28 6e 6f 74   (lambda (x)(not
28f0: 20 28 65 71 75 61 6c 3f 20 78 20 68 65 64 29 29   (equal? x hed))
2900: 29 20 77 61 69 74 6f 6e 73 29 29 29 29 0a 09 20  ) waitons)))).. 
2910: 20 20 20 0a 09 20 20 20 20 3b 3b 20 28 69 74 65     ..    ;; (ite
2920: 6d 73 20 20 20 28 69 74 65 6d 73 3a 67 65 74 2d  ms   (items:get-
2930: 69 74 65 6d 73 2d 66 72 6f 6d 2d 63 6f 6e 66 69  items-from-confi
2940: 67 20 63 6f 6e 66 69 67 29 29 29 0a 09 20 20 20  g config)))..   
2950: 20 28 69 66 20 28 6e 6f 74 20 28 68 61 73 68 2d   (if (not (hash-
2960: 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c  table-ref/defaul
2970: 74 20 74 65 73 74 2d 72 65 63 6f 72 64 73 20 68  t test-records h
2980: 65 64 20 23 66 29 29 0a 09 09 28 68 61 73 68 2d  ed #f))...(hash-
2990: 74 61 62 6c 65 2d 73 65 74 21 20 74 65 73 74 2d  table-set! test-
29a0: 72 65 63 6f 72 64 73 0a 09 09 09 09 20 68 65 64  records..... hed
29b0: 20 28 76 65 63 74 6f 72 20 68 65 64 20 20 20 20   (vector hed    
29c0: 20 3b 3b 20 30 0a 09 09 09 09 09 20 20 20 20 20   ;; 0......     
29d0: 63 6f 6e 66 69 67 20 20 3b 3b 20 31 0a 09 09 09  config  ;; 1....
29e0: 09 09 20 20 20 20 20 77 61 69 74 6f 6e 73 20 3b  ..     waitons ;
29f0: 3b 20 32 0a 09 09 09 09 09 20 20 20 20 20 28 63  ; 2......     (c
2a00: 6f 6e 66 69 67 2d 6c 6f 6f 6b 75 70 20 63 6f 6e  onfig-lookup con
2a10: 66 69 67 20 22 72 65 71 75 69 72 65 6d 65 6e 74  fig "requirement
2a20: 73 22 20 22 70 72 69 6f 72 69 74 79 22 29 20 20  s" "priority")  
2a30: 20 20 20 3b 3b 20 70 72 69 6f 72 69 74 79 20 33     ;; priority 3
2a40: 0a 09 09 09 09 09 20 20 20 20 20 28 6c 65 74 20  ......     (let 
2a50: 28 28 69 74 65 6d 73 20 20 20 20 20 20 28 68 61  ((items      (ha
2a60: 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66  sh-table-ref/def
2a70: 61 75 6c 74 20 63 6f 6e 66 69 67 20 22 69 74 65  ault config "ite
2a80: 6d 73 22 20 23 66 29 29 20 3b 3b 20 69 74 65 6d  ms" #f)) ;; item
2a90: 73 20 34 0a 09 09 09 09 09 09 20 20 20 28 69 74  s 4.......   (it
2aa0: 65 6d 73 74 61 62 6c 65 20 28 68 61 73 68 2d 74  emstable (hash-t
2ab0: 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74  able-ref/default
2ac0: 20 63 6f 6e 66 69 67 20 22 69 74 65 6d 73 74 61   config "itemsta
2ad0: 62 6c 65 22 20 23 66 29 29 29 20 0a 09 09 09 09  ble" #f))) .....
2ae0: 09 20 20 20 20 20 20 20 3b 3b 20 69 66 20 65 69  .       ;; if ei
2af0: 74 68 65 72 20 69 74 65 6d 73 20 6f 72 20 69 74  ther items or it
2b00: 65 6d 73 20 74 61 62 6c 65 20 69 73 20 61 20 70  ems table is a p
2b10: 72 6f 63 20 72 65 74 75 72 6e 20 69 74 20 73 6f  roc return it so
2b20: 20 74 65 73 74 20 72 75 6e 6e 69 6e 67 0a 09 09   test running...
2b30: 09 09 09 20 20 20 20 20 20 20 3b 3b 20 70 72 6f  ...       ;; pro
2b40: 63 65 73 73 20 63 61 6e 20 6b 6e 6f 77 20 74 6f  cess can know to
2b50: 20 63 61 6c 6c 20 69 74 65 6d 73 3a 67 65 74 2d   call items:get-
2b60: 69 74 65 6d 73 2d 66 72 6f 6d 2d 63 6f 6e 66 69  items-from-confi
2b70: 67 0a 09 09 09 09 09 20 20 20 20 20 20 20 3b 3b  g......       ;;
2b80: 20 69 66 20 65 69 74 68 65 72 20 69 73 20 61 20   if either is a 
2b90: 6c 69 73 74 20 61 6e 64 20 6e 6f 6e 65 20 69 73  list and none is
2ba0: 20 61 20 70 72 6f 63 20 67 6f 20 61 68 65 61 64   a proc go ahead
2bb0: 20 61 6e 64 20 63 61 6c 6c 20 67 65 74 2d 69 74   and call get-it
2bc0: 65 6d 73 0a 09 09 09 09 09 20 20 20 20 20 20 20  ems......       
2bd0: 3b 3b 20 6f 74 68 65 72 77 69 73 65 20 72 65 74  ;; otherwise ret
2be0: 75 72 6e 20 23 66 20 2d 20 74 68 69 73 20 69 73  urn #f - this is
2bf0: 20 6e 6f 74 20 61 6e 20 69 74 65 72 61 74 65 64   not an iterated
2c00: 20 74 65 73 74 0a 09 09 09 09 09 20 20 20 20 20   test......     
2c10: 20 20 28 63 6f 6e 64 0a 09 09 09 09 09 09 28 28    (cond.......((
2c20: 70 72 6f 63 65 64 75 72 65 3f 20 69 74 65 6d 73  procedure? items
2c30: 29 20 20 20 20 20 20 0a 09 09 09 09 09 09 20 28  )      ....... (
2c40: 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f  debug:print-info
2c50: 20 34 20 22 69 74 65 6d 73 20 69 73 20 61 20 70   4 "items is a p
2c60: 72 6f 63 65 64 75 72 65 2c 20 77 69 6c 6c 20 63  rocedure, will c
2c70: 61 6c 63 20 6c 61 74 65 72 22 29 0a 09 09 09 09  alc later").....
2c80: 09 09 20 69 74 65 6d 73 29 20 20 20 20 20 20 20  .. items)       
2c90: 20 20 20 20 20 3b 3b 20 63 61 6c 63 20 6c 61 74       ;; calc lat
2ca0: 65 72 0a 09 09 09 09 09 09 28 28 70 72 6f 63 65  er.......((proce
2cb0: 64 75 72 65 3f 20 69 74 65 6d 73 74 61 62 6c 65  dure? itemstable
2cc0: 29 0a 09 09 09 09 09 09 20 28 64 65 62 75 67 3a  )....... (debug:
2cd0: 70 72 69 6e 74 2d 69 6e 66 6f 20 34 20 22 69 74  print-info 4 "it
2ce0: 65 6d 73 74 61 62 6c 65 20 69 73 20 61 20 70 72  emstable is a pr
2cf0: 6f 63 65 64 75 72 65 2c 20 77 69 6c 6c 20 63 61  ocedure, will ca
2d00: 6c 63 20 6c 61 74 65 72 22 29 0a 09 09 09 09 09  lc later")......
2d10: 09 20 69 74 65 6d 73 74 61 62 6c 65 29 20 20 20  . itemstable)   
2d20: 20 20 20 20 3b 3b 20 63 61 6c 63 20 6c 61 74 65      ;; calc late
2d30: 72 0a 09 09 09 09 09 09 28 28 66 69 6c 74 65 72  r.......((filter
2d40: 20 28 6c 61 6d 62 64 61 20 28 78 29 0a 09 09 09   (lambda (x)....
2d50: 09 09 09 09 20 20 20 28 6c 65 74 20 28 28 76 61  ....   (let ((va
2d60: 6c 20 28 63 61 72 20 78 29 29 29 0a 09 09 09 09  l (car x))).....
2d70: 09 09 09 20 20 20 20 20 28 69 66 20 28 70 72 6f  ...     (if (pro
2d80: 63 65 64 75 72 65 3f 20 76 61 6c 29 20 76 61 6c  cedure? val) val
2d90: 20 23 66 29 29 29 0a 09 09 09 09 09 09 09 20 28   #f)))........ (
2da0: 61 70 70 65 6e 64 20 28 69 66 20 28 6c 69 73 74  append (if (list
2db0: 3f 20 69 74 65 6d 73 29 20 69 74 65 6d 73 20 27  ? items) items '
2dc0: 28 29 29 0a 09 09 09 09 09 09 09 09 20 28 69 66  ())......... (if
2dd0: 20 28 6c 69 73 74 3f 20 69 74 65 6d 73 74 61 62   (list? itemstab
2de0: 6c 65 29 20 69 74 65 6d 73 74 61 62 6c 65 20 27  le) itemstable '
2df0: 28 29 29 29 29 0a 09 09 09 09 09 09 20 27 68 61  ())))....... 'ha
2e00: 76 65 2d 70 72 6f 63 65 64 75 72 65 29 0a 09 09  ve-procedure)...
2e10: 09 09 09 09 28 28 6f 72 20 28 6c 69 73 74 3f 20  ....((or (list? 
2e20: 69 74 65 6d 73 29 28 6c 69 73 74 3f 20 69 74 65  items)(list? ite
2e30: 6d 73 74 61 62 6c 65 29 29 20 3b 3b 20 63 61 6c  mstable)) ;; cal
2e40: 63 20 6e 6f 77 0a 09 09 09 09 09 09 20 28 64 65  c now....... (de
2e50: 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 34  bug:print-info 4
2e60: 20 22 69 74 65 6d 73 20 61 6e 64 20 69 74 65 6d   "items and item
2e70: 73 74 61 62 6c 65 20 61 72 65 20 6c 69 73 74 73  stable are lists
2e80: 2c 20 63 61 6c 63 20 6e 6f 77 5c 6e 22 0a 09 09  , calc now\n"...
2e90: 09 09 09 09 09 20 20 20 20 20 20 22 20 20 20 20  .....      "    
2ea0: 69 74 65 6d 73 3a 20 22 20 69 74 65 6d 73 20 22  items: " items "
2eb0: 20 69 74 65 6d 73 74 61 62 6c 65 3a 20 22 20 69   itemstable: " i
2ec0: 74 65 6d 73 74 61 62 6c 65 29 0a 09 09 09 09 09  temstable)......
2ed0: 09 20 28 69 74 65 6d 73 3a 67 65 74 2d 69 74 65  . (items:get-ite
2ee0: 6d 73 2d 66 72 6f 6d 2d 63 6f 6e 66 69 67 20 63  ms-from-config c
2ef0: 6f 6e 66 69 67 29 29 0a 09 09 09 09 09 09 28 65  onfig)).......(e
2f00: 6c 73 65 20 23 66 29 29 29 20 20 20 20 20 20 20  lse #f)))       
2f10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2f20: 20 20 20 20 3b 3b 20 6e 6f 74 20 69 74 65 72 61      ;; not itera
2f30: 74 65 64 0a 09 09 09 09 09 20 20 20 20 20 23 66  ted......     #f
2f40: 20 20 20 20 20 20 3b 3b 20 69 74 65 6d 73 64 61        ;; itemsda
2f50: 74 20 35 0a 09 09 09 09 09 20 20 20 20 20 23 66  t 5......     #f
2f60: 20 20 20 20 20 20 3b 3b 20 73 70 61 72 65 20 2d        ;; spare -
2f70: 20 75 73 65 64 20 66 6f 72 20 69 74 65 6d 2d 70   used for item-p
2f80: 61 74 68 0a 09 09 09 09 09 20 20 20 20 20 29 29  ath......     ))
2f90: 29 0a 09 20 20 20 20 28 66 6f 72 2d 65 61 63 68  )..    (for-each
2fa0: 20 0a 09 20 20 20 20 20 28 6c 61 6d 62 64 61 20   ..     (lambda 
2fb0: 28 77 61 69 74 6f 6e 29 0a 09 20 20 20 20 20 20  (waiton)..      
2fc0: 20 28 69 66 20 28 61 6e 64 20 77 61 69 74 6f 6e   (if (and waiton
2fd0: 20 28 6e 6f 74 20 28 6d 65 6d 62 65 72 20 77 61   (not (member wa
2fe0: 69 74 6f 6e 20 74 65 73 74 2d 6e 61 6d 65 73 29  iton test-names)
2ff0: 29 29 0a 09 09 20 20 20 28 62 65 67 69 6e 0a 09  ))...   (begin..
3000: 09 20 20 20 20 20 28 73 65 74 21 20 72 65 71 75  .     (set! requ
3010: 69 72 65 64 2d 74 65 73 74 73 20 28 63 6f 6e 73  ired-tests (cons
3020: 20 77 61 69 74 6f 6e 20 72 65 71 75 69 72 65 64   waiton required
3030: 2d 74 65 73 74 73 29 29 0a 09 09 20 20 20 20 20  -tests))...     
3040: 28 73 65 74 21 20 74 65 73 74 2d 6e 61 6d 65 73  (set! test-names
3050: 20 28 63 6f 6e 73 20 77 61 69 74 6f 6e 20 74 65   (cons waiton te
3060: 73 74 2d 6e 61 6d 65 73 29 29 29 29 29 20 3b 3b  st-names))))) ;;
3070: 20 77 61 73 20 61 6e 20 61 70 70 65 6e 64 2c 20   was an append, 
3080: 6e 6f 77 20 61 20 63 6f 6e 73 0a 09 20 20 20 20  now a cons..    
3090: 20 77 61 69 74 6f 6e 73 29 0a 09 20 20 20 20 28   waitons)..    (
30a0: 6c 65 74 20 28 28 72 65 6d 74 65 73 74 73 20 28  let ((remtests (
30b0: 64 65 6c 65 74 65 2d 64 75 70 6c 69 63 61 74 65  delete-duplicate
30c0: 73 20 28 61 70 70 65 6e 64 20 77 61 69 74 6f 6e  s (append waiton
30d0: 73 20 74 61 6c 29 29 29 29 0a 09 20 20 20 20 20  s tal))))..     
30e0: 20 28 69 66 20 28 6e 6f 74 20 28 6e 75 6c 6c 3f   (if (not (null?
30f0: 20 72 65 6d 74 65 73 74 73 29 29 0a 09 09 20 20   remtests))...  
3100: 28 6c 6f 6f 70 20 28 63 61 72 20 72 65 6d 74 65  (loop (car remte
3110: 73 74 73 29 28 63 64 72 20 72 65 6d 74 65 73 74  sts)(cdr remtest
3120: 73 29 29 29 29 29 29 29 0a 0a 20 20 20 20 28 69  s)))))))..    (i
3130: 66 20 28 6e 6f 74 20 28 6e 75 6c 6c 3f 20 72 65  f (not (null? re
3140: 71 75 69 72 65 64 2d 74 65 73 74 73 29 29 0a 09  quired-tests))..
3150: 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66  (debug:print-inf
3160: 6f 20 31 20 22 41 64 64 69 6e 67 20 22 20 72 65  o 1 "Adding " re
3170: 71 75 69 72 65 64 2d 74 65 73 74 73 20 22 20 74  quired-tests " t
3180: 6f 20 74 68 65 20 72 75 6e 20 71 75 65 75 65 22  o the run queue"
3190: 29 29 0a 20 20 20 20 3b 3b 20 4e 4f 54 45 3a 20  )).    ;; NOTE: 
31a0: 74 68 65 73 65 20 61 72 65 20 61 6c 6c 20 70 61  these are all pa
31b0: 72 65 6e 74 20 74 65 73 74 73 2c 20 69 74 65 6d  rent tests, item
31c0: 73 20 61 72 65 20 6e 6f 74 20 65 78 70 61 6e 64  s are not expand
31d0: 65 64 20 79 65 74 2e 0a 20 20 20 20 28 64 65 62  ed yet..    (deb
31e0: 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 34 20  ug:print-info 4 
31f0: 22 74 65 73 74 2d 72 65 63 6f 72 64 73 3d 22 20  "test-records=" 
3200: 28 68 61 73 68 2d 74 61 62 6c 65 2d 3e 61 6c 69  (hash-table->ali
3210: 73 74 20 74 65 73 74 2d 72 65 63 6f 72 64 73 29  st test-records)
3220: 29 0a 20 20 20 20 28 6c 65 74 20 28 28 72 65 67  ).    (let ((reg
3230: 6c 65 6e 20 28 61 6e 79 2d 3e 6e 75 6d 62 65 72  len (any->number
3240: 20 20 28 63 6f 6e 66 69 67 66 3a 6c 6f 6f 6b 75    (configf:looku
3250: 70 20 2a 63 6f 6e 66 69 67 64 61 74 2a 20 22 73  p *configdat* "s
3260: 65 74 75 70 22 20 22 72 75 6e 71 75 65 75 65 22  etup" "runqueue"
3270: 29 29 29 29 0a 20 20 20 20 20 20 28 69 66 20 72  )))).      (if r
3280: 65 67 6c 65 6e 0a 09 20 20 28 72 75 6e 73 3a 72  eglen..  (runs:r
3290: 75 6e 2d 74 65 73 74 73 2d 71 75 65 75 65 2d 6e  un-tests-queue-n
32a0: 65 77 20 20 20 20 20 72 75 6e 2d 69 64 20 72 75  ew     run-id ru
32b0: 6e 6e 61 6d 65 20 74 65 73 74 2d 72 65 63 6f 72  nname test-recor
32c0: 64 73 20 6b 65 79 76 61 6c 6c 73 74 20 66 6c 61  ds keyvallst fla
32d0: 67 73 20 74 65 73 74 2d 70 61 74 74 73 20 72 65  gs test-patts re
32e0: 71 75 69 72 65 64 2d 74 65 73 74 73 20 72 65 67  quired-tests reg
32f0: 6c 65 6e 29 0a 09 20 20 28 72 75 6e 73 3a 72 75  len)..  (runs:ru
3300: 6e 2d 74 65 73 74 73 2d 71 75 65 75 65 2d 63 6c  n-tests-queue-cl
3310: 61 73 73 69 63 20 72 75 6e 2d 69 64 20 72 75 6e  assic run-id run
3320: 6e 61 6d 65 20 74 65 73 74 2d 72 65 63 6f 72 64  name test-record
3330: 73 20 6b 65 79 76 61 6c 6c 73 74 20 66 6c 61 67  s keyvallst flag
3340: 73 20 74 65 73 74 2d 70 61 74 74 73 20 72 65 71  s test-patts req
3350: 75 69 72 65 64 2d 74 65 73 74 73 29 29 29 0a 20  uired-tests))). 
3360: 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d     (debug:print-
3370: 69 6e 66 6f 20 34 20 22 41 6c 6c 20 64 6f 6e 65  info 4 "All done
3380: 20 62 79 20 68 65 72 65 22 29 29 29 0a 0a 28 64   by here")))..(d
3390: 65 66 69 6e 65 20 28 72 75 6e 73 3a 63 61 6c 63  efine (runs:calc
33a0: 2d 66 61 69 6c 73 20 70 72 65 72 65 71 73 2d 6e  -fails prereqs-n
33b0: 6f 74 2d 6d 65 74 29 0a 20 20 28 66 69 6c 74 65  ot-met).  (filte
33c0: 72 20 28 6c 61 6d 62 64 61 20 28 74 65 73 74 29  r (lambda (test)
33d0: 0a 09 20 20 20 20 28 61 6e 64 20 28 76 65 63 74  ..    (and (vect
33e0: 6f 72 3f 20 74 65 73 74 29 20 3b 3b 20 6e 6f 74  or? test) ;; not
33f0: 20 28 73 74 72 69 6e 67 3f 20 74 65 73 74 29 29   (string? test))
3400: 0a 09 09 20 28 65 71 75 61 6c 3f 20 28 64 62 3a  ... (equal? (db:
3410: 74 65 73 74 2d 67 65 74 2d 73 74 61 74 65 20 74  test-get-state t
3420: 65 73 74 29 20 22 43 4f 4d 50 4c 45 54 45 44 22  est) "COMPLETED"
3430: 29 0a 09 09 20 28 6e 6f 74 20 28 6d 65 6d 62 65  )... (not (membe
3440: 72 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 73  r (db:test-get-s
3450: 74 61 74 75 73 20 74 65 73 74 29 0a 09 09 09 20  tatus test).... 
3460: 20 20 20 20 20 27 28 22 50 41 53 53 22 20 22 57       '("PASS" "W
3470: 41 52 4e 22 20 22 43 48 45 43 4b 22 20 22 57 41  ARN" "CHECK" "WA
3480: 49 56 45 44 22 20 22 53 4b 49 50 22 29 29 29 29  IVED" "SKIP"))))
3490: 29 0a 09 20 20 70 72 65 72 65 71 73 2d 6e 6f 74  )..  prereqs-not
34a0: 2d 6d 65 74 29 29 0a 0a 28 64 65 66 69 6e 65 20  -met))..(define 
34b0: 28 72 75 6e 73 3a 63 61 6c 63 2d 6e 6f 74 2d 63  (runs:calc-not-c
34c0: 6f 6d 70 6c 65 74 65 64 20 70 72 65 72 65 71 73  ompleted prereqs
34d0: 2d 6e 6f 74 2d 6d 65 74 29 0a 20 20 28 66 69 6c  -not-met).  (fil
34e0: 74 65 72 0a 20 20 20 28 6c 61 6d 62 64 61 20 28  ter.   (lambda (
34f0: 74 29 0a 20 20 20 20 20 28 6f 72 20 28 6e 6f 74  t).     (or (not
3500: 20 28 76 65 63 74 6f 72 3f 20 74 29 29 0a 09 20   (vector? t)).. 
3510: 28 6e 6f 74 20 28 65 71 75 61 6c 3f 20 22 43 4f  (not (equal? "CO
3520: 4d 50 4c 45 54 45 44 22 20 28 64 62 3a 74 65 73  MPLETED" (db:tes
3530: 74 2d 67 65 74 2d 73 74 61 74 65 20 74 29 29 29  t-get-state t)))
3540: 29 29 0a 20 20 20 70 72 65 72 65 71 73 2d 6e 6f  )).   prereqs-no
3550: 74 2d 6d 65 74 29 29 0a 0a 28 64 65 66 69 6e 65  t-met))..(define
3560: 20 28 72 75 6e 73 3a 70 72 65 74 74 79 2d 73 74   (runs:pretty-st
3570: 72 69 6e 67 20 6c 73 74 29 0a 20 20 28 6d 61 70  ring lst).  (map
3580: 20 28 6c 61 6d 62 64 61 20 28 74 29 0a 09 20 28   (lambda (t).. (
3590: 69 66 20 28 6e 6f 74 20 28 76 65 63 74 6f 72 3f  if (not (vector?
35a0: 20 74 29 29 0a 09 20 20 20 20 20 28 63 6f 6e 63   t))..     (conc
35b0: 20 74 29 0a 09 20 20 20 20 20 28 63 6f 6e 63 20   t)..     (conc 
35c0: 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 74 65 73  (db:test-get-tes
35d0: 74 6e 61 6d 65 20 74 29 20 22 3a 22 20 28 64 62  tname t) ":" (db
35e0: 3a 74 65 73 74 2d 67 65 74 2d 73 74 61 74 65 20  :test-get-state 
35f0: 74 29 20 22 2f 22 20 28 64 62 3a 74 65 73 74 2d  t) "/" (db:test-
3600: 67 65 74 2d 73 74 61 74 75 73 20 74 29 29 29 29  get-status t))))
3610: 0a 20 20 20 20 20 20 20 6c 73 74 29 29 0a 0a 28  .       lst))..(
3620: 64 65 66 69 6e 65 20 28 72 75 6e 73 3a 6d 61 6b  define (runs:mak
3630: 65 2d 66 75 6c 6c 2d 74 65 73 74 2d 6e 61 6d 65  e-full-test-name
3640: 20 74 65 73 74 6e 61 6d 65 20 69 74 65 6d 70 61   testname itempa
3650: 74 68 29 0a 20 20 28 69 66 20 28 65 71 75 61 6c  th).  (if (equal
3660: 3f 20 69 74 65 6d 70 61 74 68 20 22 22 29 20 74  ? itempath "") t
3670: 65 73 74 6e 61 6d 65 20 28 63 6f 6e 63 20 74 65  estname (conc te
3680: 73 74 6e 61 6d 65 20 22 2f 22 20 69 74 65 6d 70  stname "/" itemp
3690: 61 74 68 29 29 29 0a 0a 28 64 65 66 69 6e 65 20  ath)))..(define 
36a0: 28 72 75 6e 73 3a 71 75 65 75 65 2d 6e 65 78 74  (runs:queue-next
36b0: 2d 68 65 64 20 74 61 6c 20 72 65 67 20 6e 20 72  -hed tal reg n r
36c0: 65 67 66 75 6c 29 0a 20 20 28 69 66 20 72 65 67  egful).  (if reg
36d0: 66 75 6c 0a 20 20 20 20 20 20 28 69 66 20 28 6e  ful.      (if (n
36e0: 75 6c 6c 3f 20 72 65 67 29 20 3b 3b 20 64 6f 65  ull? reg) ;; doe
36f0: 73 6e 27 74 20 6d 61 6b 65 20 73 65 6e 73 65 2c  sn't make sense,
3700: 20 74 68 69 73 20 69 73 20 70 72 6f 62 61 62 6c   this is probabl
3710: 79 20 4e 4f 54 20 74 68 65 20 70 72 6f 62 6c 65  y NOT the proble
3720: 6d 20 6f 66 20 74 68 65 20 63 61 72 0a 09 20 20  m of the car..  
3730: 28 63 61 72 20 74 61 6c 29 0a 09 20 20 28 63 61  (car tal)..  (ca
3740: 72 20 72 65 67 29 29 0a 20 20 20 20 20 20 28 63  r reg)).      (c
3750: 61 72 20 74 61 6c 29 29 29 0a 0a 28 64 65 66 69  ar tal)))..(defi
3760: 6e 65 20 28 72 75 6e 73 3a 71 75 65 75 65 2d 6e  ne (runs:queue-n
3770: 65 78 74 2d 74 61 6c 20 74 61 6c 20 72 65 67 20  ext-tal tal reg 
3780: 6e 20 72 65 67 66 75 6c 29 0a 20 20 28 69 66 20  n regful).  (if 
3790: 72 65 67 66 75 6c 0a 20 20 20 20 20 20 74 61 6c  regful.      tal
37a0: 0a 20 20 20 20 20 20 28 6c 65 74 20 28 28 6e 65  .      (let ((ne
37b0: 77 74 61 6c 20 28 63 64 72 20 74 61 6c 29 29 29  wtal (cdr tal)))
37c0: 0a 09 28 69 66 20 28 6e 75 6c 6c 3f 20 6e 65 77  ..(if (null? new
37d0: 74 61 6c 29 0a 09 20 20 20 20 72 65 67 0a 09 20  tal)..    reg.. 
37e0: 20 20 20 6e 65 77 74 61 6c 0a 09 20 20 20 20 29     newtal..    )
37f0: 29 29 29 0a 0a 28 64 65 66 69 6e 65 20 28 72 75  )))..(define (ru
3800: 6e 73 3a 71 75 65 75 65 2d 6e 65 78 74 2d 72 65  ns:queue-next-re
3810: 67 20 74 61 6c 20 72 65 67 20 6e 20 72 65 67 66  g tal reg n regf
3820: 75 6c 29 0a 20 20 28 69 66 20 72 65 67 66 75 6c  ul).  (if regful
3830: 0a 20 20 20 20 20 20 28 63 64 72 20 72 65 67 29  .      (cdr reg)
3840: 0a 20 20 20 20 20 20 28 69 66 20 28 65 71 3f 20  .      (if (eq? 
3850: 28 6c 65 6e 67 74 68 20 74 61 6c 29 20 31 29 0a  (length tal) 1).
3860: 09 20 20 27 28 29 0a 09 20 20 72 65 67 29 29 29  .  '()..  reg)))
3870: 0a 0a 28 69 6e 63 6c 75 64 65 20 22 72 75 6e 2d  ..(include "run-
3880: 74 65 73 74 73 2d 71 75 65 75 65 2d 63 6c 61 73  tests-queue-clas
3890: 73 69 63 2e 73 63 6d 22 29 0a 28 69 6e 63 6c 75  sic.scm").(inclu
38a0: 64 65 20 22 72 75 6e 2d 74 65 73 74 73 2d 71 75  de "run-tests-qu
38b0: 65 75 65 2d 6e 65 77 2e 73 63 6d 22 29 0a 0a 3b  eue-new.scm")..;
38c0: 3b 20 70 61 72 65 6e 74 2d 74 65 73 74 20 69 73  ; parent-test is
38d0: 20 74 68 65 72 65 20 61 73 20 61 20 70 6c 61 63   there as a plac
38e0: 65 68 6f 6c 64 65 72 20 66 6f 72 20 77 68 65 6e  eholder for when
38f0: 20 70 61 72 65 6e 74 2d 74 65 73 74 73 20 63 61   parent-tests ca
3900: 6e 20 62 65 20 72 75 6e 20 61 73 20 61 20 73 65  n be run as a se
3910: 74 75 70 20 73 74 65 70 0a 28 64 65 66 69 6e 65  tup step.(define
3920: 20 28 72 75 6e 3a 74 65 73 74 20 72 75 6e 2d 69   (run:test run-i
3930: 64 20 72 75 6e 2d 69 6e 66 6f 20 6b 65 79 2d 76  d run-info key-v
3940: 61 6c 73 20 72 75 6e 6e 61 6d 65 20 6b 65 79 76  als runname keyv
3950: 61 6c 6c 73 74 20 74 65 73 74 2d 72 65 63 6f 72  allst test-recor
3960: 64 20 66 6c 61 67 73 20 70 61 72 65 6e 74 2d 74  d flags parent-t
3970: 65 73 74 29 0a 20 20 3b 3b 20 41 6c 6c 20 74 68  est).  ;; All th
3980: 65 73 65 20 76 61 72 73 20 6d 69 67 68 74 20 62  ese vars might b
3990: 65 20 72 65 66 65 72 65 6e 63 65 64 20 62 79 20  e referenced by 
39a0: 74 68 65 20 74 65 73 74 63 6f 6e 66 69 67 20 66  the testconfig f
39b0: 69 6c 65 20 72 65 61 64 65 72 0a 20 20 28 6c 65  ile reader.  (le
39c0: 74 2a 20 28 28 74 65 73 74 2d 6e 61 6d 65 20 20  t* ((test-name  
39d0: 20 20 28 74 65 73 74 73 3a 74 65 73 74 71 75 65    (tests:testque
39e0: 75 65 2d 67 65 74 2d 74 65 73 74 6e 61 6d 65 20  ue-get-testname 
39f0: 20 20 74 65 73 74 2d 72 65 63 6f 72 64 29 29 0a    test-record)).
3a00: 09 20 28 74 65 73 74 2d 77 61 69 74 6f 6e 73 20  . (test-waitons 
3a10: 28 74 65 73 74 73 3a 74 65 73 74 71 75 65 75 65  (tests:testqueue
3a20: 2d 67 65 74 2d 77 61 69 74 6f 6e 73 20 20 20 20  -get-waitons    
3a30: 74 65 73 74 2d 72 65 63 6f 72 64 29 29 0a 09 20  test-record)).. 
3a40: 28 74 65 73 74 2d 63 6f 6e 66 20 20 20 20 28 74  (test-conf    (t
3a50: 65 73 74 73 3a 74 65 73 74 71 75 65 75 65 2d 67  ests:testqueue-g
3a60: 65 74 2d 74 65 73 74 63 6f 6e 66 69 67 20 74 65  et-testconfig te
3a70: 73 74 2d 72 65 63 6f 72 64 29 29 0a 09 20 28 69  st-record)).. (i
3a80: 74 65 6d 64 61 74 20 20 20 20 20 20 28 74 65 73  temdat      (tes
3a90: 74 73 3a 74 65 73 74 71 75 65 75 65 2d 67 65 74  ts:testqueue-get
3aa0: 2d 69 74 65 6d 64 61 74 20 20 20 20 74 65 73 74  -itemdat    test
3ab0: 2d 72 65 63 6f 72 64 29 29 0a 09 20 28 74 65 73  -record)).. (tes
3ac0: 74 2d 70 61 74 68 20 20 20 20 28 63 6f 6e 63 20  t-path    (conc 
3ad0: 2a 74 6f 70 70 61 74 68 2a 20 22 2f 74 65 73 74  *toppath* "/test
3ae0: 73 2f 22 20 74 65 73 74 2d 6e 61 6d 65 29 29 20  s/" test-name)) 
3af0: 3b 3b 20 63 6f 75 6c 64 20 75 73 65 20 74 65 73  ;; could use tes
3b00: 74 73 3a 67 65 74 2d 74 65 73 74 63 6f 6e 66 69  ts:get-testconfi
3b10: 67 20 68 65 72 65 20 2e 2e 2e 0a 09 20 28 66 6f  g here ..... (fo
3b20: 72 63 65 20 20 20 20 20 20 20 20 28 68 61 73 68  rce        (hash
3b30: 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61 75  -table-ref/defau
3b40: 6c 74 20 66 6c 61 67 73 20 22 2d 66 6f 72 63 65  lt flags "-force
3b50: 22 20 23 66 29 29 0a 09 20 28 72 65 72 75 6e 20  " #f)).. (rerun 
3b60: 20 20 20 20 20 20 20 28 68 61 73 68 2d 74 61 62         (hash-tab
3b70: 6c 65 2d 72 65 66 2f 64 65 66 61 75 6c 74 20 66  le-ref/default f
3b80: 6c 61 67 73 20 22 2d 72 65 72 75 6e 22 20 23 66  lags "-rerun" #f
3b90: 29 29 0a 09 20 28 6b 65 65 70 67 6f 69 6e 67 20  )).. (keepgoing 
3ba0: 20 20 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 72     (hash-table-r
3bb0: 65 66 2f 64 65 66 61 75 6c 74 20 66 6c 61 67 73  ef/default flags
3bc0: 20 22 2d 6b 65 65 70 67 6f 69 6e 67 22 20 23 66   "-keepgoing" #f
3bd0: 29 29 0a 09 20 28 69 74 65 6d 2d 70 61 74 68 20  )).. (item-path 
3be0: 20 20 20 20 22 22 29 0a 09 20 28 64 62 20 20 20      "").. (db   
3bf0: 20 20 20 20 20 20 20 20 23 66 29 29 0a 20 20 20          #f)).   
3c00: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 0a   (debug:print 4.
3c10: 09 09 20 22 74 65 73 74 2d 63 6f 6e 66 69 67 3a  .. "test-config:
3c20: 20 22 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 3e   " (hash-table->
3c30: 61 6c 69 73 74 20 74 65 73 74 2d 63 6f 6e 66 29  alist test-conf)
3c40: 0a 09 09 20 22 5c 6e 20 20 20 69 74 65 6d 64 61  ... "\n   itemda
3c50: 74 3a 20 22 20 69 74 65 6d 64 61 74 0a 09 09 20  t: " itemdat... 
3c60: 29 0a 20 20 20 20 3b 3b 20 73 65 74 74 69 6e 67  ).    ;; setting
3c70: 20 69 74 65 6d 64 61 74 20 74 6f 20 61 20 6c 69   itemdat to a li
3c80: 73 74 20 69 66 20 69 74 20 69 73 20 23 66 0a 20  st if it is #f. 
3c90: 20 20 20 28 69 66 20 28 6e 6f 74 20 69 74 65 6d     (if (not item
3ca0: 64 61 74 29 28 73 65 74 21 20 69 74 65 6d 64 61  dat)(set! itemda
3cb0: 74 20 27 28 29 29 29 0a 20 20 20 20 28 73 65 74  t '())).    (set
3cc0: 21 20 69 74 65 6d 2d 70 61 74 68 20 28 69 74 65  ! item-path (ite
3cd0: 6d 2d 6c 69 73 74 2d 3e 70 61 74 68 20 69 74 65  m-list->path ite
3ce0: 6d 64 61 74 29 29 0a 20 20 20 20 28 64 65 62 75  mdat)).    (debu
3cf0: 67 3a 70 72 69 6e 74 20 32 20 22 41 74 74 65 6d  g:print 2 "Attem
3d00: 70 74 69 6e 67 20 74 6f 20 6c 61 75 6e 63 68 20  pting to launch 
3d10: 74 65 73 74 20 22 20 74 65 73 74 2d 6e 61 6d 65  test " test-name
3d20: 20 28 69 66 20 28 65 71 75 61 6c 3f 20 69 74 65   (if (equal? ite
3d30: 6d 2d 70 61 74 68 20 22 2f 22 29 20 22 2f 22 20  m-path "/") "/" 
3d40: 69 74 65 6d 2d 70 61 74 68 29 29 0a 20 20 20 20  item-path)).    
3d50: 28 73 65 74 65 6e 76 20 22 4d 54 5f 54 45 53 54  (setenv "MT_TEST
3d60: 5f 4e 41 4d 45 22 20 74 65 73 74 2d 6e 61 6d 65  _NAME" test-name
3d70: 29 20 3b 3b 20 0a 20 20 20 20 28 73 65 74 65 6e  ) ;; .    (seten
3d80: 76 20 22 4d 54 5f 52 55 4e 4e 41 4d 45 22 20 20  v "MT_RUNNAME"  
3d90: 20 72 75 6e 6e 61 6d 65 29 0a 20 20 20 20 28 73   runname).    (s
3da0: 65 74 2d 6d 65 67 61 74 65 73 74 2d 65 6e 76 2d  et-megatest-env-
3db0: 76 61 72 73 20 72 75 6e 2d 69 64 20 69 6e 72 75  vars run-id inru
3dc0: 6e 6e 61 6d 65 3a 20 72 75 6e 6e 61 6d 65 29 20  nname: runname) 
3dd0: 3b 3b 20 74 68 65 73 65 20 6d 61 79 20 62 65 20  ;; these may be 
3de0: 6e 65 65 64 65 64 20 62 79 20 74 68 65 20 6c 61  needed by the la
3df0: 75 6e 63 68 69 6e 67 20 70 72 6f 63 65 73 73 0a  unching process.
3e00: 20 20 20 20 28 63 68 61 6e 67 65 2d 64 69 72 65      (change-dire
3e10: 63 74 6f 72 79 20 2a 74 6f 70 70 61 74 68 2a 29  ctory *toppath*)
3e20: 0a 0a 20 20 20 20 3b 3b 20 48 65 72 65 20 69 73  ..    ;; Here is
3e30: 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 5f   where the test_
3e40: 6d 65 74 61 20 74 61 62 6c 65 20 69 73 20 62 65  meta table is be
3e50: 73 74 20 75 70 64 61 74 65 64 0a 20 20 20 20 3b  st updated.    ;
3e60: 3b 20 59 65 73 2c 20 61 6e 6f 74 68 65 72 20 75  ; Yes, another u
3e70: 73 65 20 6f 66 20 61 20 67 6c 6f 62 61 6c 20 66  se of a global f
3e80: 6f 72 20 63 61 63 68 69 6e 67 2e 20 4e 65 65 64  or caching. Need
3e90: 20 61 20 62 65 74 74 65 72 20 77 61 79 3f 0a 20   a better way?. 
3ea0: 20 20 20 28 69 66 20 28 6e 6f 74 20 28 68 61 73     (if (not (has
3eb0: 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66 61  h-table-ref/defa
3ec0: 75 6c 74 20 2a 74 65 73 74 2d 6d 65 74 61 2d 75  ult *test-meta-u
3ed0: 70 64 61 74 65 64 2a 20 74 65 73 74 2d 6e 61 6d  pdated* test-nam
3ee0: 65 20 23 66 29 29 0a 20 20 20 20 20 20 20 20 28  e #f)).        (
3ef0: 62 65 67 69 6e 0a 09 20 20 20 28 68 61 73 68 2d  begin..   (hash-
3f00: 74 61 62 6c 65 2d 73 65 74 21 20 2a 74 65 73 74  table-set! *test
3f10: 2d 6d 65 74 61 2d 75 70 64 61 74 65 64 2a 20 74  -meta-updated* t
3f20: 65 73 74 2d 6e 61 6d 65 20 23 74 29 0a 20 20 20  est-name #t).   
3f30: 20 20 20 20 20 20 20 20 28 72 75 6e 73 3a 75 70          (runs:up
3f40: 64 61 74 65 2d 74 65 73 74 5f 6d 65 74 61 20 74  date-test_meta t
3f50: 65 73 74 2d 6e 61 6d 65 20 74 65 73 74 2d 63 6f  est-name test-co
3f60: 6e 66 29 29 29 0a 20 20 20 20 0a 20 20 20 20 3b  nf))).    .    ;
3f70: 3b 20 28 6c 61 6d 62 64 61 20 28 69 74 65 6d 64  ; (lambda (itemd
3f80: 61 74 29 20 3b 3b 3b 20 28 28 72 69 70 65 6e 65  at) ;;; ((ripene
3f90: 73 73 20 22 6f 76 65 72 72 69 70 65 22 29 20 28  ss "overripe") (
3fa0: 74 65 6d 70 65 72 61 74 75 72 65 20 22 63 6f 6f  temperature "coo
3fb0: 6c 22 29 20 28 73 65 61 73 6f 6e 20 22 73 75 6d  l") (season "sum
3fc0: 6d 65 72 22 29 29 0a 20 20 20 20 28 6c 65 74 2a  mer")).    (let*
3fd0: 20 28 28 6e 65 77 2d 74 65 73 74 2d 70 61 74 68   ((new-test-path
3fe0: 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70   (string-intersp
3ff0: 65 72 73 65 20 28 63 6f 6e 73 20 74 65 73 74 2d  erse (cons test-
4000: 70 61 74 68 20 28 6d 61 70 20 63 61 64 72 20 69  path (map cadr i
4010: 74 65 6d 64 61 74 29 29 20 22 2f 22 29 29 0a 09  temdat)) "/"))..
4020: 20 20 20 28 6e 65 77 2d 74 65 73 74 2d 6e 61 6d     (new-test-nam
4030: 65 20 28 69 66 20 28 65 71 75 61 6c 3f 20 69 74  e (if (equal? it
4040: 65 6d 2d 70 61 74 68 20 22 22 29 20 74 65 73 74  em-path "") test
4050: 2d 6e 61 6d 65 20 28 63 6f 6e 63 20 74 65 73 74  -name (conc test
4060: 2d 6e 61 6d 65 20 22 2f 22 20 69 74 65 6d 2d 70  -name "/" item-p
4070: 61 74 68 29 29 29 20 3b 3b 20 6a 75 73 74 20 6e  ath))) ;; just n
4080: 65 65 64 20 69 74 20 74 6f 20 62 65 20 75 6e 69  eed it to be uni
4090: 71 75 65 0a 09 20 20 20 28 74 65 73 74 2d 69 64  que..   (test-id
40a0: 20 20 20 20 20 20 20 28 63 64 62 3a 72 65 6d 6f         (cdb:remo
40b0: 74 65 2d 72 75 6e 20 64 62 3a 67 65 74 2d 74 65  te-run db:get-te
40c0: 73 74 2d 69 64 20 23 66 20 20 72 75 6e 2d 69 64  st-id #f  run-id
40d0: 20 74 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d   test-name item-
40e0: 70 61 74 68 29 29 0a 09 20 20 20 28 74 65 73 74  path))..   (test
40f0: 64 61 74 20 20 20 20 20 20 20 28 63 64 62 3a 67  dat       (cdb:g
4100: 65 74 2d 74 65 73 74 2d 69 6e 66 6f 2d 62 79 2d  et-test-info-by-
4110: 69 64 20 2a 72 75 6e 72 65 6d 6f 74 65 2a 20 74  id *runremote* t
4120: 65 73 74 2d 69 64 29 29 29 0a 20 20 20 20 20 20  est-id))).      
4130: 28 69 66 20 28 6e 6f 74 20 74 65 73 74 64 61 74  (if (not testdat
4140: 29 0a 09 20 20 28 62 65 67 69 6e 0a 09 20 20 20  )..  (begin..   
4150: 20 3b 3b 20 65 6e 73 75 72 65 20 74 68 61 74 20   ;; ensure that 
4160: 74 68 65 20 70 61 74 68 20 65 78 69 73 74 73 20  the path exists 
4170: 62 65 66 6f 72 65 20 72 65 67 69 73 74 65 72 69  before registeri
4180: 6e 67 20 74 68 65 20 74 65 73 74 0a 09 20 20 20  ng the test..   
4190: 20 3b 3b 20 4e 4f 50 45 3a 20 43 61 6e 6e 6f 74   ;; NOPE: Cannot
41a0: 21 20 44 6f 6e 27 74 20 6b 6e 6f 77 20 79 65 74  ! Don't know yet
41b0: 20 77 68 69 63 68 20 64 69 73 6b 20 61 72 65 61   which disk area
41c0: 20 77 69 6c 6c 20 62 65 20 61 73 73 69 67 6e 65   will be assigne
41d0: 64 2e 2e 2e 2e 0a 09 20 20 20 20 3b 3b 20 28 73  d......    ;; (s
41e0: 79 73 74 65 6d 20 28 63 6f 6e 63 20 22 6d 6b 64  ystem (conc "mkd
41f0: 69 72 20 2d 70 20 22 20 6e 65 77 2d 74 65 73 74  ir -p " new-test
4200: 2d 70 61 74 68 29 29 0a 09 20 20 20 20 3b 3b 0a  -path))..    ;;.
4210: 09 20 20 20 20 3b 3b 20 28 6f 70 65 6e 2d 72 75  .    ;; (open-ru
4220: 6e 2d 63 6c 6f 73 65 20 74 65 73 74 73 3a 72 65  n-close tests:re
4230: 67 69 73 74 65 72 2d 74 65 73 74 20 64 62 20 72  gister-test db r
4240: 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d 65 20  un-id test-name 
4250: 69 74 65 6d 2d 70 61 74 68 29 0a 09 20 20 20 20  item-path)..    
4260: 3b 3b 0a 09 20 20 20 20 3b 3b 20 4e 42 2f 2f 20  ;;..    ;; NB// 
4270: 66 6f 72 20 74 68 65 20 61 62 6f 76 65 20 6c 69  for the above li
4280: 6e 65 2e 20 49 20 77 61 6e 74 20 74 68 65 20 74  ne. I want the t
4290: 65 73 74 20 74 6f 20 62 65 20 72 65 67 69 73 74  est to be regist
42a0: 65 72 65 64 20 6c 6f 6e 67 20 62 65 66 6f 72 65  ered long before
42b0: 20 74 68 69 73 20 72 6f 75 74 69 6e 65 20 67 65   this routine ge
42c0: 74 73 20 63 61 6c 6c 65 64 21 0a 09 20 20 20 20  ts called!..    
42d0: 3b 3b 0a 09 20 20 20 20 28 73 65 74 21 20 74 65  ;;..    (set! te
42e0: 73 74 2d 69 64 20 28 6f 70 65 6e 2d 72 75 6e 2d  st-id (open-run-
42f0: 63 6c 6f 73 65 20 64 62 3a 67 65 74 2d 74 65 73  close db:get-tes
4300: 74 2d 69 64 20 64 62 20 72 75 6e 2d 69 64 20 74  t-id db run-id t
4310: 65 73 74 2d 6e 61 6d 65 20 69 74 65 6d 2d 70 61  est-name item-pa
4320: 74 68 29 29 0a 09 20 20 20 20 28 69 66 20 28 6e  th))..    (if (n
4330: 6f 74 20 74 65 73 74 2d 69 64 29 0a 09 09 28 62  ot test-id)...(b
4340: 65 67 69 6e 0a 09 09 20 20 28 64 65 62 75 67 3a  egin...  (debug:
4350: 70 72 69 6e 74 20 32 20 22 57 41 52 4e 3a 20 54  print 2 "WARN: T
4360: 65 73 74 20 6e 6f 74 20 70 72 65 2d 63 72 65 61  est not pre-crea
4370: 74 65 64 3f 20 74 65 73 74 2d 6e 61 6d 65 3d 22  ted? test-name="
4380: 20 74 65 73 74 2d 6e 61 6d 65 20 22 2c 20 69 74   test-name ", it
4390: 65 6d 2d 70 61 74 68 3d 22 20 69 74 65 6d 2d 70  em-path=" item-p
43a0: 61 74 68 20 22 2c 20 72 75 6e 2d 69 64 3d 22 20  ath ", run-id=" 
43b0: 72 75 6e 2d 69 64 29 0a 09 09 20 20 28 63 64 62  run-id)...  (cdb
43c0: 3a 74 65 73 74 73 2d 72 65 67 69 73 74 65 72 2d  :tests-register-
43d0: 74 65 73 74 20 2a 72 75 6e 72 65 6d 6f 74 65 2a  test *runremote*
43e0: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d   run-id test-nam
43f0: 65 20 69 74 65 6d 2d 70 61 74 68 29 0a 09 09 20  e item-path)... 
4400: 20 28 73 65 74 21 20 74 65 73 74 2d 69 64 20 28   (set! test-id (
4410: 6f 70 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20 64  open-run-close d
4420: 62 3a 67 65 74 2d 74 65 73 74 2d 69 64 20 64 62  b:get-test-id db
4430: 20 72 75 6e 2d 69 64 20 74 65 73 74 2d 6e 61 6d   run-id test-nam
4440: 65 20 69 74 65 6d 2d 70 61 74 68 29 29 29 29 0a  e item-path)))).
4450: 09 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e  .    (debug:prin
4460: 74 2d 69 6e 66 6f 20 34 20 22 74 65 73 74 2d 69  t-info 4 "test-i
4470: 64 3d 22 20 74 65 73 74 2d 69 64 20 22 2c 20 72  d=" test-id ", r
4480: 75 6e 2d 69 64 3d 22 20 72 75 6e 2d 69 64 20 22  un-id=" run-id "
4490: 2c 20 74 65 73 74 2d 6e 61 6d 65 3d 22 20 74 65  , test-name=" te
44a0: 73 74 2d 6e 61 6d 65 20 22 2c 20 69 74 65 6d 2d  st-name ", item-
44b0: 70 61 74 68 3d 5c 22 22 20 69 74 65 6d 2d 70 61  path=\"" item-pa
44c0: 74 68 20 22 5c 22 22 29 0a 09 20 20 20 20 28 73  th "\"")..    (s
44d0: 65 74 21 20 74 65 73 74 64 61 74 20 28 63 64 62  et! testdat (cdb
44e0: 3a 67 65 74 2d 74 65 73 74 2d 69 6e 66 6f 2d 62  :get-test-info-b
44f0: 79 2d 69 64 20 2a 72 75 6e 72 65 6d 6f 74 65 2a  y-id *runremote*
4500: 20 74 65 73 74 2d 69 64 29 29 29 29 0a 20 20 20   test-id)))).   
4510: 20 20 20 28 73 65 74 21 20 74 65 73 74 2d 69 64     (set! test-id
4520: 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 69 64   (db:test-get-id
4530: 20 74 65 73 74 64 61 74 29 29 0a 20 20 20 20 20   testdat)).     
4540: 20 28 63 68 61 6e 67 65 2d 64 69 72 65 63 74 6f   (change-directo
4550: 72 79 20 74 65 73 74 2d 70 61 74 68 29 0a 20 20  ry test-path).  
4560: 20 20 20 20 28 63 61 73 65 20 28 69 66 20 66 6f      (case (if fo
4570: 72 63 65 20 3b 3b 20 28 61 72 67 73 3a 67 65 74  rce ;; (args:get
4580: 2d 61 72 67 20 22 2d 66 6f 72 63 65 22 29 0a 09  -arg "-force")..
4590: 09 27 4e 4f 54 5f 53 54 41 52 54 45 44 0a 09 09  .'NOT_STARTED...
45a0: 28 69 66 20 74 65 73 74 64 61 74 0a 09 09 20 20  (if testdat...  
45b0: 20 20 28 73 74 72 69 6e 67 2d 3e 73 79 6d 62 6f    (string->symbo
45c0: 6c 20 28 74 65 73 74 3a 67 65 74 2d 73 74 61 74  l (test:get-stat
45d0: 65 20 74 65 73 74 64 61 74 29 29 0a 09 09 20 20  e testdat))...  
45e0: 20 20 27 66 61 69 6c 65 64 2d 74 6f 2d 69 6e 73    'failed-to-ins
45f0: 65 72 74 29 29 0a 09 28 28 66 61 69 6c 65 64 2d  ert))..((failed-
4600: 74 6f 2d 69 6e 73 65 72 74 29 0a 09 20 28 64 65  to-insert).. (de
4610: 62 75 67 3a 70 72 69 6e 74 20 30 20 22 45 52 52  bug:print 0 "ERR
4620: 4f 52 3a 20 46 61 69 6c 65 64 20 74 6f 20 69 6e  OR: Failed to in
4630: 73 65 72 74 20 74 68 65 20 72 65 63 6f 72 64 20  sert the record 
4640: 69 6e 74 6f 20 74 68 65 20 64 62 22 29 29 0a 09  into the db"))..
4650: 28 28 4e 4f 54 5f 53 54 41 52 54 45 44 20 43 4f  ((NOT_STARTED CO
4660: 4d 50 4c 45 54 45 44 20 44 45 4c 45 54 45 44 29  MPLETED DELETED)
4670: 0a 09 20 28 6c 65 74 20 28 28 72 75 6e 66 6c 61  .. (let ((runfla
4680: 67 20 23 66 29 29 0a 09 20 20 20 28 63 6f 6e 64  g #f))..   (cond
4690: 0a 09 20 20 20 20 3b 3b 20 2d 66 6f 72 63 65 2c  ..    ;; -force,
46a0: 20 72 75 6e 20 6e 6f 20 6d 61 74 74 65 72 20 77   run no matter w
46b0: 68 61 74 0a 09 20 20 20 20 28 66 6f 72 63 65 20  hat..    (force 
46c0: 28 73 65 74 21 20 72 75 6e 66 6c 61 67 20 23 74  (set! runflag #t
46d0: 29 29 0a 09 20 20 20 20 3b 3b 20 4e 4f 54 5f 53  ))..    ;; NOT_S
46e0: 54 41 52 54 45 44 2c 20 72 75 6e 20 6e 6f 20 6d  TARTED, run no m
46f0: 61 74 74 65 72 20 77 68 61 74 0a 09 20 20 20 20  atter what..    
4700: 28 28 6d 65 6d 62 65 72 20 28 74 65 73 74 3a 67  ((member (test:g
4710: 65 74 2d 73 74 61 74 65 20 74 65 73 74 64 61 74  et-state testdat
4720: 29 20 27 28 22 44 45 4c 45 54 45 44 22 20 22 4e  ) '("DELETED" "N
4730: 4f 54 5f 53 54 41 52 54 45 44 22 29 29 28 73 65  OT_STARTED"))(se
4740: 74 21 20 72 75 6e 66 6c 61 67 20 23 74 29 29 0a  t! runflag #t)).
4750: 09 20 20 20 20 3b 3b 20 6e 6f 74 20 2d 72 65 72  .    ;; not -rer
4760: 75 6e 20 61 6e 64 20 50 41 53 53 2c 20 57 41 52  un and PASS, WAR
4770: 4e 20 6f 72 20 43 48 45 43 4b 2c 20 64 6f 20 6e  N or CHECK, do n
4780: 6f 20 72 75 6e 0a 09 20 20 20 20 28 28 61 6e 64  o run..    ((and
4790: 20 28 6f 72 20 28 6e 6f 74 20 72 65 72 75 6e 29   (or (not rerun)
47a0: 0a 09 09 20 20 20 20 20 20 6b 65 65 70 67 6f 69  ...      keepgoi
47b0: 6e 67 29 0a 09 09 20 20 3b 3b 20 52 65 71 75 69  ng)...  ;; Requi
47c0: 72 65 20 74 6f 20 66 6f 72 63 65 20 72 65 2d 72  re to force re-r
47d0: 75 6e 20 66 6f 72 20 43 4f 4d 50 4c 45 54 45 44  un for COMPLETED
47e0: 20 6f 72 20 2a 61 6e 79 74 68 69 6e 67 2a 20 2b   or *anything* +
47f0: 20 50 41 53 53 2c 57 41 52 4e 20 6f 72 20 43 48   PASS,WARN or CH
4800: 45 43 4b 0a 09 09 20 20 28 6f 72 20 28 6d 65 6d  ECK...  (or (mem
4810: 62 65 72 20 28 74 65 73 74 3a 67 65 74 2d 73 74  ber (test:get-st
4820: 61 74 75 73 20 74 65 73 74 64 61 74 29 20 27 28  atus testdat) '(
4830: 22 50 41 53 53 22 20 22 57 41 52 4e 22 20 22 43  "PASS" "WARN" "C
4840: 48 45 43 4b 22 20 22 53 4b 49 50 22 29 29 0a 09  HECK" "SKIP"))..
4850: 09 20 20 20 20 20 20 28 6d 65 6d 62 65 72 20 28  .      (member (
4860: 74 65 73 74 3a 67 65 74 2d 73 74 61 74 65 20 20  test:get-state  
4870: 74 65 73 74 64 61 74 29 20 27 28 22 43 4f 4d 50  testdat) '("COMP
4880: 4c 45 54 45 44 22 29 29 29 29 20 0a 09 20 20 20  LETED")))) ..   
4890: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69    (debug:print-i
48a0: 6e 66 6f 20 32 20 22 72 75 6e 6e 69 6e 67 20 74  nfo 2 "running t
48b0: 65 73 74 20 22 20 74 65 73 74 2d 6e 61 6d 65 20  est " test-name 
48c0: 22 2f 22 20 69 74 65 6d 2d 70 61 74 68 20 22 20  "/" item-path " 
48d0: 73 75 70 70 72 65 73 73 65 64 20 61 73 20 69 74  suppressed as it
48e0: 20 69 73 20 22 20 28 74 65 73 74 3a 67 65 74 2d   is " (test:get-
48f0: 73 74 61 74 65 20 74 65 73 74 64 61 74 29 20 22  state testdat) "
4900: 20 61 6e 64 20 22 20 28 74 65 73 74 3a 67 65 74   and " (test:get
4910: 2d 73 74 61 74 75 73 20 74 65 73 74 64 61 74 29  -status testdat)
4920: 29 0a 09 20 20 20 20 20 28 73 65 74 21 20 72 75  )..     (set! ru
4930: 6e 66 6c 61 67 20 23 66 29 29 0a 09 20 20 20 20  nflag #f))..    
4940: 3b 3b 20 2d 72 65 72 75 6e 20 61 6e 64 20 73 74  ;; -rerun and st
4950: 61 74 75 73 20 69 73 20 6f 6e 65 20 6f 66 20 74  atus is one of t
4960: 68 65 20 73 70 65 63 69 66 65 64 2c 20 72 75 6e  he specifed, run
4970: 20 69 74 0a 09 20 20 20 20 28 28 61 6e 64 20 72   it..    ((and r
4980: 65 72 75 6e 0a 09 09 20 20 28 6c 65 74 2a 20 28  erun...  (let* (
4990: 28 72 65 72 75 6e 6c 73 74 20 20 20 28 73 74 72  (rerunlst   (str
49a0: 69 6e 67 2d 73 70 6c 69 74 20 72 65 72 75 6e 20  ing-split rerun 
49b0: 22 2c 22 29 29 0a 09 09 09 20 28 6d 75 73 74 2d  ",")).... (must-
49c0: 72 65 72 75 6e 20 28 6d 65 6d 62 65 72 20 28 74  rerun (member (t
49d0: 65 73 74 3a 67 65 74 2d 73 74 61 74 75 73 20 74  est:get-status t
49e0: 65 73 74 64 61 74 29 20 72 65 72 75 6e 6c 73 74  estdat) rerunlst
49f0: 29 29 29 0a 09 09 20 20 20 20 28 64 65 62 75 67  )))...    (debug
4a00: 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 33 20 22 2d  :print-info 3 "-
4a10: 72 65 72 75 6e 20 6c 69 73 74 3a 20 22 20 72 65  rerun list: " re
4a20: 72 75 6e 20 22 2c 20 74 65 73 74 2d 73 74 61 74  run ", test-stat
4a30: 75 73 3a 20 22 20 28 74 65 73 74 3a 67 65 74 2d  us: " (test:get-
4a40: 73 74 61 74 75 73 20 74 65 73 74 64 61 74 29 22  status testdat)"
4a50: 2c 20 6d 75 73 74 2d 72 65 72 75 6e 3a 20 22 20  , must-rerun: " 
4a60: 6d 75 73 74 2d 72 65 72 75 6e 29 0a 09 09 20 20  must-rerun)...  
4a70: 20 20 6d 75 73 74 2d 72 65 72 75 6e 29 29 0a 09    must-rerun))..
4a80: 20 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e       (debug:prin
4a90: 74 2d 69 6e 66 6f 20 32 20 22 52 65 72 75 6e 20  t-info 2 "Rerun 
4aa0: 66 6f 72 63 65 64 20 66 6f 72 20 74 65 73 74 20  forced for test 
4ab0: 22 20 74 65 73 74 2d 6e 61 6d 65 20 22 2f 22 20  " test-name "/" 
4ac0: 69 74 65 6d 2d 70 61 74 68 29 0a 09 20 20 20 20  item-path)..    
4ad0: 20 28 73 65 74 21 20 72 75 6e 66 6c 61 67 20 23   (set! runflag #
4ae0: 74 29 29 0a 09 20 20 20 20 3b 3b 20 2d 6b 65 65  t))..    ;; -kee
4af0: 70 67 6f 69 6e 67 2c 20 64 6f 20 6e 6f 74 20 72  pgoing, do not r
4b00: 65 72 75 6e 20 46 41 49 4c 0a 09 20 20 20 20 28  erun FAIL..    (
4b10: 28 61 6e 64 20 6b 65 65 70 67 6f 69 6e 67 0a 09  (and keepgoing..
4b20: 09 20 20 28 6d 65 6d 62 65 72 20 28 74 65 73 74  .  (member (test
4b30: 3a 67 65 74 2d 73 74 61 74 75 73 20 74 65 73 74  :get-status test
4b40: 64 61 74 29 20 27 28 22 46 41 49 4c 22 29 29 29  dat) '("FAIL")))
4b50: 0a 09 20 20 20 20 20 28 73 65 74 21 20 72 75 6e  ..     (set! run
4b60: 66 6c 61 67 20 23 66 29 29 0a 09 20 20 20 20 28  flag #f))..    (
4b70: 28 61 6e 64 20 28 6e 6f 74 20 72 65 72 75 6e 29  (and (not rerun)
4b80: 0a 09 09 20 20 28 6d 65 6d 62 65 72 20 28 74 65  ...  (member (te
4b90: 73 74 3a 67 65 74 2d 73 74 61 74 75 73 20 74 65  st:get-status te
4ba0: 73 74 64 61 74 29 20 27 28 22 46 41 49 4c 22 20  stdat) '("FAIL" 
4bb0: 22 6e 2f 61 22 29 29 29 0a 09 20 20 20 20 20 28  "n/a")))..     (
4bc0: 73 65 74 21 20 72 75 6e 66 6c 61 67 20 23 74 29  set! runflag #t)
4bd0: 29 0a 09 20 20 20 20 28 65 6c 73 65 20 28 73 65  )..    (else (se
4be0: 74 21 20 72 75 6e 66 6c 61 67 20 23 66 29 29 29  t! runflag #f)))
4bf0: 0a 09 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e  ..   (debug:prin
4c00: 74 20 36 20 22 52 55 4e 4e 49 4e 47 20 3d 3e 20  t 6 "RUNNING => 
4c10: 72 75 6e 66 6c 61 67 3a 20 22 20 72 75 6e 66 6c  runflag: " runfl
4c20: 61 67 20 22 20 53 54 41 54 45 3a 20 22 20 28 74  ag " STATE: " (t
4c30: 65 73 74 3a 67 65 74 2d 73 74 61 74 65 20 74 65  est:get-state te
4c40: 73 74 64 61 74 29 20 22 20 53 54 41 54 55 53 3a  stdat) " STATUS:
4c50: 20 22 20 28 74 65 73 74 3a 67 65 74 2d 73 74 61   " (test:get-sta
4c60: 74 75 73 20 74 65 73 74 64 61 74 29 29 0a 09 20  tus testdat)).. 
4c70: 20 20 28 69 66 20 28 6e 6f 74 20 72 75 6e 66 6c    (if (not runfl
4c80: 61 67 29 0a 09 20 20 20 20 20 20 20 28 69 66 20  ag)..       (if 
4c90: 28 6e 6f 74 20 70 61 72 65 6e 74 2d 74 65 73 74  (not parent-test
4ca0: 29 0a 09 09 20 20 20 28 64 65 62 75 67 3a 70 72  )...   (debug:pr
4cb0: 69 6e 74 20 31 20 22 4e 4f 54 45 3a 20 4e 6f 74  int 1 "NOTE: Not
4cc0: 20 73 74 61 72 74 69 6e 67 20 74 65 73 74 20 22   starting test "
4cd0: 20 6e 65 77 2d 74 65 73 74 2d 6e 61 6d 65 20 22   new-test-name "
4ce0: 20 61 73 20 69 74 20 69 73 20 73 74 61 74 65 20   as it is state 
4cf0: 5c 22 22 20 28 74 65 73 74 3a 67 65 74 2d 73 74  \"" (test:get-st
4d00: 61 74 65 20 74 65 73 74 64 61 74 29 20 0a 09 09  ate testdat) ...
4d10: 09 09 22 5c 22 20 61 6e 64 20 73 74 61 74 75 73  .."\" and status
4d20: 20 5c 22 22 20 28 74 65 73 74 3a 67 65 74 2d 73   \"" (test:get-s
4d30: 74 61 74 75 73 20 74 65 73 74 64 61 74 29 20 22  tatus testdat) "
4d40: 5c 22 2c 20 75 73 65 20 2d 72 65 72 75 6e 20 5c  \", use -rerun \
4d50: 22 22 20 28 74 65 73 74 3a 67 65 74 2d 73 74 61  "" (test:get-sta
4d60: 74 75 73 20 74 65 73 74 64 61 74 29 0a 20 20 20  tus testdat).   
4d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4d80: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22               "\"
4d90: 20 6f 72 20 2d 66 6f 72 63 65 20 74 6f 20 6f 76   or -force to ov
4da0: 65 72 72 69 64 65 22 29 29 0a 09 20 20 20 20 20  erride"))..     
4db0: 20 20 3b 3b 20 4e 4f 54 45 3a 20 4e 6f 20 6c 6f    ;; NOTE: No lo
4dc0: 6e 67 65 72 20 62 65 20 63 68 65 63 6b 69 6e 67  nger be checking
4dd0: 20 70 72 65 72 65 71 75 69 73 69 74 65 73 20 68   prerequisites h
4de0: 65 72 65 21 20 57 69 6c 6c 20 6e 65 76 65 72 20  ere! Will never 
4df0: 67 65 74 20 68 65 72 65 20 75 6e 6c 65 73 73 20  get here unless 
4e00: 70 72 65 72 65 71 73 20 61 72 65 0a 09 20 20 20  prereqs are..   
4e10: 20 20 20 20 3b 3b 20 20 20 20 20 20 20 61 6c 72      ;;       alr
4e20: 65 61 64 79 20 6d 65 74 2e 0a 09 20 20 20 20 20  eady met...     
4e30: 20 20 3b 3b 20 54 68 69 73 20 77 6f 75 6c 64 20    ;; This would 
4e40: 62 65 20 61 20 67 72 65 61 74 20 70 6c 61 63 65  be a great place
4e50: 20 74 6f 20 64 6f 20 74 68 65 20 70 72 6f 63 65   to do the proce
4e60: 73 73 2d 66 6f 72 6b 0a 09 20 20 20 20 20 20 20  ss-fork..       
4e70: 28 69 66 20 28 6e 6f 74 20 28 6c 61 75 6e 63 68  (if (not (launch
4e80: 2d 74 65 73 74 20 74 65 73 74 2d 69 64 20 72 75  -test test-id ru
4e90: 6e 2d 69 64 20 72 75 6e 2d 69 6e 66 6f 20 6b 65  n-id run-info ke
4ea0: 79 2d 76 61 6c 73 20 72 75 6e 6e 61 6d 65 20 74  y-vals runname t
4eb0: 65 73 74 2d 63 6f 6e 66 20 6b 65 79 76 61 6c 6c  est-conf keyvall
4ec0: 73 74 20 74 65 73 74 2d 6e 61 6d 65 20 74 65 73  st test-name tes
4ed0: 74 2d 70 61 74 68 20 69 74 65 6d 64 61 74 20 66  t-path itemdat f
4ee0: 6c 61 67 73 29 29 0a 09 09 20 20 20 28 62 65 67  lags))...   (beg
4ef0: 69 6e 0a 09 09 20 20 20 20 20 28 70 72 69 6e 74  in...     (print
4f00: 20 22 45 52 52 4f 52 3a 20 46 61 69 6c 65 64 20   "ERROR: Failed 
4f10: 74 6f 20 6c 61 75 6e 63 68 20 74 68 65 20 74 65  to launch the te
4f20: 73 74 2e 20 45 78 69 74 69 6e 67 20 61 73 20 73  st. Exiting as s
4f30: 6f 6f 6e 20 61 73 20 70 6f 73 73 69 62 6c 65 22  oon as possible"
4f40: 29 0a 09 09 20 20 20 20 20 28 73 65 74 21 20 2a  )...     (set! *
4f50: 67 6c 6f 62 61 6c 65 78 69 74 73 74 61 74 75 73  globalexitstatus
4f60: 2a 20 31 29 20 3b 3b 20 0a 09 09 20 20 20 20 20  * 1) ;; ...     
4f70: 28 70 72 6f 63 65 73 73 2d 73 69 67 6e 61 6c 20  (process-signal 
4f80: 28 63 75 72 72 65 6e 74 2d 70 72 6f 63 65 73 73  (current-process
4f90: 2d 69 64 29 20 73 69 67 6e 61 6c 2f 6b 69 6c 6c  -id) signal/kill
4fa0: 29 29 29 29 29 29 0a 09 28 28 4b 49 4c 4c 45 44  ))))))..((KILLED
4fb0: 29 20 0a 09 20 28 64 65 62 75 67 3a 70 72 69 6e  ) .. (debug:prin
4fc0: 74 20 31 20 22 4e 4f 54 45 3a 20 22 20 6e 65 77  t 1 "NOTE: " new
4fd0: 2d 74 65 73 74 2d 6e 61 6d 65 20 22 20 69 73 20  -test-name " is 
4fe0: 61 6c 72 65 61 64 79 20 72 75 6e 6e 69 6e 67 20  already running 
4ff0: 6f 72 20 77 61 73 20 65 78 70 6c 69 63 74 6c 79  or was explictly
5000: 20 6b 69 6c 6c 65 64 2c 20 75 73 65 20 2d 66 6f   killed, use -fo
5010: 72 63 65 20 74 6f 20 6c 61 75 6e 63 68 20 69 74  rce to launch it
5020: 2e 22 29 29 0a 09 28 28 4c 41 55 4e 43 48 45 44  ."))..((LAUNCHED
5030: 20 52 45 4d 4f 54 45 48 4f 53 54 53 54 41 52 54   REMOTEHOSTSTART
5040: 20 52 55 4e 4e 49 4e 47 29 20 20 0a 09 20 28 69   RUNNING)  .. (i
5050: 66 20 28 3e 20 28 2d 20 28 63 75 72 72 65 6e 74  f (> (- (current
5060: 2d 73 65 63 6f 6e 64 73 29 28 2b 20 28 64 62 3a  -seconds)(+ (db:
5070: 74 65 73 74 2d 67 65 74 2d 65 76 65 6e 74 5f 74  test-get-event_t
5080: 69 6d 65 20 74 65 73 74 64 61 74 29 0a 09 09 09  ime testdat)....
5090: 09 20 20 20 20 20 20 20 28 64 62 3a 74 65 73 74  .       (db:test
50a0: 2d 67 65 74 2d 72 75 6e 5f 64 75 72 61 74 69 6f  -get-run_duratio
50b0: 6e 20 74 65 73 74 64 61 74 29 29 29 0a 09 09 36  n testdat)))...6
50c0: 30 30 29 20 3b 3b 20 69 2e 65 2e 20 6e 6f 20 75  00) ;; i.e. no u
50d0: 70 64 61 74 65 20 66 6f 72 20 6d 6f 72 65 20 74  pdate for more t
50e0: 68 61 6e 20 36 30 30 20 73 65 63 6f 6e 64 73 0a  han 600 seconds.
50f0: 09 20 20 20 20 20 28 62 65 67 69 6e 0a 09 20 20  .     (begin..  
5100: 20 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e       (debug:prin
5110: 74 20 30 20 22 57 41 52 4e 49 4e 47 3a 20 54 65  t 0 "WARNING: Te
5120: 73 74 20 22 20 74 65 73 74 2d 6e 61 6d 65 20 22  st " test-name "
5130: 20 61 70 70 65 61 72 73 20 74 6f 20 62 65 20 64   appears to be d
5140: 65 61 64 2e 20 46 6f 72 63 69 6e 67 20 69 74 20  ead. Forcing it 
5150: 74 6f 20 73 74 61 74 65 20 49 4e 43 4f 4d 50 4c  to state INCOMPL
5160: 45 54 45 20 61 6e 64 20 73 74 61 74 75 73 20 53  ETE and status S
5170: 54 55 43 4b 2f 44 45 41 44 22 29 0a 09 20 20 20  TUCK/DEAD")..   
5180: 20 20 20 20 28 74 65 73 74 73 3a 74 65 73 74 2d      (tests:test-
5190: 73 65 74 2d 73 74 61 74 75 73 21 20 74 65 73 74  set-status! test
51a0: 2d 69 64 20 22 49 4e 43 4f 4d 50 4c 45 54 45 22  -id "INCOMPLETE"
51b0: 20 22 53 54 55 43 4b 2f 44 45 41 44 22 20 22 54   "STUCK/DEAD" "T
51c0: 65 73 74 20 69 73 20 73 74 75 63 6b 20 6f 72 20  est is stuck or 
51d0: 64 65 61 64 22 20 23 66 29 29 0a 09 20 20 20 20  dead" #f))..    
51e0: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20 32 20   (debug:print 2 
51f0: 22 4e 4f 54 45 3a 20 22 20 74 65 73 74 2d 6e 61  "NOTE: " test-na
5200: 6d 65 20 22 20 69 73 20 61 6c 72 65 61 64 79 20  me " is already 
5210: 72 75 6e 6e 69 6e 67 22 29 29 29 0a 09 28 65 6c  running")))..(el
5220: 73 65 20 20 20 20 20 20 20 28 64 65 62 75 67 3a  se       (debug:
5230: 70 72 69 6e 74 20 30 20 22 45 52 52 4f 52 3a 20  print 0 "ERROR: 
5240: 46 61 69 6c 65 64 20 74 6f 20 6c 61 75 6e 63 68  Failed to launch
5250: 20 74 65 73 74 20 22 20 6e 65 77 2d 74 65 73 74   test " new-test
5260: 2d 6e 61 6d 65 20 22 2e 20 55 6e 72 65 63 6f 67  -name ". Unrecog
5270: 6e 69 73 65 64 20 73 74 61 74 65 20 22 20 28 74  nised state " (t
5280: 65 73 74 3a 67 65 74 2d 73 74 61 74 65 20 74 65  est:get-state te
5290: 73 74 64 61 74 29 29 29 29 29 29 29 0a 0a 3b 3b  stdat)))))))..;;
52a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
52b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
52c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
52d0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
52e0: 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 45 4e 44 20 4f 46  ======.;; END OF
52f0: 20 4e 45 57 20 53 54 55 46 46 0a 3b 3b 3d 3d 3d   NEW STUFF.;;===
5300: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5310: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5320: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5330: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
5340: 3d 3d 3d 0a 0a 28 64 65 66 69 6e 65 20 28 67 65  ===..(define (ge
5350: 74 2d 64 69 72 2d 75 70 2d 6e 20 64 69 72 20 2e  t-dir-up-n dir .
5360: 20 70 61 72 61 6d 73 29 20 0a 20 20 28 6c 65 74   params) .  (let
5370: 20 28 28 64 70 61 72 74 73 20 20 28 73 74 72 69   ((dparts  (stri
5380: 6e 67 2d 73 70 6c 69 74 20 64 69 72 20 22 2f 22  ng-split dir "/"
5390: 29 29 0a 09 28 63 6f 75 6e 74 20 20 20 28 69 66  ))..(count   (if
53a0: 20 28 6e 75 6c 6c 3f 20 70 61 72 61 6d 73 29 20   (null? params) 
53b0: 31 20 28 63 61 72 20 70 61 72 61 6d 73 29 29 29  1 (car params)))
53c0: 29 0a 20 20 20 20 28 63 6f 6e 63 20 22 2f 22 20  ).    (conc "/" 
53d0: 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65  (string-interspe
53e0: 72 73 65 20 0a 09 20 20 20 20 20 20 20 28 74 61  rse ..       (ta
53f0: 6b 65 20 64 70 61 72 74 73 20 28 2d 20 28 6c 65  ke dparts (- (le
5400: 6e 67 74 68 20 64 70 61 72 74 73 29 20 63 6f 75  ngth dparts) cou
5410: 6e 74 29 29 0a 09 20 20 20 20 20 20 20 22 2f 22  nt))..       "/"
5420: 29 29 29 29 0a 3b 3b 20 52 65 6d 6f 76 65 20 72  )))).;; Remove r
5430: 75 6e 73 0a 3b 3b 20 66 69 65 6c 64 73 20 61 72  uns.;; fields ar
5440: 65 20 70 61 73 73 69 6e 67 20 69 6e 20 74 68 72  e passing in thr
5450: 6f 75 67 68 20 0a 3b 3b 20 61 63 74 69 6f 6e 3a  ough .;; action:
5460: 0a 3b 3b 20 20 20 20 27 72 65 6d 6f 76 65 2d 72  .;;    'remove-r
5470: 75 6e 73 0a 3b 3b 20 20 20 20 27 73 65 74 2d 73  uns.;;    'set-s
5480: 74 61 74 65 2d 73 74 61 74 75 73 0a 3b 3b 0a 3b  tate-status.;;.;
5490: 3b 20 4e 42 2f 2f 20 73 68 6f 75 6c 64 20 70 61  ; NB// should pa
54a0: 73 73 20 69 6e 20 6b 65 79 73 3f 0a 3b 3b 0a 28  ss in keys?.;;.(
54b0: 64 65 66 69 6e 65 20 28 72 75 6e 73 3a 6f 70 65  define (runs:ope
54c0: 72 61 74 65 2d 6f 6e 20 61 63 74 69 6f 6e 20 72  rate-on action r
54d0: 75 6e 6e 61 6d 65 70 61 74 74 20 74 65 73 74 70  unnamepatt testp
54e0: 61 74 74 20 23 21 6b 65 79 20 28 73 74 61 74 65  att #!key (state
54f0: 20 23 66 29 28 73 74 61 74 75 73 20 23 66 29 28   #f)(status #f)(
5500: 6e 65 77 2d 73 74 61 74 65 2d 73 74 61 74 75 73  new-state-status
5510: 20 23 66 29 29 0a 20 20 28 63 6f 6d 6d 6f 6e 3a   #f)).  (common:
5520: 63 6c 65 61 72 2d 63 61 63 68 65 73 29 20 3b 3b  clear-caches) ;;
5530: 20 63 6c 65 61 72 20 61 6c 6c 20 63 61 63 68 65   clear all cache
5540: 73 0a 20 20 28 6c 65 74 2a 20 28 28 64 62 20 20  s.  (let* ((db  
5550: 20 20 20 20 20 20 20 20 20 23 66 29 0a 09 20 28           #f).. (
5560: 6b 65 79 73 20 20 20 20 20 20 20 20 20 28 6f 70  keys         (op
5570: 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20 64 62 3a  en-run-close db:
5580: 67 65 74 2d 6b 65 79 73 20 64 62 29 29 0a 09 20  get-keys db)).. 
5590: 28 72 75 6e 64 61 74 20 20 20 20 20 20 20 28 6f  (rundat       (o
55a0: 70 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20 72 75  pen-run-close ru
55b0: 6e 73 3a 67 65 74 2d 72 75 6e 73 2d 62 79 2d 70  ns:get-runs-by-p
55c0: 61 74 74 20 64 62 20 6b 65 79 73 20 72 75 6e 6e  att db keys runn
55d0: 61 6d 65 70 61 74 74 29 29 0a 09 20 28 68 65 61  amepatt)).. (hea
55e0: 64 65 72 20 20 20 20 20 20 20 28 76 65 63 74 6f  der       (vecto
55f0: 72 2d 72 65 66 20 72 75 6e 64 61 74 20 30 29 29  r-ref rundat 0))
5600: 0a 09 20 28 72 75 6e 73 20 20 20 20 20 20 20 20  .. (runs        
5610: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 72 75 6e   (vector-ref run
5620: 64 61 74 20 31 29 29 0a 09 20 28 73 74 61 74 65  dat 1)).. (state
5630: 73 20 20 20 20 20 20 20 28 69 66 20 73 74 61 74  s       (if stat
5640: 65 20 20 28 73 74 72 69 6e 67 2d 73 70 6c 69 74  e  (string-split
5650: 20 73 74 61 74 65 20 20 22 2c 22 29 20 27 28 29   state  ",") '()
5660: 29 29 0a 09 20 28 73 74 61 74 75 73 65 73 20 20  )).. (statuses  
5670: 20 20 20 28 69 66 20 73 74 61 74 75 73 20 28 73     (if status (s
5680: 74 72 69 6e 67 2d 73 70 6c 69 74 20 73 74 61 74  tring-split stat
5690: 75 73 20 22 2c 22 29 20 27 28 29 29 29 0a 09 20  us ",") '())).. 
56a0: 28 73 74 61 74 65 2d 73 74 61 74 75 73 20 28 69  (state-status (i
56b0: 66 20 28 73 74 72 69 6e 67 3f 20 6e 65 77 2d 73  f (string? new-s
56c0: 74 61 74 65 2d 73 74 61 74 75 73 29 20 28 73 74  tate-status) (st
56d0: 72 69 6e 67 2d 73 70 6c 69 74 20 6e 65 77 2d 73  ring-split new-s
56e0: 74 61 74 65 2d 73 74 61 74 75 73 20 22 2c 22 29  tate-status ",")
56f0: 20 27 28 23 66 20 23 66 29 29 29 29 0a 20 20 20   '(#f #f)))).   
5700: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e   (debug:print-in
5710: 66 6f 20 34 20 22 72 75 6e 73 3a 6f 70 65 72 61  fo 4 "runs:opera
5720: 74 65 2d 6f 6e 20 3d 3e 20 48 65 61 64 65 72 3a  te-on => Header:
5730: 20 22 20 68 65 61 64 65 72 20 22 20 61 63 74 69   " header " acti
5740: 6f 6e 3a 20 22 20 61 63 74 69 6f 6e 20 22 20 6e  on: " action " n
5750: 65 77 2d 73 74 61 74 65 2d 73 74 61 74 75 73 3a  ew-state-status:
5760: 20 22 20 6e 65 77 2d 73 74 61 74 65 2d 73 74 61   " new-state-sta
5770: 74 75 73 29 0a 20 20 20 20 28 69 66 20 28 3e 20  tus).    (if (> 
5780: 32 20 28 6c 65 6e 67 74 68 20 73 74 61 74 65 2d  2 (length state-
5790: 73 74 61 74 75 73 29 29 0a 09 28 62 65 67 69 6e  status))..(begin
57a0: 0a 09 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74  ..  (debug:print
57b0: 20 30 20 22 45 52 52 4f 52 3a 20 74 68 65 20 70   0 "ERROR: the p
57c0: 61 72 61 6d 65 74 65 72 20 74 6f 20 2d 73 65 74  arameter to -set
57d0: 2d 73 74 61 74 65 2d 73 74 61 74 75 73 20 69 73  -state-status is
57e0: 20 61 20 63 6f 6d 6d 61 20 64 65 6c 69 6d 69 74   a comma delimit
57f0: 65 64 20 73 74 72 69 6e 67 2e 20 45 2e 67 2e 20  ed string. E.g. 
5800: 43 4f 4d 50 4c 45 54 45 44 2c 46 41 49 4c 22 29  COMPLETED,FAIL")
5810: 0a 09 20 20 28 65 78 69 74 29 29 29 0a 20 20 20  ..  (exit))).   
5820: 20 28 66 6f 72 2d 65 61 63 68 0a 20 20 20 20 20   (for-each.     
5830: 28 6c 61 6d 62 64 61 20 28 72 75 6e 29 0a 20 20  (lambda (run).  
5840: 20 20 20 20 20 28 6c 65 74 20 28 28 72 75 6e 6b       (let ((runk
5850: 65 79 20 28 73 74 72 69 6e 67 2d 69 6e 74 65 72  ey (string-inter
5860: 73 70 65 72 73 65 20 28 6d 61 70 20 28 6c 61 6d  sperse (map (lam
5870: 62 64 61 20 28 6b 29 0a 09 09 09 09 09 09 28 64  bda (k).......(d
5880: 62 3a 67 65 74 2d 76 61 6c 75 65 2d 62 79 2d 68  b:get-value-by-h
5890: 65 61 64 65 72 20 72 75 6e 20 68 65 61 64 65 72  eader run header
58a0: 20 28 76 65 63 74 6f 72 2d 72 65 66 20 6b 20 30   (vector-ref k 0
58b0: 29 29 29 20 6b 65 79 73 29 20 22 2f 22 29 29 0a  ))) keys) "/")).
58c0: 09 20 20 20 20 20 28 64 69 72 73 2d 74 6f 2d 72  .     (dirs-to-r
58d0: 65 6d 6f 76 65 20 28 6d 61 6b 65 2d 68 61 73 68  emove (make-hash
58e0: 2d 74 61 62 6c 65 29 29 29 0a 09 20 28 6c 65 74  -table))).. (let
58f0: 2a 20 28 28 72 75 6e 2d 69 64 20 20 20 20 28 64  * ((run-id    (d
5900: 62 3a 67 65 74 2d 76 61 6c 75 65 2d 62 79 2d 68  b:get-value-by-h
5910: 65 61 64 65 72 20 72 75 6e 20 68 65 61 64 65 72  eader run header
5920: 20 22 69 64 22 29 29 0a 09 09 28 72 75 6e 2d 73   "id"))...(run-s
5930: 74 61 74 65 20 28 64 62 3a 67 65 74 2d 76 61 6c  tate (db:get-val
5940: 75 65 2d 62 79 2d 68 65 61 64 65 72 20 72 75 6e  ue-by-header run
5950: 20 68 65 61 64 65 72 20 22 73 74 61 74 65 22 29   header "state")
5960: 29 0a 09 09 28 74 65 73 74 73 20 20 20 20 20 28  )...(tests     (
5970: 69 66 20 28 6e 6f 74 20 28 65 71 75 61 6c 3f 20  if (not (equal? 
5980: 72 75 6e 2d 73 74 61 74 65 20 22 6c 6f 63 6b 65  run-state "locke
5990: 64 22 29 29 0a 09 09 09 20 20 20 20 20 20 20 28  d"))....       (
59a0: 6f 70 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20 64  open-run-close d
59b0: 62 3a 67 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d  b:get-tests-for-
59c0: 72 75 6e 20 64 62 20 72 75 6e 2d 69 64 0a 09 09  run db run-id...
59d0: 09 09 09 09 20 20 20 20 20 20 74 65 73 74 70 61  ....      testpa
59e0: 74 74 20 73 74 61 74 65 73 20 73 74 61 74 75 73  tt states status
59f0: 65 73 0a 09 09 09 09 09 09 20 20 20 20 20 20 6e  es.......      n
5a00: 6f 74 2d 69 6e 3a 20 20 23 66 0a 09 09 09 09 09  ot-in:  #f......
5a10: 09 20 20 20 20 20 20 73 6f 72 74 2d 62 79 3a 20  .      sort-by: 
5a20: 28 63 61 73 65 20 61 63 74 69 6f 6e 0a 09 09 09  (case action....
5a30: 09 09 09 09 09 20 28 28 72 65 6d 6f 76 65 2d 72  ..... ((remove-r
5a40: 75 6e 73 29 20 27 72 75 6e 64 69 72 29 0a 09 09  uns) 'rundir)...
5a50: 09 09 09 09 09 09 20 28 65 6c 73 65 20 20 20 20  ...... (else    
5a60: 20 20 20 20 20 20 27 65 76 65 6e 74 5f 74 69 6d        'event_tim
5a70: 65 29 29 29 0a 09 09 09 20 20 20 20 20 20 20 27  e)))....       '
5a80: 28 29 29 29 0a 09 09 28 6c 61 73 74 74 70 61 74  ()))...(lasttpat
5a90: 68 20 22 2f 64 6f 65 73 2f 6e 6f 74 2f 65 78 69  h "/does/not/exi
5aa0: 73 74 2f 49 2f 68 6f 70 65 22 29 29 0a 09 20 20  st/I/hope"))..  
5ab0: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e   (debug:print-in
5ac0: 66 6f 20 34 20 22 72 75 6e 73 3a 6f 70 65 72 61  fo 4 "runs:opera
5ad0: 74 65 2d 6f 6e 20 72 75 6e 3d 22 20 72 75 6e 20  te-on run=" run 
5ae0: 22 2c 20 68 65 61 64 65 72 3d 22 20 68 65 61 64  ", header=" head
5af0: 65 72 29 0a 09 20 20 20 28 69 66 20 28 6e 6f 74  er)..   (if (not
5b00: 20 28 6e 75 6c 6c 3f 20 74 65 73 74 73 29 29 0a   (null? tests)).
5b10: 09 20 20 20 20 20 20 20 28 62 65 67 69 6e 0a 09  .       (begin..
5b20: 09 20 28 63 61 73 65 20 61 63 74 69 6f 6e 0a 09  . (case action..
5b30: 09 20 20 20 28 28 72 65 6d 6f 76 65 2d 72 75 6e  .   ((remove-run
5b40: 73 29 0a 09 09 20 20 20 20 28 64 65 62 75 67 3a  s)...    (debug:
5b50: 70 72 69 6e 74 20 31 20 22 52 65 6d 6f 76 69 6e  print 1 "Removin
5b60: 67 20 74 65 73 74 73 20 66 6f 72 20 72 75 6e 3a  g tests for run:
5b70: 20 22 20 72 75 6e 6b 65 79 20 22 20 22 20 28 64   " runkey " " (d
5b80: 62 3a 67 65 74 2d 76 61 6c 75 65 2d 62 79 2d 68  b:get-value-by-h
5b90: 65 61 64 65 72 20 72 75 6e 20 68 65 61 64 65 72  eader run header
5ba0: 20 22 72 75 6e 6e 61 6d 65 22 29 29 29 0a 09 09   "runname")))...
5bb0: 20 20 20 28 28 73 65 74 2d 73 74 61 74 65 2d 73     ((set-state-s
5bc0: 74 61 74 75 73 29 0a 09 09 20 20 20 20 28 64 65  tatus)...    (de
5bd0: 62 75 67 3a 70 72 69 6e 74 20 31 20 22 4d 6f 64  bug:print 1 "Mod
5be0: 69 66 79 69 6e 67 20 73 74 61 74 65 20 61 6e 64  ifying state and
5bf0: 20 73 74 61 75 73 20 66 6f 72 20 74 65 73 74 73   staus for tests
5c00: 20 66 6f 72 20 72 75 6e 3a 20 22 20 72 75 6e 6b   for run: " runk
5c10: 65 79 20 22 20 22 20 28 64 62 3a 67 65 74 2d 76  ey " " (db:get-v
5c20: 61 6c 75 65 2d 62 79 2d 68 65 61 64 65 72 20 72  alue-by-header r
5c30: 75 6e 20 68 65 61 64 65 72 20 22 72 75 6e 6e 61  un header "runna
5c40: 6d 65 22 29 29 29 0a 09 09 20 20 20 28 28 70 72  me")))...   ((pr
5c50: 69 6e 74 2d 72 75 6e 29 0a 09 09 20 20 20 20 28  int-run)...    (
5c60: 64 65 62 75 67 3a 70 72 69 6e 74 20 31 20 22 50  debug:print 1 "P
5c70: 72 69 6e 74 69 6e 67 20 69 6e 66 6f 20 66 6f 72  rinting info for
5c80: 20 72 75 6e 20 22 20 72 75 6e 6b 65 79 20 22 2c   run " runkey ",
5c90: 20 72 75 6e 3d 22 20 72 75 6e 20 22 2c 20 74 65   run=" run ", te
5ca0: 73 74 73 3d 22 20 74 65 73 74 73 20 22 2c 20 68  sts=" tests ", h
5cb0: 65 61 64 65 72 3d 22 20 68 65 61 64 65 72 29 0a  eader=" header).
5cc0: 09 09 20 20 20 20 61 63 74 69 6f 6e 29 0a 09 09  ..    action)...
5cd0: 20 20 20 28 65 6c 73 65 0a 09 09 20 20 20 20 28     (else...    (
5ce0: 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f  debug:print-info
5cf0: 20 30 20 22 61 63 74 69 6f 6e 20 6e 6f 74 20 72   0 "action not r
5d00: 65 63 6f 67 6e 69 73 65 64 20 22 20 61 63 74 69  ecognised " acti
5d10: 6f 6e 29 29 29 0a 09 09 20 28 66 6f 72 2d 65 61  on)))... (for-ea
5d20: 63 68 0a 09 09 20 20 28 6c 61 6d 62 64 61 20 28  ch...  (lambda (
5d30: 74 65 73 74 29 0a 09 09 20 20 20 20 28 6c 65 74  test)...    (let
5d40: 2a 20 28 28 69 74 65 6d 2d 70 61 74 68 20 28 64  * ((item-path (d
5d50: 62 3a 74 65 73 74 2d 67 65 74 2d 69 74 65 6d 2d  b:test-get-item-
5d60: 70 61 74 68 20 74 65 73 74 29 29 0a 09 09 09 20  path test)).... 
5d70: 20 20 28 74 65 73 74 2d 6e 61 6d 65 20 28 64 62    (test-name (db
5d80: 3a 74 65 73 74 2d 67 65 74 2d 74 65 73 74 6e 61  :test-get-testna
5d90: 6d 65 20 74 65 73 74 29 29 0a 09 09 09 20 20 20  me test))....   
5da0: 28 72 75 6e 2d 64 69 72 20 20 20 28 64 62 3a 74  (run-dir   (db:t
5db0: 65 73 74 2d 67 65 74 2d 72 75 6e 64 69 72 20 74  est-get-rundir t
5dc0: 65 73 74 29 29 20 20 20 20 3b 3b 20 72 75 6e 20  est))    ;; run 
5dd0: 64 69 72 20 69 73 20 66 72 6f 6d 20 74 68 65 20  dir is from the 
5de0: 6c 69 6e 6b 20 74 72 65 65 0a 09 09 09 20 20 20  link tree....   
5df0: 28 72 65 61 6c 2d 64 69 72 20 20 28 69 66 20 28  (real-dir  (if (
5e00: 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 72 75 6e  file-exists? run
5e10: 2d 64 69 72 29 0a 09 09 09 09 09 20 20 28 72 65  -dir)......  (re
5e20: 73 6f 6c 76 65 2d 70 61 74 68 6e 61 6d 65 20 72  solve-pathname r
5e30: 75 6e 2d 64 69 72 29 0a 09 09 09 09 09 20 20 23  un-dir)......  #
5e40: 66 29 29 0a 09 09 09 20 20 20 28 74 65 73 74 2d  f))....   (test-
5e50: 69 64 20 20 20 28 64 62 3a 74 65 73 74 2d 67 65  id   (db:test-ge
5e60: 74 2d 69 64 20 74 65 73 74 29 29 29 0a 09 09 20  t-id test)))... 
5e70: 20 20 20 20 20 3b 3b 20 20 20 28 74 64 62 20 20       ;;   (tdb  
5e80: 20 20 20 20 20 28 64 62 3a 6f 70 65 6e 2d 74 65       (db:open-te
5e90: 73 74 2d 64 62 20 72 75 6e 2d 64 69 72 29 29 29  st-db run-dir)))
5ea0: 0a 09 09 20 20 20 20 20 20 28 64 65 62 75 67 3a  ...      (debug:
5eb0: 70 72 69 6e 74 2d 69 6e 66 6f 20 34 20 22 74 65  print-info 4 "te
5ec0: 73 74 3d 22 20 74 65 73 74 29 20 3b 3b 20 20 20  st=" test) ;;   
5ed0: 22 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 74  " (db:test-get-t
5ee0: 65 73 74 6e 61 6d 65 20 74 65 73 74 29 20 22 20  estname test) " 
5ef0: 69 64 3a 20 22 20 28 64 62 3a 74 65 73 74 2d 67  id: " (db:test-g
5f00: 65 74 2d 69 64 20 74 65 73 74 29 20 22 20 22 20  et-id test) " " 
5f10: 69 74 65 6d 2d 70 61 74 68 20 22 20 61 63 74 69  item-path " acti
5f20: 6f 6e 3a 20 22 20 61 63 74 69 6f 6e 29 0a 09 09  on: " action)...
5f30: 20 20 20 20 20 20 28 63 61 73 65 20 61 63 74 69        (case acti
5f40: 6f 6e 0a 09 09 09 28 28 72 65 6d 6f 76 65 2d 72  on....((remove-r
5f50: 75 6e 73 29 20 3b 3b 20 74 68 65 20 74 64 62 20  uns) ;; the tdb 
5f60: 69 73 20 66 6f 72 20 66 75 74 75 72 65 20 70 6f  is for future po
5f70: 73 73 69 62 6c 65 2e 20 0a 09 09 09 20 28 6f 70  ssible. .... (op
5f80: 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20 64 62 3a  en-run-close db:
5f90: 64 65 6c 65 74 65 2d 74 65 73 74 2d 72 65 63 6f  delete-test-reco
5fa0: 72 64 73 20 64 62 20 23 66 20 28 64 62 3a 74 65  rds db #f (db:te
5fb0: 73 74 2d 67 65 74 2d 69 64 20 74 65 73 74 29 29  st-get-id test))
5fc0: 0a 09 09 09 20 28 64 65 62 75 67 3a 70 72 69 6e  .... (debug:prin
5fd0: 74 2d 69 6e 66 6f 20 31 20 22 41 74 74 65 6d 70  t-info 1 "Attemp
5fe0: 74 69 6e 67 20 74 6f 20 72 65 6d 6f 76 65 20 22  ting to remove "
5ff0: 20 28 69 66 20 72 65 61 6c 2d 64 69 72 20 28 63   (if real-dir (c
6000: 6f 6e 63 20 22 20 64 69 72 20 22 20 72 65 61 6c  onc " dir " real
6010: 2d 64 69 72 20 22 20 61 6e 64 20 22 29 20 22 22  -dir " and ") ""
6020: 29 20 22 20 6c 69 6e 6b 20 22 20 72 75 6e 2d 64  ) " link " run-d
6030: 69 72 29 0a 09 09 09 20 28 69 66 20 28 61 6e 64  ir).... (if (and
6040: 20 72 65 61 6c 2d 64 69 72 20 0a 09 09 09 09 20   real-dir ..... 
6050: 20 28 3e 20 28 73 74 72 69 6e 67 2d 6c 65 6e 67   (> (string-leng
6060: 74 68 20 72 65 61 6c 2d 64 69 72 29 20 35 29 0a  th real-dir) 5).
6070: 09 09 09 09 20 20 28 66 69 6c 65 2d 65 78 69 73  ....  (file-exis
6080: 74 73 3f 20 72 65 61 6c 2d 64 69 72 29 29 20 3b  ts? real-dir)) ;
6090: 3b 20 62 61 64 20 68 65 75 72 69 73 74 69 63 20  ; bad heuristic 
60a0: 62 75 74 20 73 68 6f 75 6c 64 20 70 72 65 76 65  but should preve
60b0: 6e 74 20 2f 74 6d 70 20 2f 68 6f 6d 65 20 65 74  nt /tmp /home et
60c0: 63 2e 0a 09 09 09 20 20 20 20 20 28 62 65 67 69  c.....     (begi
60d0: 6e 20 3b 3b 20 6c 65 74 2a 20 28 28 72 65 61 6c  n ;; let* ((real
60e0: 70 61 74 68 20 28 72 65 73 6f 6c 76 65 2d 70 61  path (resolve-pa
60f0: 74 68 6e 61 6d 65 20 72 75 6e 2d 64 69 72 29 29  thname run-dir))
6100: 29 0a 09 09 09 20 20 20 20 20 20 20 28 64 65 62  )....       (deb
6110: 75 67 3a 70 72 69 6e 74 2d 69 6e 66 6f 20 31 20  ug:print-info 1 
6120: 22 52 65 63 75 72 73 69 76 65 6c 79 20 72 65 6d  "Recursively rem
6130: 6f 76 69 6e 67 20 22 20 72 65 61 6c 2d 64 69 72  oving " real-dir
6140: 29 0a 09 09 09 20 20 20 20 20 20 20 28 69 66 20  )....       (if 
6150: 28 66 69 6c 65 2d 65 78 69 73 74 73 3f 20 72 65  (file-exists? re
6160: 61 6c 2d 64 69 72 29 0a 09 09 09 09 20 20 20 28  al-dir).....   (
6170: 69 66 20 28 3e 20 28 73 79 73 74 65 6d 20 28 63  if (> (system (c
6180: 6f 6e 63 20 22 72 6d 20 2d 72 66 20 22 20 72 65  onc "rm -rf " re
6190: 61 6c 2d 64 69 72 29 29 20 30 29 0a 09 09 09 09  al-dir)) 0).....
61a0: 20 20 20 20 20 20 20 28 64 65 62 75 67 3a 70 72         (debug:pr
61b0: 69 6e 74 20 30 20 22 45 52 52 4f 52 3a 20 54 68  int 0 "ERROR: Th
61c0: 65 72 65 20 77 61 73 20 61 20 70 72 6f 62 6c 65  ere was a proble
61d0: 6d 20 72 65 6d 6f 76 69 6e 67 20 22 20 72 65 61  m removing " rea
61e0: 6c 2d 64 69 72 20 22 20 77 69 74 68 20 72 6d 20  l-dir " with rm 
61f0: 2d 66 22 29 29 0a 09 09 09 09 20 20 20 28 64 65  -f")).....   (de
6200: 62 75 67 3a 70 72 69 6e 74 20 30 20 22 57 41 52  bug:print 0 "WAR
6210: 4e 49 4e 47 3a 20 74 65 73 74 20 64 69 72 20 22  NING: test dir "
6220: 20 72 65 61 6c 2d 64 69 72 20 22 20 61 70 70 65   real-dir " appe
6230: 61 72 73 20 74 6f 20 6e 6f 74 20 65 78 69 73 74  ars to not exist
6240: 20 6f 72 20 69 73 20 6e 6f 74 20 72 65 61 64 61   or is not reada
6250: 62 6c 65 22 29 29 29 0a 09 09 09 20 20 20 20 20  ble")))....     
6260: 28 69 66 20 72 65 61 6c 2d 64 69 72 20 0a 09 09  (if real-dir ...
6270: 09 09 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20  .. (debug:print 
6280: 30 20 22 57 41 52 4e 49 4e 47 3a 20 64 69 72 65  0 "WARNING: dire
6290: 63 74 6f 72 79 20 22 20 72 65 61 6c 2d 64 69 72  ctory " real-dir
62a0: 20 22 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73   " does not exis
62b0: 74 22 29 0a 09 09 09 09 20 28 64 65 62 75 67 3a  t")..... (debug:
62c0: 70 72 69 6e 74 20 30 20 22 57 41 52 4e 49 4e 47  print 0 "WARNING
62d0: 3a 20 6e 6f 20 72 65 61 6c 20 64 69 72 65 63 74  : no real direct
62e0: 6f 72 79 20 63 6f 72 72 6f 73 70 6f 6e 64 69 6e  ory corrospondin
62f0: 67 20 74 6f 20 6c 69 6e 6b 20 22 20 72 75 6e 2d  g to link " run-
6300: 64 69 72 20 22 2c 20 6e 6f 74 68 69 6e 67 20 64  dir ", nothing d
6310: 6f 6e 65 22 29 29 29 0a 09 09 09 20 28 69 66 20  one"))).... (if 
6320: 28 73 79 6d 62 6f 6c 69 63 2d 6c 69 6e 6b 3f 20  (symbolic-link? 
6330: 72 75 6e 2d 64 69 72 29 0a 09 09 09 20 20 20 20  run-dir)....    
6340: 20 28 62 65 67 69 6e 0a 09 09 09 20 20 20 20 20   (begin....     
6350: 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69    (debug:print-i
6360: 6e 66 6f 20 31 20 22 52 65 6d 6f 76 69 6e 67 20  nfo 1 "Removing 
6370: 73 79 6d 6c 69 6e 6b 20 22 20 72 75 6e 2d 64 69  symlink " run-di
6380: 72 29 0a 09 09 09 20 20 20 20 20 20 20 28 68 61  r)....       (ha
6390: 6e 64 6c 65 2d 65 78 63 65 70 74 69 6f 6e 73 0a  ndle-exceptions.
63a0: 09 09 09 09 65 78 6e 0a 09 09 09 09 28 64 65 62  ....exn.....(deb
63b0: 75 67 3a 70 72 69 6e 74 20 30 20 22 45 52 52 4f  ug:print 0 "ERRO
63c0: 52 3a 20 20 46 61 69 6c 65 64 20 74 6f 20 72 65  R:  Failed to re
63d0: 6d 6f 76 65 20 73 79 6d 6c 69 6e 6b 20 22 20 72  move symlink " r
63e0: 75 6e 2d 64 69 72 20 28 28 63 6f 6e 64 69 74 69  un-dir ((conditi
63f0: 6f 6e 2d 70 72 6f 70 65 72 74 79 2d 61 63 63 65  on-property-acce
6400: 73 73 6f 72 20 27 65 78 6e 20 27 6d 65 73 73 61  ssor 'exn 'messa
6410: 67 65 29 20 65 78 6e 29 20 22 2c 20 61 74 74 65  ge) exn) ", atte
6420: 6d 70 74 69 6e 67 20 74 6f 20 63 6f 6e 74 69 6e  mpting to contin
6430: 75 65 22 29 0a 09 09 09 09 28 64 65 6c 65 74 65  ue").....(delete
6440: 2d 66 69 6c 65 20 72 75 6e 2d 64 69 72 29 29 29  -file run-dir)))
6450: 0a 09 09 09 20 20 20 20 20 28 69 66 20 28 64 69  ....     (if (di
6460: 72 65 63 74 6f 72 79 3f 20 72 75 6e 2d 64 69 72  rectory? run-dir
6470: 29 0a 09 09 09 09 20 28 69 66 20 28 3e 20 28 64  )..... (if (> (d
6480: 69 72 65 63 74 6f 72 79 2d 66 6f 6c 64 20 28 6c  irectory-fold (l
6490: 61 6d 62 64 61 20 28 66 20 78 29 28 2b 20 31 20  ambda (f x)(+ 1 
64a0: 78 29 29 20 30 20 72 75 6e 2d 64 69 72 29 20 30  x)) 0 run-dir) 0
64b0: 29 0a 09 09 09 09 20 20 20 20 20 28 64 65 62 75  ).....     (debu
64c0: 67 3a 70 72 69 6e 74 20 30 20 22 57 41 52 4e 49  g:print 0 "WARNI
64d0: 4e 47 3a 20 72 65 66 75 73 69 6e 67 20 74 6f 20  NG: refusing to 
64e0: 72 65 6d 6f 76 65 20 22 20 72 75 6e 2d 64 69 72  remove " run-dir
64f0: 20 22 20 61 73 20 69 74 20 69 73 20 6e 6f 74 20   " as it is not 
6500: 65 6d 70 74 79 22 29 0a 09 09 09 09 20 20 20 20  empty").....    
6510: 20 20 28 68 61 6e 64 6c 65 2d 65 78 63 65 70 74    (handle-except
6520: 69 6f 6e 73 0a 09 09 09 09 20 20 20 20 20 20 20  ions.....       
6530: 65 78 6e 0a 09 09 09 09 20 20 20 20 20 20 20 28  exn.....       (
6540: 64 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 45  debug:print 0 "E
6550: 52 52 4f 52 3a 20 20 46 61 69 6c 65 64 20 74 6f  RROR:  Failed to
6560: 20 72 65 6d 6f 76 65 20 64 69 72 65 63 74 6f 72   remove director
6570: 79 20 22 20 72 75 6e 2d 64 69 72 20 28 28 63 6f  y " run-dir ((co
6580: 6e 64 69 74 69 6f 6e 2d 70 72 6f 70 65 72 74 79  ndition-property
6590: 2d 61 63 63 65 73 73 6f 72 20 27 65 78 6e 20 27  -accessor 'exn '
65a0: 6d 65 73 73 61 67 65 29 20 65 78 6e 29 20 22 2c  message) exn) ",
65b0: 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 63   attempting to c
65c0: 6f 6e 74 69 6e 75 65 22 29 0a 09 09 09 09 20 20  ontinue").....  
65d0: 20 20 20 20 20 28 64 65 6c 65 74 65 2d 64 69 72       (delete-dir
65e0: 65 63 74 6f 72 79 20 72 75 6e 2d 64 69 72 29 29  ectory run-dir))
65f0: 29 0a 09 09 09 09 20 28 69 66 20 72 75 6e 2d 64  )..... (if run-d
6600: 69 72 0a 09 09 09 09 20 20 20 20 20 28 64 65 62  ir.....     (deb
6610: 75 67 3a 70 72 69 6e 74 20 30 20 22 57 41 52 4e  ug:print 0 "WARN
6620: 49 4e 47 3a 20 6e 6f 74 20 72 65 6d 6f 76 69 6e  ING: not removin
6630: 67 20 22 20 72 75 6e 2d 64 69 72 20 22 20 61 73  g " run-dir " as
6640: 20 69 74 20 65 69 74 68 65 72 20 64 6f 65 73 6e   it either doesn
6650: 27 74 20 65 78 69 73 74 20 6f 72 20 69 73 20 6e  't exist or is n
6660: 6f 74 20 61 20 73 79 6d 6c 69 6e 6b 22 29 0a 09  ot a symlink")..
6670: 09 09 09 20 20 20 20 20 28 64 65 62 75 67 3a 70  ...     (debug:p
6680: 72 69 6e 74 20 30 20 22 4e 4f 54 45 3a 20 74 68  rint 0 "NOTE: th
6690: 65 20 72 75 6e 20 64 69 72 20 66 6f 72 20 74 68  e run dir for th
66a0: 69 73 20 74 65 73 74 20 69 73 20 75 6e 64 65 66  is test is undef
66b0: 69 6e 65 64 2e 20 54 65 73 74 20 6d 61 79 20 68  ined. Test may h
66c0: 61 76 65 20 61 6c 72 65 61 64 79 20 62 65 65 6e  ave already been
66d0: 20 64 65 6c 65 74 65 64 2e 22 29 29 0a 09 09 09   deleted."))....
66e0: 09 20 29 29 29 0a 09 09 09 28 28 73 65 74 2d 73  . )))....((set-s
66f0: 74 61 74 65 2d 73 74 61 74 75 73 29 0a 09 09 09  tate-status)....
6700: 20 28 64 65 62 75 67 3a 70 72 69 6e 74 2d 69 6e   (debug:print-in
6710: 66 6f 20 32 20 22 6e 65 77 20 73 74 61 74 65 20  fo 2 "new state 
6720: 22 20 28 63 61 72 20 73 74 61 74 65 2d 73 74 61  " (car state-sta
6730: 74 75 73 29 20 22 2c 20 6e 65 77 20 73 74 61 74  tus) ", new stat
6740: 75 73 20 22 20 28 63 61 64 72 20 73 74 61 74 65  us " (cadr state
6750: 2d 73 74 61 74 75 73 29 29 0a 09 09 09 20 28 6f  -status)).... (o
6760: 70 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20 64 62  pen-run-close db
6770: 3a 74 65 73 74 2d 73 65 74 2d 73 74 61 74 65 2d  :test-set-state-
6780: 73 74 61 74 75 73 2d 62 79 2d 69 64 20 64 62 20  status-by-id db 
6790: 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 69 64 20  (db:test-get-id 
67a0: 74 65 73 74 29 20 28 63 61 72 20 73 74 61 74 65  test) (car state
67b0: 2d 73 74 61 74 75 73 29 28 63 61 64 72 20 73 74  -status)(cadr st
67c0: 61 74 65 2d 73 74 61 74 75 73 29 20 23 66 29 29  ate-status) #f))
67d0: 29 29 29 0a 09 09 20 20 28 73 6f 72 74 20 74 65  )))...  (sort te
67e0: 73 74 73 20 28 6c 61 6d 62 64 61 20 28 61 20 62  sts (lambda (a b
67f0: 29 28 6c 65 74 20 28 28 64 69 72 61 20 28 64 62  )(let ((dira (db
6800: 3a 74 65 73 74 2d 67 65 74 2d 72 75 6e 64 69 72  :test-get-rundir
6810: 20 61 29 29 0a 09 09 09 09 09 09 20 28 64 69 72   a))....... (dir
6820: 62 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 72  b (db:test-get-r
6830: 75 6e 64 69 72 20 62 29 29 29 0a 09 09 09 09 09  undir b)))......
6840: 20 20 20 20 20 28 69 66 20 28 61 6e 64 20 28 73       (if (and (s
6850: 74 72 69 6e 67 3f 20 64 69 72 61 29 28 73 74 72  tring? dira)(str
6860: 69 6e 67 3f 20 64 69 72 62 29 29 0a 09 09 09 09  ing? dirb)).....
6870: 09 09 20 28 3e 20 28 73 74 72 69 6e 67 2d 6c 65  .. (> (string-le
6880: 6e 67 74 68 20 64 69 72 61 29 28 73 74 72 69 6e  ngth dira)(strin
6890: 67 2d 6c 65 6e 67 74 68 20 64 69 72 62 29 29 0a  g-length dirb)).
68a0: 09 09 09 09 09 09 20 23 66 29 29 29 29 29 29 29  ...... #f)))))))
68b0: 0a 09 20 20 20 3b 3b 20 72 65 6d 6f 76 65 20 74  ..   ;; remove t
68c0: 68 65 20 72 75 6e 20 69 66 20 7a 65 72 6f 20 74  he run if zero t
68d0: 65 73 74 73 20 72 65 6d 61 69 6e 0a 09 20 20 20  ests remain..   
68e0: 28 69 66 20 28 65 71 3f 20 61 63 74 69 6f 6e 20  (if (eq? action 
68f0: 27 72 65 6d 6f 76 65 2d 72 75 6e 73 29 0a 09 20  'remove-runs).. 
6900: 20 20 20 20 20 20 28 6c 65 74 20 28 28 72 65 6d        (let ((rem
6910: 74 65 73 74 73 20 28 6f 70 65 6e 2d 72 75 6e 2d  tests (open-run-
6920: 63 6c 6f 73 65 20 64 62 3a 67 65 74 2d 74 65 73  close db:get-tes
6930: 74 73 2d 66 6f 72 2d 72 75 6e 20 64 62 20 28 64  ts-for-run db (d
6940: 62 3a 67 65 74 2d 76 61 6c 75 65 2d 62 79 2d 68  b:get-value-by-h
6950: 65 61 64 65 72 20 72 75 6e 20 68 65 61 64 65 72  eader run header
6960: 20 22 69 64 22 29 20 23 66 20 27 28 22 44 45 4c   "id") #f '("DEL
6970: 45 54 45 44 22 29 20 27 28 22 6e 2f 61 22 29 20  ETED") '("n/a") 
6980: 6e 6f 74 2d 69 6e 3a 20 23 74 29 29 29 0a 09 09  not-in: #t)))...
6990: 20 28 69 66 20 28 6e 75 6c 6c 3f 20 72 65 6d 74   (if (null? remt
69a0: 65 73 74 73 29 20 3b 3b 20 6e 6f 20 6d 6f 72 65  ests) ;; no more
69b0: 20 74 65 73 74 73 20 72 65 6d 61 69 6e 69 6e 67   tests remaining
69c0: 0a 09 09 20 20 20 20 20 28 6c 65 74 2a 20 28 28  ...     (let* ((
69d0: 64 70 61 72 74 73 20 20 28 73 74 72 69 6e 67 2d  dparts  (string-
69e0: 73 70 6c 69 74 20 6c 61 73 74 74 70 61 74 68 20  split lasttpath 
69f0: 22 2f 22 29 29 0a 09 09 09 20 20 20 20 28 72 75  "/"))....    (ru
6a00: 6e 70 61 74 68 20 28 63 6f 6e 63 20 22 2f 22 20  npath (conc "/" 
6a10: 28 73 74 72 69 6e 67 2d 69 6e 74 65 72 73 70 65  (string-interspe
6a20: 72 73 65 20 0a 09 09 09 09 09 09 28 74 61 6b 65  rse .......(take
6a30: 20 64 70 61 72 74 73 20 28 2d 20 28 6c 65 6e 67   dparts (- (leng
6a40: 74 68 20 64 70 61 72 74 73 29 20 31 29 29 0a 09  th dparts) 1))..
6a50: 09 09 09 09 09 22 2f 22 29 29 29 29 0a 09 09 20  ....."/"))))... 
6a60: 20 20 20 20 20 20 28 64 65 62 75 67 3a 70 72 69        (debug:pri
6a70: 6e 74 20 31 20 22 52 65 6d 6f 76 69 6e 67 20 72  nt 1 "Removing r
6a80: 75 6e 3a 20 22 20 72 75 6e 6b 65 79 20 22 20 22  un: " runkey " "
6a90: 20 28 64 62 3a 67 65 74 2d 76 61 6c 75 65 2d 62   (db:get-value-b
6aa0: 79 2d 68 65 61 64 65 72 20 72 75 6e 20 68 65 61  y-header run hea
6ab0: 64 65 72 20 22 72 75 6e 6e 61 6d 65 22 29 20 22  der "runname") "
6ac0: 20 61 6e 64 20 72 65 6c 61 74 65 64 20 72 65 63   and related rec
6ad0: 6f 72 64 22 29 0a 09 09 20 20 20 20 20 20 20 28  ord")...       (
6ae0: 6f 70 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20 64  open-run-close d
6af0: 62 3a 64 65 6c 65 74 65 2d 72 75 6e 20 64 62 20  b:delete-run db 
6b00: 72 75 6e 2d 69 64 29 0a 09 09 20 20 20 20 20 20  run-id)...      
6b10: 20 3b 3b 20 54 68 69 73 20 69 73 20 61 20 70 72   ;; This is a pr
6b20: 65 74 74 79 20 67 6f 6f 64 20 70 6c 61 63 65 20  etty good place 
6b30: 74 6f 20 70 75 72 67 65 20 6f 6c 64 20 44 45 4c  to purge old DEL
6b40: 45 54 45 44 20 74 65 73 74 73 0a 09 09 20 20 20  ETED tests...   
6b50: 20 20 20 20 28 6f 70 65 6e 2d 72 75 6e 2d 63 6c      (open-run-cl
6b60: 6f 73 65 20 64 62 3a 64 65 6c 65 74 65 2d 74 65  ose db:delete-te
6b70: 73 74 73 2d 66 6f 72 2d 72 75 6e 20 64 62 20 72  sts-for-run db r
6b80: 75 6e 2d 69 64 29 0a 09 09 20 20 20 20 20 20 20  un-id)...       
6b90: 28 6f 70 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20  (open-run-close 
6ba0: 64 62 3a 64 65 6c 65 74 65 2d 6f 6c 64 2d 64 65  db:delete-old-de
6bb0: 6c 65 74 65 64 2d 74 65 73 74 2d 72 65 63 6f 72  leted-test-recor
6bc0: 64 73 20 64 62 29 0a 09 09 20 20 20 20 20 20 20  ds db)...       
6bd0: 28 6f 70 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20  (open-run-close 
6be0: 64 62 3a 73 65 74 2d 76 61 72 20 64 62 20 22 44  db:set-var db "D
6bf0: 45 4c 45 54 45 44 5f 54 45 53 54 53 22 20 28 63  ELETED_TESTS" (c
6c00: 75 72 72 65 6e 74 2d 73 65 63 6f 6e 64 73 29 29  urrent-seconds))
6c10: 0a 09 09 20 20 20 20 20 20 20 3b 3b 20 6e 65 65  ...       ;; nee
6c20: 64 20 74 6f 20 66 69 67 75 72 65 20 6f 75 74 20  d to figure out 
6c30: 74 68 65 20 70 61 74 68 20 74 6f 20 74 68 65 20  the path to the 
6c40: 72 75 6e 20 64 69 72 20 61 6e 64 20 72 65 6d 6f  run dir and remo
6c50: 76 65 20 69 74 20 69 66 20 65 6d 70 74 79 0a 09  ve it if empty..
6c60: 09 20 20 20 20 20 20 20 3b 3b 20 20 20 20 28 69  .       ;;    (i
6c70: 66 20 28 6e 75 6c 6c 3f 20 28 67 6c 6f 62 20 28  f (null? (glob (
6c80: 63 6f 6e 63 20 72 75 6e 70 61 74 68 20 22 2f 2a  conc runpath "/*
6c90: 22 29 29 29 0a 09 09 20 20 20 20 20 20 20 3b 3b  ")))...       ;;
6ca0: 20 20 20 20 20 20 20 20 28 62 65 67 69 6e 0a 09          (begin..
6cb0: 09 20 20 20 20 20 20 20 3b 3b 20 09 20 28 64 65  .       ;; . (de
6cc0: 62 75 67 3a 70 72 69 6e 74 20 31 20 22 52 65 6d  bug:print 1 "Rem
6cd0: 6f 76 69 6e 67 20 72 75 6e 20 64 69 72 20 22 20  oving run dir " 
6ce0: 72 75 6e 70 61 74 68 29 0a 09 09 20 20 20 20 20  runpath)...     
6cf0: 20 20 3b 3b 20 09 20 28 73 79 73 74 65 6d 20 28    ;; . (system (
6d00: 63 6f 6e 63 20 22 72 6d 64 69 72 20 2d 70 20 22  conc "rmdir -p "
6d10: 20 72 75 6e 70 61 74 68 29 29 29 29 0a 09 09 20   runpath))))... 
6d20: 20 20 20 20 20 20 29 29 29 29 29 0a 09 20 29 29        ))))).. ))
6d30: 0a 20 20 20 20 20 72 75 6e 73 29 29 0a 20 20 23  .     runs)).  #
6d40: 74 29 0a 0a 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  t)..;;==========
6d50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6d60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6d70: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6d80: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20  ============.;; 
6d90: 52 6f 75 74 69 6e 65 73 20 66 6f 72 20 6d 61 6e  Routines for man
6da0: 69 70 75 6c 61 74 69 6e 67 20 72 75 6e 73 0a 3b  ipulating runs.;
6db0: 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ;===============
6dc0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6dd0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6de0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
6df0: 3d 3d 3d 3d 3d 3d 3d 0a 0a 3b 3b 20 53 69 6e 63  =======..;; Sinc
6e00: 65 20 6d 61 6e 79 20 63 61 6c 6c 73 20 74 6f 20  e many calls to 
6e10: 61 20 72 75 6e 20 72 65 71 75 69 72 65 20 70 72  a run require pr
6e20: 65 74 74 79 20 6d 75 63 68 20 74 68 65 20 73 61  etty much the sa
6e30: 6d 65 20 73 65 74 75 70 20 0a 3b 3b 20 74 68 69  me setup .;; thi
6e40: 73 20 77 72 61 70 70 65 72 20 69 73 20 75 73 65  s wrapper is use
6e50: 64 20 74 6f 20 72 65 64 75 63 65 20 74 68 65 20  d to reduce the 
6e60: 72 65 70 6c 69 63 61 74 69 6f 6e 20 6f 66 20 63  replication of c
6e70: 6f 64 65 0a 28 64 65 66 69 6e 65 20 28 67 65 6e  ode.(define (gen
6e80: 65 72 61 6c 2d 72 75 6e 2d 63 61 6c 6c 20 73 77  eral-run-call sw
6e90: 69 74 63 68 6e 61 6d 65 20 61 63 74 69 6f 6e 2d  itchname action-
6ea0: 64 65 73 63 20 70 72 6f 63 29 0a 20 20 28 6c 65  desc proc).  (le
6eb0: 74 20 28 28 72 75 6e 6e 61 6d 65 20 28 61 72 67  t ((runname (arg
6ec0: 73 3a 67 65 74 2d 61 72 67 20 22 3a 72 75 6e 6e  s:get-arg ":runn
6ed0: 61 6d 65 22 29 29 0a 09 28 74 61 72 67 65 74 20  ame"))..(target 
6ee0: 20 28 69 66 20 28 61 72 67 73 3a 67 65 74 2d 61   (if (args:get-a
6ef0: 72 67 20 22 2d 74 61 72 67 65 74 22 29 0a 09 09  rg "-target")...
6f00: 20 20 20 20 20 28 61 72 67 73 3a 67 65 74 2d 61       (args:get-a
6f10: 72 67 20 22 2d 74 61 72 67 65 74 22 29 0a 09 09  rg "-target")...
6f20: 20 20 20 20 20 28 61 72 67 73 3a 67 65 74 2d 61       (args:get-a
6f30: 72 67 20 22 2d 72 65 71 74 61 72 67 22 29 29 29  rg "-reqtarg")))
6f40: 0a 09 28 74 68 31 20 20 20 20 20 23 66 29 29 0a  ..(th1     #f)).
6f50: 20 20 20 20 28 63 6f 6e 64 0a 20 20 20 20 20 28      (cond.     (
6f60: 28 6e 6f 74 20 74 61 72 67 65 74 29 0a 20 20 20  (not target).   
6f70: 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74 20     (debug:print 
6f80: 30 20 22 45 52 52 4f 52 3a 20 4d 69 73 73 69 6e  0 "ERROR: Missin
6f90: 67 20 72 65 71 75 69 72 65 64 20 70 61 72 61 6d  g required param
6fa0: 65 74 65 72 20 66 6f 72 20 22 20 73 77 69 74 63  eter for " switc
6fb0: 68 6e 61 6d 65 20 22 2c 20 79 6f 75 20 6d 75 73  hname ", you mus
6fc0: 74 20 73 70 65 63 69 66 79 20 74 68 65 20 74 61  t specify the ta
6fd0: 72 67 65 74 20 77 69 74 68 20 2d 74 61 72 67 65  rget with -targe
6fe0: 74 22 29 0a 20 20 20 20 20 20 28 65 78 69 74 20  t").      (exit 
6ff0: 33 29 29 0a 20 20 20 20 20 28 28 6e 6f 74 20 72  3)).     ((not r
7000: 75 6e 6e 61 6d 65 29 0a 20 20 20 20 20 20 28 64  unname).      (d
7010: 65 62 75 67 3a 70 72 69 6e 74 20 30 20 22 45 52  ebug:print 0 "ER
7020: 52 4f 52 3a 20 4d 69 73 73 69 6e 67 20 72 65 71  ROR: Missing req
7030: 75 69 72 65 64 20 70 61 72 61 6d 65 74 65 72 20  uired parameter 
7040: 66 6f 72 20 22 20 73 77 69 74 63 68 6e 61 6d 65  for " switchname
7050: 20 22 2c 20 79 6f 75 20 6d 75 73 74 20 73 70 65   ", you must spe
7060: 63 69 66 79 20 74 68 65 20 72 75 6e 20 6e 61 6d  cify the run nam
7070: 65 20 77 69 74 68 20 3a 72 75 6e 6e 61 6d 65 20  e with :runname 
7080: 72 75 6e 6e 61 6d 65 22 29 0a 20 20 20 20 20 20  runname").      
7090: 28 65 78 69 74 20 33 29 29 0a 20 20 20 20 20 28  (exit 3)).     (
70a0: 65 6c 73 65 0a 20 20 20 20 20 20 28 6c 65 74 20  else.      (let 
70b0: 28 28 64 62 20 20 20 23 66 29 0a 09 20 20 20 20  ((db   #f)..    
70c0: 28 6b 65 79 73 20 23 66 29 29 0a 09 28 69 66 20  (keys #f))..(if 
70d0: 28 6e 6f 74 20 28 73 65 74 75 70 2d 66 6f 72 2d  (not (setup-for-
70e0: 72 75 6e 29 29 0a 09 20 20 20 20 28 62 65 67 69  run))..    (begi
70f0: 6e 20 0a 09 20 20 20 20 20 20 28 64 65 62 75 67  n ..      (debug
7100: 3a 70 72 69 6e 74 20 30 20 22 46 61 69 6c 65 64  :print 0 "Failed
7110: 20 74 6f 20 73 65 74 75 70 2c 20 65 78 69 74 69   to setup, exiti
7120: 6e 67 22 29 0a 09 20 20 20 20 20 20 28 65 78 69  ng")..      (exi
7130: 74 20 31 29 29 29 0a 09 28 69 66 20 28 61 72 67  t 1)))..(if (arg
7140: 73 3a 67 65 74 2d 61 72 67 20 22 2d 73 65 72 76  s:get-arg "-serv
7150: 65 72 22 29 0a 09 20 20 20 20 28 6f 70 65 6e 2d  er")..    (open-
7160: 72 75 6e 2d 63 6c 6f 73 65 20 73 65 72 76 65 72  run-close server
7170: 3a 73 74 61 72 74 20 64 62 20 28 61 72 67 73 3a  :start db (args:
7180: 67 65 74 2d 61 72 67 20 22 2d 73 65 72 76 65 72  get-arg "-server
7190: 22 29 29 29 0a 20 09 20 20 20 20 3b 3b 20 28 69  "))). .    ;; (i
71a0: 66 20 28 6e 6f 74 20 28 6f 72 20 28 61 72 67 73  f (not (or (args
71b0: 3a 67 65 74 2d 61 72 67 20 22 2d 72 75 6e 61 6c  :get-arg "-runal
71c0: 6c 22 29 20 20 20 20 20 3b 3b 20 72 75 6e 61 6c  l")     ;; runal
71d0: 6c 20 61 6e 64 20 72 75 6e 74 65 73 74 73 20 61  l and runtests a
71e0: 72 65 20 61 6c 6c 6f 77 65 64 20 74 6f 20 62 65  re allowed to be
71f0: 20 73 65 72 76 65 72 73 0a 20 09 20 20 20 20 3b   servers. .    ;
7200: 3b 20 20 20 20 20 09 20 28 61 72 67 73 3a 67 65  ;     . (args:ge
7210: 74 2d 61 72 67 20 22 2d 72 75 6e 74 65 73 74 73  t-arg "-runtests
7220: 22 29 29 29 0a 09 20 20 20 20 3b 3b 20 20 20 20  ")))..    ;;    
7230: 20 28 63 6c 69 65 6e 74 3a 73 65 74 75 70 29 20   (client:setup) 
7240: 3b 3b 20 54 68 69 73 20 69 73 20 61 20 64 75 70  ;; This is a dup
7250: 6c 69 63 61 74 65 20 73 74 61 72 74 75 70 21 21  licate startup!!
7260: 21 3f 3f 3f 20 42 55 47 3f 0a 09 20 20 20 20 3b  !??? BUG?..    ;
7270: 3b 20 20 20 20 20 29 29 0a 09 28 73 65 74 21 20  ;     ))..(set! 
7280: 6b 65 79 73 20 28 6f 70 65 6e 2d 72 75 6e 2d 63  keys (open-run-c
7290: 6c 6f 73 65 20 64 62 3a 67 65 74 2d 6b 65 79 73  lose db:get-keys
72a0: 20 64 62 29 29 0a 09 3b 3b 20 68 61 76 65 20 65   db))..;; have e
72b0: 6e 6f 75 67 68 20 74 6f 20 70 72 6f 63 65 73 73  nough to process
72c0: 20 2d 74 61 72 67 65 74 20 6f 72 20 2d 72 65 71   -target or -req
72d0: 74 61 72 67 20 68 65 72 65 0a 09 28 69 66 20 28  targ here..(if (
72e0: 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 72  args:get-arg "-r
72f0: 65 71 74 61 72 67 22 29 0a 09 20 20 20 20 28 6c  eqtarg")..    (l
7300: 65 74 2a 20 28 28 72 75 6e 63 6f 6e 66 69 67 66  et* ((runconfigf
7310: 20 28 63 6f 6e 63 20 20 2a 74 6f 70 70 61 74 68   (conc  *toppath
7320: 2a 20 22 2f 72 75 6e 63 6f 6e 66 69 67 73 2e 63  * "/runconfigs.c
7330: 6f 6e 66 69 67 22 29 29 20 3b 3b 20 44 4f 20 4e  onfig")) ;; DO N
7340: 4f 54 20 45 56 41 4c 55 41 54 45 20 41 4c 4c 20  OT EVALUATE ALL 
7350: 0a 09 09 20 20 20 28 72 75 6e 63 6f 6e 66 69 67  ...   (runconfig
7360: 20 20 28 72 65 61 64 2d 63 6f 6e 66 69 67 20 72    (read-config r
7370: 75 6e 63 6f 6e 66 69 67 66 20 23 66 20 23 74 20  unconfigf #f #t 
7380: 65 6e 76 69 72 6f 6e 2d 70 61 74 74 3a 20 23 66  environ-patt: #f
7390: 29 29 29 0a 09 20 20 20 20 20 20 28 69 66 20 28  )))..      (if (
73a0: 68 61 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64  hash-table-ref/d
73b0: 65 66 61 75 6c 74 20 72 75 6e 63 6f 6e 66 69 67  efault runconfig
73c0: 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22   (args:get-arg "
73d0: 2d 72 65 71 74 61 72 67 22 29 20 23 66 29 0a 09  -reqtarg") #f)..
73e0: 09 20 20 28 6b 65 79 73 3a 74 61 72 67 65 74 2d  .  (keys:target-
73f0: 73 65 74 2d 61 72 67 73 20 6b 65 79 73 20 28 61  set-args keys (a
7400: 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d 72 65  rgs:get-arg "-re
7410: 71 74 61 72 67 22 29 20 61 72 67 73 3a 61 72 67  qtarg") args:arg
7420: 2d 68 61 73 68 29 0a 09 09 20 20 28 62 65 67 69  -hash)...  (begi
7430: 6e 0a 09 09 20 20 20 20 28 64 65 62 75 67 3a 70  n...    (debug:p
7440: 72 69 6e 74 20 30 20 22 45 52 52 4f 52 3a 20 5b  rint 0 "ERROR: [
7450: 22 20 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20  " (args:get-arg 
7460: 22 2d 72 65 71 74 61 72 67 22 29 20 22 5d 20 6e  "-reqtarg") "] n
7470: 6f 74 20 66 6f 75 6e 64 20 69 6e 20 22 20 72 75  ot found in " ru
7480: 6e 63 6f 6e 66 69 67 66 29 0a 09 09 20 20 20 20  nconfigf)...    
7490: 28 69 66 20 64 62 20 28 73 71 6c 69 74 65 33 3a  (if db (sqlite3:
74a0: 66 69 6e 61 6c 69 7a 65 21 20 64 62 29 29 0a 09  finalize! db))..
74b0: 09 20 20 20 20 28 65 78 69 74 20 31 29 29 29 29  .    (exit 1))))
74c0: 0a 09 20 20 20 20 28 69 66 20 28 61 72 67 73 3a  ..    (if (args:
74d0: 67 65 74 2d 61 72 67 20 22 2d 74 61 72 67 65 74  get-arg "-target
74e0: 22 29 0a 09 09 28 6b 65 79 73 3a 74 61 72 67 65  ")...(keys:targe
74f0: 74 2d 73 65 74 2d 61 72 67 73 20 6b 65 79 73 20  t-set-args keys 
7500: 28 61 72 67 73 3a 67 65 74 2d 61 72 67 20 22 2d  (args:get-arg "-
7510: 74 61 72 67 65 74 22 20 61 72 67 73 3a 61 72 67  target" args:arg
7520: 2d 68 61 73 68 29 20 61 72 67 73 3a 61 72 67 2d  -hash) args:arg-
7530: 68 61 73 68 29 29 29 0a 09 28 69 66 20 28 6e 6f  hash)))..(if (no
7540: 74 20 28 63 61 72 20 2a 63 6f 6e 66 69 67 69 6e  t (car *configin
7550: 66 6f 2a 29 29 0a 09 20 20 20 20 28 62 65 67 69  fo*))..    (begi
7560: 6e 0a 09 20 20 20 20 20 20 28 64 65 62 75 67 3a  n..      (debug:
7570: 70 72 69 6e 74 20 30 20 22 45 52 52 4f 52 3a 20  print 0 "ERROR: 
7580: 41 74 74 65 6d 70 74 65 64 20 74 6f 20 22 20 61  Attempted to " a
7590: 63 74 69 6f 6e 2d 64 65 73 63 20 22 20 62 75 74  ction-desc " but
75a0: 20 72 75 6e 20 61 72 65 61 20 63 6f 6e 66 69 67   run area config
75b0: 20 66 69 6c 65 20 6e 6f 74 20 66 6f 75 6e 64 22   file not found"
75c0: 29 0a 09 20 20 20 20 20 20 28 65 78 69 74 20 31  )..      (exit 1
75d0: 29 29 0a 09 20 20 20 20 3b 3b 20 45 78 74 72 61  ))..    ;; Extra
75e0: 63 74 20 6f 75 74 20 73 74 75 66 66 20 6e 65 65  ct out stuff nee
75f0: 64 65 64 20 69 6e 20 6d 6f 73 74 20 6f 72 20 6d  ded in most or m
7600: 61 6e 79 20 63 61 6c 6c 73 0a 09 20 20 20 20 3b  any calls..    ;
7610: 3b 20 68 65 72 65 20 74 68 65 6e 20 63 61 6c 6c  ; here then call
7620: 20 70 72 6f 63 0a 09 20 20 20 20 28 6c 65 74 2a   proc..    (let*
7630: 20 28 28 6b 65 79 6e 61 6d 65 73 20 20 20 28 6d   ((keynames   (m
7640: 61 70 20 6b 65 79 3a 67 65 74 2d 66 69 65 6c 64  ap key:get-field
7650: 6e 61 6d 65 20 6b 65 79 73 29 29 0a 09 09 20 20  name keys))...  
7660: 20 28 6b 65 79 76 61 6c 6c 73 74 20 20 28 6b 65   (keyvallst  (ke
7670: 79 73 2d 3e 76 61 6c 6c 69 73 74 20 6b 65 79 73  ys->vallist keys
7680: 20 23 74 29 29 29 0a 09 20 20 20 20 20 20 28 70   #t)))..      (p
7690: 72 6f 63 20 74 61 72 67 65 74 20 72 75 6e 6e 61  roc target runna
76a0: 6d 65 20 6b 65 79 73 20 6b 65 79 6e 61 6d 65 73  me keys keynames
76b0: 20 6b 65 79 76 61 6c 6c 73 74 29 29 29 0a 09 28   keyvallst)))..(
76c0: 69 66 20 74 68 31 20 28 74 68 72 65 61 64 2d 6a  if th1 (thread-j
76d0: 6f 69 6e 21 20 74 68 31 29 29 0a 09 28 69 66 20  oin! th1))..(if 
76e0: 64 62 20 28 73 71 6c 69 74 65 33 3a 66 69 6e 61  db (sqlite3:fina
76f0: 6c 69 7a 65 21 20 64 62 29 29 0a 09 28 73 65 74  lize! db))..(set
7700: 21 20 2a 64 69 64 73 6f 6d 65 74 68 69 6e 67 2a  ! *didsomething*
7710: 20 23 74 29 29 29 29 29 29 0a 0a 3b 3b 3d 3d 3d   #t))))))..;;===
7720: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7730: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7740: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7750: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7760: 3d 3d 3d 0a 3b 3b 20 4c 6f 63 6b 2f 75 6e 6c 6f  ===.;; Lock/unlo
7770: 63 6b 20 72 75 6e 73 0a 3b 3b 3d 3d 3d 3d 3d 3d  ck runs.;;======
7780: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7790: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
77a0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
77b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
77c0: 0a 0a 28 64 65 66 69 6e 65 20 28 72 75 6e 73 3a  ..(define (runs:
77d0: 68 61 6e 64 6c 65 2d 6c 6f 63 6b 69 6e 67 20 74  handle-locking t
77e0: 61 72 67 65 74 20 6b 65 79 73 20 72 75 6e 6e 61  arget keys runna
77f0: 6d 65 20 6c 6f 63 6b 20 75 6e 6c 6f 63 6b 20 75  me lock unlock u
7800: 73 65 72 29 0a 20 20 28 6c 65 74 2a 20 28 28 64  ser).  (let* ((d
7810: 62 20 20 20 20 20 20 20 23 66 29 0a 09 20 28 72  b       #f).. (r
7820: 75 6e 64 61 74 20 20 20 28 6f 70 65 6e 2d 72 75  undat   (open-ru
7830: 6e 2d 63 6c 6f 73 65 20 72 75 6e 73 3a 67 65 74  n-close runs:get
7840: 2d 72 75 6e 73 2d 62 79 2d 70 61 74 74 20 64 62  -runs-by-patt db
7850: 20 6b 65 79 73 20 72 75 6e 6e 61 6d 65 29 29 0a   keys runname)).
7860: 09 20 28 68 65 61 64 65 72 20 20 20 28 76 65 63  . (header   (vec
7870: 74 6f 72 2d 72 65 66 20 72 75 6e 64 61 74 20 30  tor-ref rundat 0
7880: 29 29 0a 09 20 28 72 75 6e 73 20 20 20 20 20 28  )).. (runs     (
7890: 76 65 63 74 6f 72 2d 72 65 66 20 72 75 6e 64 61  vector-ref runda
78a0: 74 20 31 29 29 29 0a 20 20 20 20 28 66 6f 72 2d  t 1))).    (for-
78b0: 65 61 63 68 20 28 6c 61 6d 62 64 61 20 28 72 75  each (lambda (ru
78c0: 6e 29 0a 09 09 28 6c 65 74 20 28 28 72 75 6e 2d  n)...(let ((run-
78d0: 69 64 20 28 64 62 3a 67 65 74 2d 76 61 6c 75 65  id (db:get-value
78e0: 2d 62 79 2d 68 65 61 64 65 72 20 72 75 6e 20 68  -by-header run h
78f0: 65 61 64 65 72 20 22 69 64 22 29 29 29 0a 09 09  eader "id")))...
7900: 20 20 28 69 66 20 28 6f 72 20 6c 6f 63 6b 0a 09    (if (or lock..
7910: 09 09 20 20 28 61 6e 64 20 75 6e 6c 6f 63 6b 0a  ..  (and unlock.
7920: 09 09 09 20 20 20 20 20 20 20 28 62 65 67 69 6e  ...       (begin
7930: 0a 09 09 09 09 20 28 70 72 69 6e 74 20 22 44 6f  ..... (print "Do
7940: 20 79 6f 75 20 72 65 61 6c 6c 79 20 77 69 73 68   you really wish
7950: 20 74 6f 20 75 6e 6c 6f 63 6b 20 72 75 6e 20 22   to unlock run "
7960: 20 72 75 6e 2d 69 64 20 22 3f 5c 6e 20 20 20 79   run-id "?\n   y
7970: 2f 6e 3a 20 22 29 0a 09 09 09 09 20 28 65 71 75  /n: ")..... (equ
7980: 61 6c 3f 20 22 79 22 20 28 72 65 61 64 2d 6c 69  al? "y" (read-li
7990: 6e 65 29 29 29 29 29 0a 09 09 20 20 20 20 20 20  ne)))))...      
79a0: 28 6f 70 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20  (open-run-close 
79b0: 64 62 3a 6c 6f 63 6b 2f 75 6e 6c 6f 63 6b 2d 72  db:lock/unlock-r
79c0: 75 6e 20 64 62 20 72 75 6e 2d 69 64 20 6c 6f 63  un db run-id loc
79d0: 6b 20 75 6e 6c 6f 63 6b 20 75 73 65 72 29 0a 09  k unlock user)..
79e0: 09 20 20 20 20 20 20 28 64 65 62 75 67 3a 70 72  .      (debug:pr
79f0: 69 6e 74 2d 69 6e 66 6f 20 30 20 22 53 6b 69 70  int-info 0 "Skip
7a00: 70 69 6e 67 20 6c 6f 63 6b 2f 75 6e 6c 6f 63 6b  ping lock/unlock
7a10: 20 6f 6e 20 22 20 72 75 6e 2d 69 64 29 29 29 29   on " run-id))))
7a20: 0a 09 20 20 20 20 20 20 72 75 6e 73 29 29 29 0a  ..      runs))).
7a30: 3b 3b 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ;;==============
7a40: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7a50: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7a60: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7a70: 3d 3d 3d 3d 3d 3d 3d 3d 0a 3b 3b 20 52 6f 6c 6c  ========.;; Roll
7a80: 75 70 20 72 75 6e 73 0a 3b 3b 3d 3d 3d 3d 3d 3d  up runs.;;======
7a90: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7aa0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7ab0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7ac0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d  ================
7ad0: 0a 0a 3b 3b 20 55 70 64 61 74 65 20 74 68 65 20  ..;; Update the 
7ae0: 74 65 73 74 5f 6d 65 74 61 20 74 61 62 6c 65 20  test_meta table 
7af0: 66 6f 72 20 74 68 69 73 20 74 65 73 74 0a 28 64  for this test.(d
7b00: 65 66 69 6e 65 20 28 72 75 6e 73 3a 75 70 64 61  efine (runs:upda
7b10: 74 65 2d 74 65 73 74 5f 6d 65 74 61 20 74 65 73  te-test_meta tes
7b20: 74 2d 6e 61 6d 65 20 74 65 73 74 2d 63 6f 6e 66  t-name test-conf
7b30: 29 0a 20 20 28 6c 65 74 20 28 28 63 75 72 72 72  ).  (let ((currr
7b40: 65 63 6f 72 64 20 28 63 64 62 3a 72 65 6d 6f 74  ecord (cdb:remot
7b50: 65 2d 72 75 6e 20 64 62 3a 74 65 73 74 6d 65 74  e-run db:testmet
7b60: 61 2d 67 65 74 2d 72 65 63 6f 72 64 20 23 66 20  a-get-record #f 
7b70: 74 65 73 74 2d 6e 61 6d 65 29 29 29 0a 20 20 20  test-name))).   
7b80: 20 28 69 66 20 28 6e 6f 74 20 63 75 72 72 72 65   (if (not currre
7b90: 63 6f 72 64 29 0a 09 28 62 65 67 69 6e 0a 09 20  cord)..(begin.. 
7ba0: 20 28 73 65 74 21 20 63 75 72 72 72 65 63 6f 72   (set! currrecor
7bb0: 64 20 28 6d 61 6b 65 2d 76 65 63 74 6f 72 20 31  d (make-vector 1
7bc0: 30 20 23 66 29 29 0a 09 20 20 28 63 64 62 3a 72  0 #f))..  (cdb:r
7bd0: 65 6d 6f 74 65 2d 72 75 6e 20 64 62 3a 74 65 73  emote-run db:tes
7be0: 74 6d 65 74 61 2d 61 64 64 2d 72 65 63 6f 72 64  tmeta-add-record
7bf0: 20 23 66 20 74 65 73 74 2d 6e 61 6d 65 29 29 29   #f test-name)))
7c00: 0a 20 20 20 20 28 66 6f 72 2d 65 61 63 68 20 0a  .    (for-each .
7c10: 20 20 20 20 20 28 6c 61 6d 62 64 61 20 28 6b 65       (lambda (ke
7c20: 79 29 0a 20 20 20 20 20 20 20 28 6c 65 74 2a 20  y).       (let* 
7c30: 28 28 69 64 78 20 28 63 61 64 72 20 6b 65 79 29  ((idx (cadr key)
7c40: 29 0a 09 20 20 20 20 20 20 28 66 6c 64 20 28 63  )..      (fld (c
7c50: 61 72 20 20 6b 65 79 29 29 0a 09 20 20 20 20 20  ar  key))..     
7c60: 20 28 76 61 6c 20 28 63 6f 6e 66 69 67 2d 6c 6f   (val (config-lo
7c70: 6f 6b 75 70 20 74 65 73 74 2d 63 6f 6e 66 20 22  okup test-conf "
7c80: 74 65 73 74 5f 6d 65 74 61 22 20 66 6c 64 29 29  test_meta" fld))
7c90: 29 0a 09 20 3b 3b 20 28 64 65 62 75 67 3a 70 72  ).. ;; (debug:pr
7ca0: 69 6e 74 20 35 20 22 69 64 78 3a 20 22 20 69 64  int 5 "idx: " id
7cb0: 78 20 22 20 66 6c 64 3a 20 22 20 66 6c 64 20 22  x " fld: " fld "
7cc0: 20 76 61 6c 3a 20 22 20 76 61 6c 29 0a 09 20 28   val: " val).. (
7cd0: 69 66 20 28 61 6e 64 20 76 61 6c 20 28 6e 6f 74  if (and val (not
7ce0: 20 28 65 71 75 61 6c 3f 20 28 76 65 63 74 6f 72   (equal? (vector
7cf0: 2d 72 65 66 20 63 75 72 72 72 65 63 6f 72 64 20  -ref currrecord 
7d00: 69 64 78 29 20 76 61 6c 29 29 29 0a 09 20 20 20  idx) val)))..   
7d10: 20 20 28 62 65 67 69 6e 0a 09 20 20 20 20 20 20    (begin..      
7d20: 20 28 70 72 69 6e 74 20 22 55 70 64 61 74 69 6e   (print "Updatin
7d30: 67 20 22 20 74 65 73 74 2d 6e 61 6d 65 20 22 20  g " test-name " 
7d40: 22 20 66 6c 64 20 22 20 74 6f 20 22 20 76 61 6c  " fld " to " val
7d50: 29 0a 09 20 20 20 20 20 20 20 28 63 64 62 3a 72  )..       (cdb:r
7d60: 65 6d 6f 74 65 2d 72 75 6e 20 64 62 3a 74 65 73  emote-run db:tes
7d70: 74 6d 65 74 61 2d 75 70 64 61 74 65 2d 66 69 65  tmeta-update-fie
7d80: 6c 64 20 23 66 20 74 65 73 74 2d 6e 61 6d 65 20  ld #f test-name 
7d90: 66 6c 64 20 76 61 6c 29 29 29 29 29 0a 20 20 20  fld val))))).   
7da0: 20 20 27 28 28 22 61 75 74 68 6f 72 22 20 32 29    '(("author" 2)
7db0: 28 22 6f 77 6e 65 72 22 20 33 29 28 22 64 65 73  ("owner" 3)("des
7dc0: 63 72 69 70 74 69 6f 6e 22 20 34 29 28 22 72 65  cription" 4)("re
7dd0: 76 69 65 77 65 64 22 20 35 29 28 22 74 61 67 73  viewed" 5)("tags
7de0: 22 20 39 29 29 29 29 29 0a 0a 3b 3b 20 55 70 64  " 9)))))..;; Upd
7df0: 61 74 65 20 74 65 73 74 5f 6d 65 74 61 20 66 6f  ate test_meta fo
7e00: 72 20 61 6c 6c 20 74 65 73 74 73 0a 28 64 65 66  r all tests.(def
7e10: 69 6e 65 20 28 72 75 6e 73 3a 75 70 64 61 74 65  ine (runs:update
7e20: 2d 61 6c 6c 2d 74 65 73 74 5f 6d 65 74 61 20 64  -all-test_meta d
7e30: 62 29 0a 20 20 28 6c 65 74 20 28 28 74 65 73 74  b).  (let ((test
7e40: 2d 6e 61 6d 65 73 20 28 67 65 74 2d 61 6c 6c 2d  -names (get-all-
7e50: 6c 65 67 61 6c 2d 74 65 73 74 73 29 29 29 0a 20  legal-tests))). 
7e60: 20 20 20 28 66 6f 72 2d 65 61 63 68 20 0a 20 20     (for-each .  
7e70: 20 20 20 28 6c 61 6d 62 64 61 20 28 74 65 73 74     (lambda (test
7e80: 2d 6e 61 6d 65 29 0a 20 20 20 20 20 20 20 28 6c  -name).       (l
7e90: 65 74 2a 20 28 28 74 65 73 74 2d 70 61 74 68 20  et* ((test-path 
7ea0: 20 20 20 28 63 6f 6e 63 20 2a 74 6f 70 70 61 74     (conc *toppat
7eb0: 68 2a 20 22 2f 74 65 73 74 73 2f 22 20 74 65 73  h* "/tests/" tes
7ec0: 74 2d 6e 61 6d 65 29 29 0a 09 20 20 20 20 20 20  t-name))..      
7ed0: 28 74 65 73 74 2d 63 6f 6e 66 69 67 66 20 28 63  (test-configf (c
7ee0: 6f 6e 63 20 74 65 73 74 2d 70 61 74 68 20 22 2f  onc test-path "/
7ef0: 74 65 73 74 63 6f 6e 66 69 67 22 29 29 0a 09 20  testconfig")).. 
7f00: 20 20 20 20 20 28 74 65 73 74 65 78 69 73 74 73       (testexists
7f10: 20 20 20 28 61 6e 64 20 28 66 69 6c 65 2d 65 78     (and (file-ex
7f20: 69 73 74 73 3f 20 74 65 73 74 2d 63 6f 6e 66 69  ists? test-confi
7f30: 67 66 29 28 66 69 6c 65 2d 72 65 61 64 2d 61 63  gf)(file-read-ac
7f40: 63 65 73 73 3f 20 74 65 73 74 2d 63 6f 6e 66 69  cess? test-confi
7f50: 67 66 29 29 29 0a 09 20 20 20 20 20 20 3b 3b 20  gf)))..      ;; 
7f60: 72 65 61 64 20 63 6f 6e 66 69 67 73 20 77 69 74  read configs wit
7f70: 68 20 74 72 69 63 6b 73 20 74 75 72 6e 65 64 20  h tricks turned 
7f80: 6f 66 66 20 28 69 2e 65 2e 20 6e 6f 20 73 79 73  off (i.e. no sys
7f90: 74 65 6d 29 0a 09 20 20 20 20 20 20 28 74 65 73  tem)..      (tes
7fa0: 74 2d 63 6f 6e 66 20 20 20 20 28 69 66 20 74 65  t-conf    (if te
7fb0: 73 74 65 78 69 73 74 73 20 28 72 65 61 64 2d 63  stexists (read-c
7fc0: 6f 6e 66 69 67 20 74 65 73 74 2d 63 6f 6e 66 69  onfig test-confi
7fd0: 67 66 20 23 66 20 23 66 29 28 6d 61 6b 65 2d 68  gf #f #f)(make-h
7fe0: 61 73 68 2d 74 61 62 6c 65 29 29 29 29 0a 09 20  ash-table)))).. 
7ff0: 3b 3b 20 75 73 65 20 74 68 65 20 6f 70 65 6e 2d  ;; use the open-
8000: 72 75 6e 2d 63 6c 6f 73 65 20 69 6e 73 74 65 61  run-close instea
8010: 64 20 6f 66 20 70 61 73 73 69 6e 67 20 69 6e 20  d of passing in 
8020: 64 62 0a 09 20 28 72 75 6e 73 3a 75 70 64 61 74  db.. (runs:updat
8030: 65 2d 74 65 73 74 5f 6d 65 74 61 20 74 65 73 74  e-test_meta test
8040: 2d 6e 61 6d 65 20 74 65 73 74 2d 63 6f 6e 66 29  -name test-conf)
8050: 29 29 0a 20 20 20 20 20 74 65 73 74 2d 6e 61 6d  )).     test-nam
8060: 65 73 29 29 29 0a 0a 3b 3b 20 54 68 69 73 20 63  es)))..;; This c
8070: 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79 20 62 65  ould probably be
8080: 20 72 65 66 61 63 74 6f 72 65 64 20 69 6e 74 6f   refactored into
8090: 20 6f 6e 65 20 63 6f 6d 70 6c 65 78 20 71 75 65   one complex que
80a0: 72 79 20 2e 2e 2e 0a 28 64 65 66 69 6e 65 20 28  ry ....(define (
80b0: 72 75 6e 73 3a 72 6f 6c 6c 75 70 2d 72 75 6e 20  runs:rollup-run 
80c0: 6b 65 79 73 20 6b 65 79 76 61 6c 6c 73 74 20 72  keys keyvallst r
80d0: 75 6e 6e 61 6d 65 20 75 73 65 72 29 20 3b 3b 20  unname user) ;; 
80e0: 77 61 73 20 74 61 72 67 65 74 2c 20 6e 6f 77 20  was target, now 
80f0: 6b 65 79 76 61 6c 6c 73 74 0a 20 20 28 64 65 62  keyvallst.  (deb
8100: 75 67 3a 70 72 69 6e 74 20 34 20 22 72 75 6e 73  ug:print 4 "runs
8110: 3a 72 6f 6c 6c 75 70 2d 72 75 6e 2c 20 6b 65 79  :rollup-run, key
8120: 73 3a 20 22 20 6b 65 79 73 20 22 20 6b 65 79 76  s: " keys " keyv
8130: 61 6c 6c 73 74 3a 20 22 20 6b 65 79 76 61 6c 6c  allst: " keyvall
8140: 73 74 20 22 20 3a 72 75 6e 6e 61 6d 65 20 22 20  st " :runname " 
8150: 72 75 6e 6e 61 6d 65 20 22 20 75 73 65 72 3a 20  runname " user: 
8160: 22 20 75 73 65 72 29 0a 20 20 28 6c 65 74 2a 20  " user).  (let* 
8170: 28 28 64 62 20 20 20 20 20 20 20 20 20 20 20 20  ((db            
8180: 20 20 23 66 29 20 3b 3b 20 28 6b 65 79 76 61 6c    #f) ;; (keyval
8190: 6c 6c 73 74 20 20 20 20 20 20 28 6b 65 79 73 3a  llst      (keys:
81a0: 74 61 72 67 65 74 2d 3e 6b 65 79 76 61 6c 20 6b  target->keyval k
81b0: 65 79 73 20 74 61 72 67 65 74 29 29 0a 09 20 28  eys target)).. (
81c0: 6e 65 77 2d 72 75 6e 2d 69 64 20 20 20 20 20 20  new-run-id      
81d0: 28 63 64 62 3a 72 65 6d 6f 74 65 2d 72 75 6e 20  (cdb:remote-run 
81e0: 64 62 3a 72 65 67 69 73 74 65 72 2d 72 75 6e 20  db:register-run 
81f0: 23 66 20 6b 65 79 73 20 6b 65 79 76 61 6c 6c 73  #f keys keyvalls
8200: 74 20 72 75 6e 6e 61 6d 65 20 22 6e 65 77 22 20  t runname "new" 
8210: 22 6e 2f 61 22 20 75 73 65 72 29 29 0a 09 20 28  "n/a" user)).. (
8220: 70 72 65 76 2d 74 65 73 74 73 20 20 20 20 20 20  prev-tests      
8230: 28 6f 70 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20  (open-run-close 
8240: 74 65 73 74 3a 67 65 74 2d 6d 61 74 63 68 69 6e  test:get-matchin
8250: 67 2d 70 72 65 76 69 6f 75 73 2d 74 65 73 74 2d  g-previous-test-
8260: 72 75 6e 2d 72 65 63 6f 72 64 73 20 64 62 20 6e  run-records db n
8270: 65 77 2d 72 75 6e 2d 69 64 20 22 25 22 20 22 25  ew-run-id "%" "%
8280: 22 29 29 0a 09 20 28 63 75 72 72 2d 74 65 73 74  ")).. (curr-test
8290: 73 20 20 20 20 20 20 28 6f 70 65 6e 2d 72 75 6e  s      (open-run
82a0: 2d 63 6c 6f 73 65 20 64 62 3a 67 65 74 2d 74 65  -close db:get-te
82b0: 73 74 73 2d 66 6f 72 2d 72 75 6e 20 64 62 20 6e  sts-for-run db n
82c0: 65 77 2d 72 75 6e 2d 69 64 20 22 25 2f 25 22 20  ew-run-id "%/%" 
82d0: 27 28 29 20 27 28 29 29 29 0a 09 20 28 63 75 72  '() '())).. (cur
82e0: 72 2d 74 65 73 74 73 2d 68 61 73 68 20 28 6d 61  r-tests-hash (ma
82f0: 6b 65 2d 68 61 73 68 2d 74 61 62 6c 65 29 29 29  ke-hash-table)))
8300: 0a 20 20 20 20 28 6f 70 65 6e 2d 72 75 6e 2d 63  .    (open-run-c
8310: 6c 6f 73 65 20 64 62 3a 75 70 64 61 74 65 2d 72  lose db:update-r
8320: 75 6e 2d 65 76 65 6e 74 5f 74 69 6d 65 20 64 62  un-event_time db
8330: 20 6e 65 77 2d 72 75 6e 2d 69 64 29 0a 20 20 20   new-run-id).   
8340: 20 3b 3b 20 69 6e 64 65 78 20 74 68 65 20 61 6c   ;; index the al
8350: 72 65 61 64 79 20 73 61 76 65 64 20 74 65 73 74  ready saved test
8360: 73 20 62 79 20 74 65 73 74 6e 61 6d 65 20 61 6e  s by testname an
8370: 64 20 69 74 65 6d 64 61 74 20 69 6e 20 63 75 72  d itemdat in cur
8380: 72 2d 74 65 73 74 73 2d 68 61 73 68 0a 20 20 20  r-tests-hash.   
8390: 20 28 66 6f 72 2d 65 61 63 68 0a 20 20 20 20 20   (for-each.     
83a0: 28 6c 61 6d 62 64 61 20 28 74 65 73 74 64 61 74  (lambda (testdat
83b0: 29 0a 20 20 20 20 20 20 20 28 6c 65 74 2a 20 28  ).       (let* (
83c0: 28 74 65 73 74 6e 61 6d 65 20 20 28 64 62 3a 74  (testname  (db:t
83d0: 65 73 74 2d 67 65 74 2d 74 65 73 74 6e 61 6d 65  est-get-testname
83e0: 20 74 65 73 74 64 61 74 29 29 0a 09 20 20 20 20   testdat))..    
83f0: 20 20 28 69 74 65 6d 2d 70 61 74 68 20 28 64 62    (item-path (db
8400: 3a 74 65 73 74 2d 67 65 74 2d 69 74 65 6d 2d 70  :test-get-item-p
8410: 61 74 68 20 74 65 73 74 64 61 74 29 29 0a 09 20  ath testdat)).. 
8420: 20 20 20 20 20 28 66 75 6c 6c 2d 6e 61 6d 65 20       (full-name 
8430: 28 63 6f 6e 63 20 74 65 73 74 6e 61 6d 65 20 22  (conc testname "
8440: 2f 22 20 69 74 65 6d 2d 70 61 74 68 29 29 29 0a  /" item-path))).
8450: 09 20 28 68 61 73 68 2d 74 61 62 6c 65 2d 73 65  . (hash-table-se
8460: 74 21 20 63 75 72 72 2d 74 65 73 74 73 2d 68 61  t! curr-tests-ha
8470: 73 68 20 66 75 6c 6c 2d 6e 61 6d 65 20 74 65 73  sh full-name tes
8480: 74 64 61 74 29 29 29 0a 20 20 20 20 20 63 75 72  tdat))).     cur
8490: 72 2d 74 65 73 74 73 29 0a 20 20 20 20 3b 3b 20  r-tests).    ;; 
84a0: 4e 4f 50 45 3a 20 4e 6f 6e 2d 6f 70 74 69 6d 61  NOPE: Non-optima
84b0: 6c 20 61 70 70 72 6f 61 63 68 2e 20 54 72 79 20  l approach. Try 
84c0: 74 68 69 73 20 69 6e 73 74 65 61 64 2e 0a 20 20  this instead..  
84d0: 20 20 3b 3b 20 20 20 31 2e 20 74 65 73 74 73 20    ;;   1. tests 
84e0: 61 72 65 20 72 65 63 65 69 76 65 64 20 69 6e 20  are received in 
84f0: 61 20 6c 69 73 74 2c 20 6d 6f 73 74 20 72 65 63  a list, most rec
8500: 65 6e 74 20 66 69 72 73 74 0a 20 20 20 20 3b 3b  ent first.    ;;
8510: 20 20 20 32 2e 20 72 65 70 6c 61 63 65 20 74 68     2. replace th
8520: 65 20 72 6f 6c 6c 75 70 20 74 65 73 74 20 77 69  e rollup test wi
8530: 74 68 20 74 68 65 20 6e 65 77 20 2a 61 6c 77 61  th the new *alwa
8540: 79 73 2a 0a 20 20 20 20 28 66 6f 72 2d 65 61 63  ys*.    (for-eac
8550: 68 20 0a 20 20 20 20 20 28 6c 61 6d 62 64 61 20  h .     (lambda 
8560: 28 74 65 73 74 64 61 74 29 0a 20 20 20 20 20 20  (testdat).      
8570: 20 28 6c 65 74 2a 20 28 28 74 65 73 74 6e 61 6d   (let* ((testnam
8580: 65 20 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d  e  (db:test-get-
8590: 74 65 73 74 6e 61 6d 65 20 74 65 73 74 64 61 74  testname testdat
85a0: 29 29 0a 09 20 20 20 20 20 20 28 69 74 65 6d 2d  ))..      (item-
85b0: 70 61 74 68 20 28 64 62 3a 74 65 73 74 2d 67 65  path (db:test-ge
85c0: 74 2d 69 74 65 6d 2d 70 61 74 68 20 74 65 73 74  t-item-path test
85d0: 64 61 74 29 29 0a 09 20 20 20 20 20 20 28 66 75  dat))..      (fu
85e0: 6c 6c 2d 6e 61 6d 65 20 28 63 6f 6e 63 20 74 65  ll-name (conc te
85f0: 73 74 6e 61 6d 65 20 22 2f 22 20 69 74 65 6d 2d  stname "/" item-
8600: 70 61 74 68 29 29 0a 09 20 20 20 20 20 20 28 70  path))..      (p
8610: 72 65 76 2d 74 65 73 74 2d 64 61 74 20 28 68 61  rev-test-dat (ha
8620: 73 68 2d 74 61 62 6c 65 2d 72 65 66 2f 64 65 66  sh-table-ref/def
8630: 61 75 6c 74 20 63 75 72 72 2d 74 65 73 74 73 2d  ault curr-tests-
8640: 68 61 73 68 20 66 75 6c 6c 2d 6e 61 6d 65 20 23  hash full-name #
8650: 66 29 29 0a 09 20 20 20 20 20 20 28 74 65 73 74  f))..      (test
8660: 2d 73 74 65 70 73 20 20 20 20 20 20 28 6f 70 65  -steps      (ope
8670: 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20 64 62 3a 67  n-run-close db:g
8680: 65 74 2d 73 74 65 70 73 2d 66 6f 72 2d 74 65 73  et-steps-for-tes
8690: 74 20 64 62 20 28 64 62 3a 74 65 73 74 2d 67 65  t db (db:test-ge
86a0: 74 2d 69 64 20 74 65 73 74 64 61 74 29 29 29 0a  t-id testdat))).
86b0: 09 20 20 20 20 20 20 28 6e 65 77 2d 74 65 73 74  .      (new-test
86c0: 2d 72 65 63 6f 72 64 20 23 66 29 29 0a 09 20 3b  -record #f)).. ;
86d0: 3b 20 72 65 70 6c 61 63 65 20 74 68 65 73 65 20  ; replace these 
86e0: 77 69 74 68 20 69 6e 73 65 72 74 20 2e 2e 2e 20  with insert ... 
86f0: 73 65 6c 65 63 74 0a 09 20 28 61 70 70 6c 79 20  select.. (apply 
8700: 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74 65 20  sqlite3:execute 
8710: 0a 09 09 64 62 20 0a 09 09 28 63 6f 6e 63 20 22  ...db ...(conc "
8720: 49 4e 53 45 52 54 20 4f 52 20 52 45 50 4c 41 43  INSERT OR REPLAC
8730: 45 20 49 4e 54 4f 20 74 65 73 74 73 20 28 72 75  E INTO tests (ru
8740: 6e 5f 69 64 2c 74 65 73 74 6e 61 6d 65 2c 73 74  n_id,testname,st
8750: 61 74 65 2c 73 74 61 74 75 73 2c 65 76 65 6e 74  ate,status,event
8760: 5f 74 69 6d 65 2c 68 6f 73 74 2c 63 70 75 6c 6f  _time,host,cpulo
8770: 61 64 2c 64 69 73 6b 66 72 65 65 2c 75 6e 61 6d  ad,diskfree,unam
8780: 65 2c 72 75 6e 64 69 72 2c 69 74 65 6d 5f 70 61  e,rundir,item_pa
8790: 74 68 2c 72 75 6e 5f 64 75 72 61 74 69 6f 6e 2c  th,run_duration,
87a0: 66 69 6e 61 6c 5f 6c 6f 67 66 2c 63 6f 6d 6d 65  final_logf,comme
87b0: 6e 74 29 20 22 0a 09 09 20 20 20 20 20 20 22 56  nt) "...      "V
87c0: 41 4c 55 45 53 20 28 3f 2c 3f 2c 3f 2c 3f 2c 3f  ALUES (?,?,?,?,?
87d0: 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f 2c 3f  ,?,?,?,?,?,?,?,?
87e0: 2c 3f 29 3b 22 29 0a 09 09 6e 65 77 2d 72 75 6e  ,?);")...new-run
87f0: 2d 69 64 20 28 63 64 64 72 20 28 76 65 63 74 6f  -id (cddr (vecto
8800: 72 2d 3e 6c 69 73 74 20 74 65 73 74 64 61 74 29  r->list testdat)
8810: 29 29 0a 09 20 28 73 65 74 21 20 6e 65 77 2d 74  )).. (set! new-t
8820: 65 73 74 64 61 74 20 28 63 61 72 20 28 6f 70 65  estdat (car (ope
8830: 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20 64 62 3a 67  n-run-close db:g
8840: 65 74 2d 74 65 73 74 73 2d 66 6f 72 2d 72 75 6e  et-tests-for-run
8850: 20 64 62 20 6e 65 77 2d 72 75 6e 2d 69 64 20 28   db new-run-id (
8860: 63 6f 6e 63 20 74 65 73 74 6e 61 6d 65 20 22 2f  conc testname "/
8870: 22 20 69 74 65 6d 2d 70 61 74 68 29 20 27 28 29  " item-path) '()
8880: 20 27 28 29 29 29 29 0a 09 20 28 68 61 73 68 2d   '()))).. (hash-
8890: 74 61 62 6c 65 2d 73 65 74 21 20 63 75 72 72 2d  table-set! curr-
88a0: 74 65 73 74 73 2d 68 61 73 68 20 66 75 6c 6c 2d  tests-hash full-
88b0: 6e 61 6d 65 20 6e 65 77 2d 74 65 73 74 64 61 74  name new-testdat
88c0: 29 20 3b 3b 20 74 68 69 73 20 63 6f 75 6c 64 20  ) ;; this could 
88d0: 62 65 20 63 6f 6e 66 75 73 69 6e 67 2c 20 77 68  be confusing, wh
88e0: 69 63 68 20 72 65 63 6f 72 64 20 73 68 6f 75 6c  ich record shoul
88f0: 64 20 67 6f 20 69 6e 74 6f 20 74 68 65 20 6c 6f  d go into the lo
8900: 6f 6b 75 70 20 74 61 62 6c 65 3f 0a 09 20 3b 3b  okup table?.. ;;
8910: 20 4e 6f 77 20 64 75 70 6c 69 63 61 74 65 20 74   Now duplicate t
8920: 68 65 20 74 65 73 74 20 73 74 65 70 73 0a 09 20  he test steps.. 
8930: 28 64 65 62 75 67 3a 70 72 69 6e 74 20 34 20 22  (debug:print 4 "
8940: 43 6f 70 79 69 6e 67 20 72 65 63 6f 72 64 73 20  Copying records 
8950: 69 6e 20 74 65 73 74 5f 73 74 65 70 73 20 66 72  in test_steps fr
8960: 6f 6d 20 74 65 73 74 5f 69 64 3d 22 20 28 64 62  om test_id=" (db
8970: 3a 74 65 73 74 2d 67 65 74 2d 69 64 20 74 65 73  :test-get-id tes
8980: 74 64 61 74 29 20 22 20 74 6f 20 22 20 28 64 62  tdat) " to " (db
8990: 3a 74 65 73 74 2d 67 65 74 2d 69 64 20 6e 65 77  :test-get-id new
89a0: 2d 74 65 73 74 64 61 74 29 29 0a 09 20 28 6f 70  -testdat)).. (op
89b0: 65 6e 2d 72 75 6e 2d 63 6c 6f 73 65 20 0a 09 20  en-run-close .. 
89c0: 20 28 6c 61 6d 62 64 61 20 28 29 0a 09 20 20 20   (lambda ()..   
89d0: 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63 75 74   (sqlite3:execut
89e0: 65 20 0a 09 20 20 20 20 20 64 62 20 0a 09 20 20  e ..     db ..  
89f0: 20 20 20 28 63 6f 6e 63 20 22 49 4e 53 45 52 54     (conc "INSERT
8a00: 20 4f 52 20 52 45 50 4c 41 43 45 20 49 4e 54 4f   OR REPLACE INTO
8a10: 20 74 65 73 74 5f 73 74 65 70 73 20 28 74 65 73   test_steps (tes
8a20: 74 5f 69 64 2c 73 74 65 70 6e 61 6d 65 2c 73 74  t_id,stepname,st
8a30: 61 74 65 2c 73 74 61 74 75 73 2c 65 76 65 6e 74  ate,status,event
8a40: 5f 74 69 6d 65 2c 63 6f 6d 6d 65 6e 74 29 20 22  _time,comment) "
8a50: 0a 09 09 20 20 20 22 53 45 4c 45 43 54 20 22 20  ...   "SELECT " 
8a60: 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 69 64 20  (db:test-get-id 
8a70: 6e 65 77 2d 74 65 73 74 64 61 74 29 20 22 2c 73  new-testdat) ",s
8a80: 74 65 70 6e 61 6d 65 2c 73 74 61 74 65 2c 73 74  tepname,state,st
8a90: 61 74 75 73 2c 65 76 65 6e 74 5f 74 69 6d 65 2c  atus,event_time,
8aa0: 63 6f 6d 6d 65 6e 74 20 46 52 4f 4d 20 74 65 73  comment FROM tes
8ab0: 74 5f 73 74 65 70 73 20 57 48 45 52 45 20 74 65  t_steps WHERE te
8ac0: 73 74 5f 69 64 3d 3f 3b 22 29 0a 09 20 20 20 20  st_id=?;")..    
8ad0: 20 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 69 64   (db:test-get-id
8ae0: 20 74 65 73 74 64 61 74 29 29 0a 09 20 20 20 20   testdat))..    
8af0: 3b 3b 20 4e 6f 77 20 64 75 70 6c 69 63 61 74 65  ;; Now duplicate
8b00: 20 74 68 65 20 74 65 73 74 20 64 61 74 61 0a 09   the test data..
8b10: 20 20 20 20 28 64 65 62 75 67 3a 70 72 69 6e 74      (debug:print
8b20: 20 34 20 22 43 6f 70 79 69 6e 67 20 72 65 63 6f   4 "Copying reco
8b30: 72 64 73 20 69 6e 20 74 65 73 74 5f 64 61 74 61  rds in test_data
8b40: 20 66 72 6f 6d 20 74 65 73 74 5f 69 64 3d 22 20   from test_id=" 
8b50: 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 69 64 20  (db:test-get-id 
8b60: 74 65 73 74 64 61 74 29 20 22 20 74 6f 20 22 20  testdat) " to " 
8b70: 28 64 62 3a 74 65 73 74 2d 67 65 74 2d 69 64 20  (db:test-get-id 
8b80: 6e 65 77 2d 74 65 73 74 64 61 74 29 29 0a 09 20  new-testdat)).. 
8b90: 20 20 20 28 73 71 6c 69 74 65 33 3a 65 78 65 63     (sqlite3:exec
8ba0: 75 74 65 20 0a 09 20 20 20 20 20 64 62 20 0a 09  ute ..     db ..
8bb0: 20 20 20 20 20 28 63 6f 6e 63 20 22 49 4e 53 45       (conc "INSE
8bc0: 52 54 20 4f 52 20 52 45 50 4c 41 43 45 20 49 4e  RT OR REPLACE IN
8bd0: 54 4f 20 74 65 73 74 5f 64 61 74 61 20 28 74 65  TO test_data (te
8be0: 73 74 5f 69 64 2c 63 61 74 65 67 6f 72 79 2c 76  st_id,category,v
8bf0: 61 72 69 61 62 6c 65 2c 76 61 6c 75 65 2c 65 78  ariable,value,ex
8c00: 70 65 63 74 65 64 2c 74 6f 6c 2c 75 6e 69 74 73  pected,tol,units
8c10: 2c 63 6f 6d 6d 65 6e 74 29 20 22 0a 09 09 20 20  ,comment) "...  
8c20: 20 22 53 45 4c 45 43 54 20 22 20 28 64 62 3a 74   "SELECT " (db:t
8c30: 65 73 74 2d 67 65 74 2d 69 64 20 6e 65 77 2d 74  est-get-id new-t
8c40: 65 73 74 64 61 74 29 20 22 2c 63 61 74 65 67 6f  estdat) ",catego
8c50: 72 79 2c 76 61 72 69 61 62 6c 65 2c 76 61 6c 75  ry,variable,valu
8c60: 65 2c 65 78 70 65 63 74 65 64 2c 74 6f 6c 2c 75  e,expected,tol,u
8c70: 6e 69 74 73 2c 63 6f 6d 6d 65 6e 74 20 46 52 4f  nits,comment FRO
8c80: 4d 20 74 65 73 74 5f 64 61 74 61 20 57 48 45 52  M test_data WHER
8c90: 45 20 74 65 73 74 5f 69 64 3d 3f 3b 22 29 0a 09  E test_id=?;")..
8ca0: 20 20 20 20 20 28 64 62 3a 74 65 73 74 2d 67 65       (db:test-ge
8cb0: 74 2d 69 64 20 74 65 73 74 64 61 74 29 29 29 29  t-id testdat))))
8cc0: 0a 09 20 29 29 0a 20 20 20 20 20 70 72 65 76 2d  .. )).     prev-
8cd0: 74 65 73 74 73 29 29 29 0a 09 20 0a 20 20 20 20  tests))).. .    
8ce0: 20 0a                                             .