Index: .mtutil.scm ================================================================== --- .mtutil.scm +++ .mtutil.scm @@ -17,10 +17,13 @@ (sorted (sort name-time (lambda (a b)(> (cdr a)(cdr b))))) (last-name (if (null? sorted) #f (caar sorted)))) last-name)))) + +(define (str-first-char->number str) + (char->integer (string-ref str 0))) ;; example of how to set up and write target mappers ;; (hash-table-set! *target-mappers* 'prefix-contour @@ -32,19 +35,33 @@ (conc area "/" contour "/" target))) (hash-table-set! *runname-mappers* 'corporate-ww (lambda (target run-name area area-path reason contour mode-patt) + (print "corporate-ww called with: target=" target " run-name=" run-name " area=" area " area-path=" area-path " reason=" reason " contour=" contour " mode-patt=" mode-patt) (let* ((last-name (get-last-runname area-path target)) - (last-letter (if (string? last-name) - (let ((len (string-length last-name))) - (substring last-name (- len 1) len)) - "a")) - (next-letter (list->string - (list - (integer->char - (+ (char->integer (string-ref last-letter 0)) 1)))))) ;; surely there is an easier way? + (last-letter (let* ((ch (if (string? last-name) + (let ((len (string-length last-name))) + (substring last-name (- len 1) len)) + "a")) + (chnum (str-first-char->number ch)) + (a (str-first-char->number "a")) + (z (str-first-char->number "z"))) + (if (and (>= chnum a)(<= chnum z)) + chnum + #f))) + (next-letter (if last-letter + (list->string + (list + (integer->char + (+ last-letter 1)))) ;; surely there is an easier way? + "a"))) ;; (print "last-name: " last-name " last-letter: " last-letter " next-letter: " next-letter) (conc (seconds->wwdate (current-seconds)) next-letter)))) + +(hash-table-set! *runname-mappers* + 'auto + (lambda (target run-name area area-path reason contour mode-patt) + "auto-eh")) (print "Got here!") Index: mtut.scm ================================================================== --- mtut.scm +++ mtut.scm @@ -450,23 +450,25 @@ (area-dat (val->alist (or (configf:lookup mtconf "areas" area) ""))) (area-path (alist-ref 'path area-dat)) (area-xlatr (alist-ref 'targtrans area-dat)) (new-runname (let* ((callname (if (string? runtrans)(string->symbol runtrans) #f)) (mapper (if callname (hash-table-ref/default *runname-mappers* callname #f) #f))) - (print "callname=" callname " runtrans=" runtrans) + (print "callname=" callname " runtrans=" runtrans " mapper=" mapper) (if (and callname (not (equal? callname "auto")) (not mapper)) (print "Failed to find runname mapper " callname " for area " area)) (if mapper (handle-exceptions exn (begin + (print-call-chain) (print "FAILED TO RUN RUNNAME MAPPER " callname " FOR AREA " area) (print " message: " ((condition-property-accessor 'exn 'message) exn)) runname) - (mapper target runname area area-path reason contour mode-patt)) + (print "(mapper " (string-intersperse (list runkey runname area area-path reason contour mode-patt) ", ") ")") + (mapper runkey runname area area-path reason contour mode-patt)) runname))) (new-target (if area-xlatr (let ((xlatr-key (string->symbol area-xlatr))) (if (hash-table-exists? *target-mappers* xlatr-key) (begin