Index: configf.scm ================================================================== --- configf.scm +++ configf.scm @@ -233,10 +233,13 @@ (let ((sectdat (hash-table-ref/default cfgdat section '()))) (if (null? sectdat) '() (map car sectdat)))) +(define (configf:get-section cfdat section) + (hash-table-ref/default cfgdat section '())) + (define (setup) (let* ((configf (find-config)) (config (if configf (read-config configf #f #t) #f))) (if config (setenv "RUN_AREA_HOME" (pathname-directory configf))) Index: db.scm ================================================================== --- db.scm +++ db.scm @@ -611,13 +611,12 @@ ;;====================================================================== ;; Misc. test related queries ;;====================================================================== -(define (db:test-get-paths-matching db keynames target) - (let* ((res '()) - (itempatt (if (args:get-arg "-itempatt")(args:get-arg "-itempatt") "%")) +(define (db:test-get-paths-matching db keynames target fnamepatt #!key (res '())) + (let* ((itempatt (if (args:get-arg "-itempatt")(args:get-arg "-itempatt") "%")) (testpatt (if (args:get-arg "-testpatt")(args:get-arg "-testpatt") "%")) (statepatt (if (args:get-arg ":state") (args:get-arg ":state") "%")) (statuspatt (if (args:get-arg ":status") (args:get-arg ":status") "%")) (runname (if (args:get-arg ":runname") (args:get-arg ":runname") "%")) (keystr (string-intersperse @@ -634,11 +633,37 @@ (sqlite3:for-each-row (lambda (p) (set! res (cons p res))) db qrystr) - res)) + (if fnamepatt + (apply append + (map (lambda (p) + (glob (conc p "/" fnamepatt))) + res)) + res))) + +;; look through tests from matching runs for a file +(define (db:test-get-first-path-matching db keynames target fname) + ;; [refpaths] is the section where references to other megatest databases are stored + (let ((mt-paths (configf:get-section "refpaths")) + (res (db:test-get-paths-matching db keynames target fname))) + (let loop ((pathdat (if (null? paths) #f (car mt-paths))) + (tal (if (null? paths) '()(cdr mt-paths)))) + (if (not (null? res)) + (car res) ;; return first found + (if path + (let* ((db (open-db path: (cadr pathdat))) + (newres (db:test-get-paths-matching db keynames target fname))) + (debug:print 4 "INFO: Trying " (car pathdat) " at " (cadr pathdat)) + (sqlite3:finalize! db) + (if (not (null? newres)) + (car newres) + (if (null? tal) + #f + (loop (car tal)(cdr tal)))))))))) + (define (db:test-get-test-records-matching db keynames target) (let* ((res '()) (itempatt (if (args:get-arg "-itempatt")(args:get-arg "-itempatt") "%")) (testpatt (if (args:get-arg "-testpatt")(args:get-arg "-testpatt") "%")) Index: megatest.scm ================================================================== --- megatest.scm +++ megatest.scm @@ -73,11 +73,10 @@ :variable : set the variable name (optional) :value : value measured (required) :expected : value expected (required) :tol : |value-expect| <= tol (required, can be <, >, >=, <= or number) :units : name of the units for value, expected_value etc. (optional) - -load-test-data : read test specific data for storage in the test_data table from standard in. Each line is comma delimited with four fields category,variable,value,comment Queries Index: tests/megatest.config ================================================================== --- tests/megatest.config +++ tests/megatest.config @@ -1,9 +1,14 @@ [fields] sysname TEXT fsname TEXT datapath TEXT + +# refareas can be searched to find previous runs +# the path points to where megatest.db exists +[refareas] +area1 /tmp/oldarea/megatest [setup] # exectutable /path/to/megatest max_concurrent_jobs 200 linktree /tmp/mt_links