diff options
-rw-r--r-- | ravanan/command-line-tool.scm | 31 | ||||
-rw-r--r-- | ravanan/utils.scm | 31 |
2 files changed, 36 insertions, 26 deletions
diff --git a/ravanan/command-line-tool.scm b/ravanan/command-line-tool.scm index da585d8..84744d3 100644 --- a/ravanan/command-line-tool.scm +++ b/ravanan/command-line-tool.scm @@ -40,6 +40,7 @@ #:use-module (ravanan job-state) #:use-module (ravanan reader) #:use-module (ravanan slurm-api) + #:use-module (ravanan utils) #:use-module (ravanan work command-line-tool) #:use-module (ravanan work monads) #:use-module (ravanan work types) @@ -552,31 +553,11 @@ maybe-monadic value." (define (load-manifest manifest-file) "Load Guix manifest from @var{manifest-file} and return it." - ;; We load the manifest file into a dummy module of its own so that any - ;; definitions from there don't leak into this module. We also ensure that - ;; this dummy module is different for different manifest files so that - ;; definitions from one manifest file don't leak into other manifest files. - (let ((manifest-module - (resolve-module (match (file-name-split (canonicalize-file-name manifest-file)) - (("" parts ...) - (map string->symbol parts)))))) - ;; Import modules required for loading manifests. - (for-each (lambda (module-name) - (module-use! manifest-module (resolve-interface module-name))) - '((guile) - (gnu packages) - (guix gexp) - (guix profiles))) - (save-module-excursion - (lambda () - (set-current-module manifest-module) - ;; Do not auto-compile manifest files. - (set! %load-should-auto-compile #f) - ;; Our use of load triggers a "Add #:declarative? #f to your - ;; define-module invocation" warning during compilation. But, it is - ;; probably safe to ignore this warning since we use load only within a - ;; dummy module. - (load (canonicalize-path manifest-file)))))) + (load-script manifest-file + #:modules '((guile) + (gnu packages) + (guix gexp) + (guix profiles)))) (define (build-command-line-tool-script name manifest-file cwl inputs scratch store batch-system diff --git a/ravanan/utils.scm b/ravanan/utils.scm index 471785a..c9294cd 100644 --- a/ravanan/utils.scm +++ b/ravanan/utils.scm @@ -19,8 +19,11 @@ (define-module (ravanan utils) #:use-module (srfi srfi-1) #:use-module (srfi srfi-26) + #:use-module (ice-9 filesystem) + #:use-module (ice-9 match) #:export (string-trim-prefix - call-with-temporary-file)) + call-with-temporary-file + load-script)) (define (string-trim-prefix prefix str) "Remove @var{prefix} from @var{str} if it exists. Else, return @var{str} as is." @@ -37,3 +40,29 @@ non-locally." (cut proc temporary-file-port) (lambda () (delete-file (port-filename temporary-file-port)))))) + +(define* (load-script script-file #:key (modules '())) + "Load script from @var{script-file} and return its value. Import @var{modules} +before loading script." + ;; We load the script file into a dummy module of its own so that any + ;; definitions from there don't leak into this module. We also ensure that + ;; this dummy module is different for different script files so that + ;; definitions from one script file don't leak into other script files. + (let ((script-module + (resolve-module (match (file-name-split (canonicalize-file-name script-file)) + (("" parts ...) + (map string->symbol parts)))))) + ;; Import modules required for loading script. + (for-each (lambda (module-name) + (module-use! script-module (resolve-interface module-name))) + modules) + (save-module-excursion + (lambda () + (set-current-module script-module) + ;; Do not auto-compile script file. + (set! %load-should-auto-compile #f) + ;; Our use of load triggers a "Add #:declarative? #f to your + ;; define-module invocation" warning during compilation. But, it is + ;; probably safe to ignore this warning since we use load only within a + ;; dummy module. + (load (canonicalize-path script-file)))))) |