From 9b14107f2d686a5554bc174856f345d8daaff22d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Sun, 24 May 2015 17:22:43 +0200 Subject: [PATCH] ui: Add 'copy-file' replacement with better error reporting. * guix/ui.scm (copy-file): New procedure. --- guix/ui.scm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/guix/ui.scm b/guix/ui.scm index 9bab7c51dd..372733c243 100644 --- a/guix/ui.scm +++ b/guix/ui.scm @@ -246,6 +246,23 @@ General help using GNU software: ")) (append args (list link)) errno)))))) +(set! copy-file + ;; Note: here we use 'set!', not #:replace, because UIs typically use + ;; 'copy-recursively', which doesn't use (guix ui). + (let ((real-copy-file (@ (guile) copy-file))) + (lambda (source target) + "This is a 'copy-file' replacement that provides proper error reporting." + (catch 'system-error + (lambda () + (real-copy-file source target)) + (lambda (key proc fmt args errno) + ;; Augment the FMT and ARGS with information about TARGET (this + ;; information is missing as of Guile 2.0.11, making the exception + ;; uninformative.) + (apply throw key proc "~A: ~S" + (list (strerror (car errno)) target) + (list errno))))))) + (define (string->number* str) "Like `string->number', but error out with an error message on failure." (or (string->number str)