summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-03-23 10:08:41 +0100
committerLudovic Courtès <ludo@gnu.org>2020-03-23 10:48:17 +0100
commit8f53d73493a2949e2db28cd7d689a690b2d9479a (patch)
treebaa5a5a07deca05b0bbdfd41455cb56d62607c7e
parent1eb27d5caec488dc901965b4cff8723e3670be90 (diff)
downloadpatches-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.scm22
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