~ruther/guix-local

23735137eb666e9fe2e848563615bca5bcea1282 — Ludovic Courtès 8 years ago 37eed37
ui: Define and honor '&error-location' and '&fix-hint' conditions.

* guix/utils.scm (&error-location, &fix-hint): New condition types.
* guix/ui.scm (report-load-error): Handle them.
(call-with-error-handling): Honor '&error-location'.
2 files changed, 36 insertions(+), 4 deletions(-)

M guix/ui.scm
M guix/utils.scm
M guix/ui.scm => guix/ui.scm +19 -4
@@ 251,10 251,20 @@ ARGS is the list of arguments received by the 'throw' handler."
               (location->string loc) message)))
    (('srfi-34 obj)
     (if (message-condition? obj)
         (report-error (G_ "~a~%")
                       (gettext (condition-message obj)
                                %gettext-domain))
         (report-error (G_ "exception thrown: ~s~%") obj)))
         (if (error-location? obj)
             (format (current-error-port)
                     (G_ "~a: error: ~a~%")
                     (location->string (error-location obj))
                     (gettext (condition-message obj)
                              %gettext-domain))
             (report-error (G_ "~a~%")
                           (gettext (condition-message obj)
                                    %gettext-domain)))
         (report-error (G_ "exception thrown: ~s~%") obj))
     (when (fix-hint? obj)
       (format (current-error-port) (G_ "hint: ~a~%")
               (fill-paragraph (texi->plain-text (condition-fix-hint obj))
                               (terminal-columns) 8))))
    ((error args ...)
     (report-error (G_ "failed to load '~a':~%") file)
     (apply display-error frame (current-error-port) args))))


@@ 517,6 527,11 @@ interpreted."
directories:~{ ~a~}~%")
                    (file-search-error-file-name c)
                    (file-search-error-search-path c)))
            ((and (error-location? c) (message-condition? c))
             (format (current-error-port)
                     (G_ "~a: error: ~a~%")
                     (location->string (error-location c))
                     (gettext (condition-message c) %gettext-domain)))
            ((message-condition? c)
             ;; Normally '&message' error conditions have an i18n'd message.
             (leave (G_ "~a~%")

M guix/utils.scm => guix/utils.scm +17 -0
@@ 28,6 28,7 @@
  #:use-module (srfi srfi-9)
  #:use-module (srfi srfi-11)
  #:use-module (srfi srfi-26)
  #:use-module (srfi srfi-35)
  #:use-module (srfi srfi-39)
  #:use-module (ice-9 binary-ports)
  #:autoload   (rnrs io ports) (make-custom-binary-input-port)


@@ 60,6 61,14 @@
            source-properties->location
            location->source-properties

            &error-location
            error-location?
            error-location

            &fix-hint
            fix-hint?
            condition-fix-hint

            nix-system->gnu-triplet
            gnu-triplet->nix-system
            %current-system


@@ 750,6 759,14 @@ a location object."
    (column   . ,(location-column loc))
    (filename . ,(location-file loc))))

(define-condition-type &error-location &error
  error-location?
  (location  error-location))                     ;<location>

(define-condition-type &fix-hint &condition
  fix-hint?
  (hint condition-fix-hint))                      ;string

;;; Local Variables:
;;; eval: (put 'call-with-progress-reporter 'scheme-indent-function 1)
;;; End: