aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorArun Isaac2023-09-20 10:17:58 +0100
committerArun Isaac2023-09-20 10:17:58 +0100
commitcdc3704e226ff8b802001436f7ab785e320b522b (patch)
tree8261ea93ce949dc8c5b05b47f6c73ce86cbb8b2f /scripts
parent1f23b23775dfe2fcdedf7cb660cda521ed2f2285 (diff)
downloadccwl-cdc3704e226ff8b802001436f7ab785e320b522b.tar.gz
ccwl-cdc3704e226ff8b802001436f7ab785e320b522b.tar.lz
ccwl-cdc3704e226ff8b802001436f7ab785e320b522b.zip
scripts: Catch uncaught exceptions and request the user report them.
* scripts/ccwl (main): Catch uncaught exceptions and request the user report them to the issue tracker.
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/ccwl130
1 files changed, 72 insertions, 58 deletions
diff --git a/scripts/ccwl b/scripts/ccwl
index 3001e5a..8a74da0 100755
--- a/scripts/ccwl
+++ b/scripts/ccwl
@@ -46,67 +46,81 @@ exec guile --no-auto-compile -e main -s "$0" "$@"
(lambda (opt name arg result)
(acons 'help #t result))))
-(define main
- (match-lambda
- ((program "compile" args ...)
- (let* ((args (args-fold args
- (list (option (list #\t "to") #t #f
- (lambda (opt name arg result)
- (let ((supported (list "cwl" "dot")))
- (unless (member arg supported)
- (scm-error 'misc-error
- #f
- "Invalid target ~A argument ~S. Supported targets are ~A."
- (list (if (char? name)
- (string #\- name)
- (string-append "--" name))
- arg
- (string-join supported ", "))
- #f)))
- (acons 'to arg result)))
- %help-option)
- invalid-option
- (lambda (arg result)
- (acons 'source-file arg result))
- '((to . "cwl")))))
- (when (or (assq 'help args)
- (not (assq-ref args 'source-file)))
- (display (format "Usage: ~a compile [OPTIONS] SOURCE-FILE
+(define (main args)
+ (with-exception-handler
+ (lambda (condition)
+ (display-backtrace (make-stack #t) (current-error-port))
+ (newline (current-error-port))
+ (write condition (current-error-port))
+ (newline (current-error-port))
+ (display "
+You have discovered a bug!
+Please report this to https://github.com/arunisaac/ccwl/issues
+Thank you!
+"
+ (current-error-port))
+ (exit #f))
+ (lambda ()
+ (match args
+ ((program "compile" args ...)
+ (let* ((args (args-fold args
+ (list (option (list #\t "to") #t #f
+ (lambda (opt name arg result)
+ (let ((supported (list "cwl" "dot")))
+ (unless (member arg supported)
+ (scm-error 'misc-error
+ #f
+ "Invalid target ~A argument ~S. Supported targets are ~A."
+ (list (if (char? name)
+ (string #\- name)
+ (string-append "--" name))
+ arg
+ (string-join supported ", "))
+ #f)))
+ (acons 'to arg result)))
+ %help-option)
+ invalid-option
+ (lambda (arg result)
+ (acons 'source-file arg result))
+ '((to . "cwl")))))
+ (when (or (assq 'help args)
+ (not (assq-ref args 'source-file)))
+ (display (format "Usage: ~a compile [OPTIONS] SOURCE-FILE
Compile SOURCE-FILE.
-t, --to=TARGET compile SOURCE-FILE to TARGET language;
Supported targets are cwl (default) and dot.
"
- program)
- (current-error-port))
- (exit (assq 'help args)))
- ;; We don't need to compile ccwl files. Loading is sufficient
- ;; for our purposes. Besides, compiling would fail since the
- ;; workflow macro cannot access command definitions.
- (set! %load-should-auto-compile #f)
- (let ((to (assq-ref args 'to)))
- ((cond
- ((string=? to "cwl") workflow->cwl)
- ((string=? to "dot") workflow->dot))
- (guard (exception
- ;; Handle syntax violation exceptions by reporting
- ;; them and exiting.
- ((ccwl-violation? exception)
- (report-ccwl-violation exception)
- (exit #f)))
- (load (canonicalize-path (assq-ref args 'source-file))
- read-syntax))
- (current-output-port)))))
- ((program args ...)
- (let ((args (args-fold args
- (list %help-option)
- (lambda (opt name arg result)
- result)
- (lambda (arg result)
- result)
- '())))
- (display (format "Usage: ~a COMMAND [OPTIONS] [ARGS]
+ program)
+ (current-error-port))
+ (exit (assq 'help args)))
+ ;; We don't need to compile ccwl files. Loading is sufficient
+ ;; for our purposes. Besides, compiling would fail since the
+ ;; workflow macro cannot access command definitions.
+ (set! %load-should-auto-compile #f)
+ (let ((to (assq-ref args 'to)))
+ ((cond
+ ((string=? to "cwl") workflow->cwl)
+ ((string=? to "dot") workflow->dot))
+ (guard (exception
+ ;; Handle syntax violation exceptions by reporting
+ ;; them and exiting.
+ ((ccwl-violation? exception)
+ (report-ccwl-violation exception)
+ (exit #f)))
+ (load (canonicalize-path (assq-ref args 'source-file))
+ read-syntax))
+ (current-output-port)))))
+ ((program args ...)
+ (let ((args (args-fold args
+ (list %help-option)
+ (lambda (opt name arg result)
+ result)
+ (lambda (arg result)
+ result)
+ '())))
+ (display (format "Usage: ~a COMMAND [OPTIONS] [ARGS]
COMMAND must be one of the sub-commands listed below:
@@ -116,6 +130,6 @@ To get usage information for one of these sub-commands, run
~a COMMAND --help
"
- program program)
- (current-error-port))
- (exit (assq 'help args))))))
+ program program)
+ (current-error-port))
+ (exit (assq 'help args))))))))