diff options
author | Ludovic Courtès <ludo@gnu.org> | 2020-03-23 10:08:41 +0100 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2020-03-23 10:48:17 +0100 |
commit | 8f53d73493a2949e2db28cd7d689a690b2d9479a (patch) | |
tree | baa5a5a07deca05b0bbdfd41455cb56d62607c7e | |
parent | 1eb27d5caec488dc901965b4cff8723e3670be90 (diff) | |
download | patches-8f53d73493a2949e2db28cd7d689a690b2d9479a.tar patches-8f53d73493a2949e2db28cd7d689a690b2d9479a.tar.gz |
ssh: 'send-files' reports missing modules on the remote host.
Reported by Mikael Djurfeldt <mikael@djurfeldt.com>
in <https://bugs.gnu.org/40125>.
* guix/ssh.scm (send-files)[inferior-remote-eval*]: New procedure.
[missing]: Use it. Add an explicit 'resolve-module' call.
(report-inferior-exception): New procedure.
-rw-r--r-- | guix/ssh.scm | 22 |
1 files changed, 20 insertions, 2 deletions
diff --git a/guix/ssh.scm b/guix/ssh.scm index 56b49b177f..2d7ca7d01d 100644 --- a/guix/ssh.scm +++ b/guix/ssh.scm @@ -1,5 +1,5 @@ ;;; GNU Guix --- Functional package management for GNU -;;; Copyright © 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org> +;;; Copyright © 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org> ;;; ;;; This file is part of GNU Guix. ;;; @@ -405,11 +405,24 @@ to the system ACL file if it has not yet been authorized." "Send the subset of FILES from LOCAL (a local store) that's missing to REMOTE, a remote store. When RECURSIVE? is true, send the closure of FILES. Return the list of store items actually sent." + (define (inferior-remote-eval* exp session) + (guard (c ((inferior-exception? c) + (match (inferior-exception-arguments c) + (('quit 7) + (report-module-error (remote-store-host remote))) + (_ + (report-inferior-exception c (remote-store-host remote)))))) + (inferior-remote-eval exp session))) + ;; Compute the subset of FILES missing on SESSION and send them. (let* ((files (if recursive? (requisites local files) files)) (session (channel-get-session (store-connection-socket remote))) - (missing (inferior-remote-eval + (missing (inferior-remote-eval* `(begin + (eval-when (load expand eval) + (unless (resolve-module '(guix) #:ensure #f) + (exit 7))) + (use-modules (guix) (srfi srfi-1) (srfi srfi-26)) @@ -567,4 +580,9 @@ own module directory. Run @command{ssh ~A env | grep GUILE_LOAD_PATH} to check.") host))) +(define (report-inferior-exception exception host) + "Report EXCEPTION, an &inferior-exception that occurred on HOST." + (raise-error (G_ "exception occurred on remote host '~A': ~s") + host (inferior-exception-arguments exception))) + ;;; ssh.scm ends here |