~ruther/guix-local

4eb0f9ae05a9bf20fb91c49b39bebc687265c5e5 — Ludovic Courtès 8 years ago 5a5e34e
offload: 'test' reports Guile and module errors more nicely.

Fixes <https://bugs.gnu.org/26008>.
Reported by Myles English <mylesenglish@gmail.com>.

* guix/ssh.scm (retrieve-files*): Move error reporting to...
(report-guile-error, report-module-error): ... here.  New procedures.
* guix/scripts/offload.scm (assert-node-repl): Use 'report-guile-error'.
(assert-node-has-guix): Explicitly check for 'use-modules' first.  Use
'report-module-error'.
2 files changed, 40 insertions(+), 18 deletions(-)

M guix/scripts/offload.scm
M guix/ssh.scm
M guix/scripts/offload.scm => guix/scripts/offload.scm +13 -3
@@ 542,8 542,7 @@ slot (which must later be released with 'release-build-slot'), or #f and #f."
  "Bail out if NODE is not running Guile."
  (match (node-guile-version node)
    (#f
     (leave (G_ "Guile could not be started on '~a'~%")
            name))
     (report-guile-error name))
    ((? string? version)
     ;; Note: The version string already contains the word "Guile".
     (info (G_ "'~a' is running ~a~%")


@@ 556,6 555,17 @@ slot (which must later be released with 'release-build-slot'), or #f and #f."
      (match (node-eval node
                        '(begin
                           (use-modules (guix))
                           (and add-text-to-store 'alright)))
        ('alright #t)
        (_ (report-module-error name))))
    (lambda (key . args)
      (report-module-error name)))

  (catch 'node-repl-error
    (lambda ()
      (match (node-eval node
                        '(begin
                           (use-modules (guix))
                           (with-store store
                             (add-text-to-store store "test"
                                                "Hello, build machine!"))))


@@ 563,7 573,7 @@ slot (which must later be released with 'release-build-slot'), or #f and #f."
         (info (G_ "Guix is usable on '~a' (test returned ~s)~%")
               name str))
        (x
         (leave (G_ "failed to use Guix module on '~a' (test returned ~s)~%")
         (leave (G_ "failed to talk to guix-daemon on '~a' (test returned ~s)~%")
                name x))))
    (lambda (key . args)
      (leave (G_ "remove evaluation on '~a' failed:~{ ~s~}~%")

M guix/ssh.scm => guix/ssh.scm +27 -15
@@ 41,7 41,10 @@
            send-files
            retrieve-files
            retrieve-files*
            remote-store-host))
            remote-store-host

            report-guile-error
            report-module-error))

;;; Commentary:
;;;


@@ 365,21 368,9 @@ from REMOTE.  When RECURSIVE? is true, retrieve the closure of FILES."
         (lambda ()
           (close-port port))))
      ((? eof-object?)
       (raise-error (G_ "failed to start Guile on remote host '~A': exit code ~A")
                    (remote-store-host remote)
                    (channel-get-exit-status port)
                    (=> (G_ "Make sure @command{guile} can be found in
@code{$PATH} on the remote host.  Run @command{ssh ~A guile --version} to
check.")
                        (remote-store-host remote))))
       (report-guile-error (remote-store-host remote)))
      (('module-error . _)
       ;; TRANSLATORS: Leave "Guile" untranslated.
       (raise-error (G_ "Guile modules not found on remote host '~A'")
                    (remote-store-host remote)
                    (=> (G_ "Make sure @code{GUILE_LOAD_PATH} includes Guix'
own module directory.  Run @command{ssh ~A env | grep GUILE_LOAD_PATH} to
check.")
                        (remote-store-host remote))))
       (report-module-error (remote-store-host remote)))
      (('connection-error file code . _)
       (raise-error (G_ "failed to connect to '~A' on remote host '~A': ~a")
                    file (remote-store-host remote) (strerror code)))


@@ 406,4 397,25 @@ LOCAL.  When RECURSIVE? is true, retrieve the closure of FILES."
                   #:import (lambda (port)
                              (import-paths local port))))


;;;
;;; Error reporting.
;;;

(define (report-guile-error host)
  (raise-error (G_ "failed to start Guile on remote host '~A'") host
               (=> (G_ "Make sure @command{guile} can be found in
@code{$PATH} on the remote host.  Run @command{ssh ~A guile --version} to
check.")
                   host)))

(define (report-module-error host)
  "Report an error about missing Guix modules on HOST."
  ;; TRANSLATORS: Leave "Guile" untranslated.
  (raise-error (G_ "Guile modules not found on remote host '~A'") host
               (=> (G_ "Make sure @code{GUILE_LOAD_PATH} includes Guix'
own module directory.  Run @command{ssh ~A env | grep GUILE_LOAD_PATH} to
check.")
                   host)))

;;; ssh.scm ends here