Queries etc evaluated in correct WD.
[scratchy.git] / burrow.scm
index 9e01845..700eb56 100644 (file)
              (= (length arguments) 1))
         (with-input-from-file file-name
           (lambda ()
-            (serve-info-records (apply (eval (read))
-                                       (list (car arguments) remote-ip)))))
+            (serve-info-records
+             (with-selector-dir
+              selector config
+              (lambda ()
+                (apply (eval (read))
+                       (list (car arguments) remote-ip)))))))
         (error "Invalid query."))))
 
 
      (print "\tfake\tfake\t1\r"))
    (string-split string "\n" #t)))
 
-(define (serve-record record path config)
+(define (serve-record record dir-selector config)
   (match record
-    (('shell command) (serve-shell-command command))
-    (('eval expression) (serve-expression expression))
+    (('shell command) (serve-shell-command command dir-selector config))
+    (('eval expression) (serve-expression expression dir-selector config))
     (('url display-string url)
      (print #\h display-string "\tURL:" url "\tfake\t80\r"))
     ((type display-string selector host port)
      (print type display-string "\t" selector "\t" host "\t" port "\r"))
     ((type display-string selector host)
      (serve-record (list type display-string selector host 70)
-                   path config))
+                   dir-selectorconfig))
     ((type display-string selector)
-     (serve-record (list type display-string selector
+     (serve-record (list type display-string
+                         (make-pathname dir-selector selector)
                          (config-host config) (config-port config))
-                   path config))
+                   dir-selector config))
     ((display-string selector)
      (serve-record (list (infer-selector-type selector) display-string selector)
-                   path config))
+                   dir-selector config))
     ((selector)
      (serve-record (list (infer-selecto-type selector) selector)
-                   path config))
+                   dir-selector config))
     (else (error "Unknown record type."))))
 
-(define (serve-shell-command command)
-  (let-values (((in-port out-port id) (process command)))
-    (serve-info-records (string-chomp (read-string #f in-port) "\n"))))
+(define (serve-shell-command command dir-selector config)
+  (with-selector-dir
+   dir-selector config
+   (lambda ()
+     (let-values (((in-port out-port id) (process command)))
+       (serve-info-records (string-chomp (read-string #f in-port) "\n"))))))
 
-(define (serve-expression expression)
-  (serve-info-records (conc (eval expression))))
+(define (serve-expression expression path config)
+  (with-selector-dir
+   dir-selector config
+   (lambda ()
+     (serve-info-records (conc (eval expression))))))
 
 
 ;;; Utility methods
 
 (define (with-current-working-directory directory thunk)
-  (let ((old-wd (current-directory)))
+  (let ((old-wd (current-directory))
+        (result 'none))
     (change-directory directory)
-    (thunk)
-    (change-directory old-wd)))
-
-(define (with-selector-dir selector thunk)
-  (with-current-working-directory (pathname-directory selector) thunk))
+    (set! result (thunk))
+    (change-directory old-wd)
+    result))
+
+(define (with-selector-dir selector config thunk)
+  (with-current-working-directory
+   (make-pathname (config-root-dir config)
+                  (pathname-directory selector)) thunk))
 
 ;;; main