aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2015-04-20 22:37:20 +0200
committerLudovic Courtès <ludo@gnu.org>2015-04-20 22:37:20 +0200
commit44fd6ef137f4aa7b9eb9c999e57b450432c4e915 (patch)
treedc9114d8ba4966d758f78b4ff57fd38853cb3c4b
parent3392ce5d606be84c07624e0626b99e410449639f (diff)
downloadguix-44fd6ef137f4aa7b9eb9c999e57b450432c4e915.tar.gz
guix-44fd6ef137f4aa7b9eb9c999e57b450432c4e915.zip
ui: Add 'symlink' replacement with better error reporting.
* guix/ui.scm (symlink): New procedure.
-rw-r--r--guix/ui.scm16
1 files changed, 16 insertions, 0 deletions
diff --git a/guix/ui.scm b/guix/ui.scm
index f80ce37146..e717ab713e 100644
--- a/guix/ui.scm
+++ b/guix/ui.scm
@@ -42,6 +42,7 @@
#:use-module (ice-9 match)
#:use-module (ice-9 format)
#:use-module (ice-9 regex)
+ #:replace (symlink)
#:export (_
N_
P_
@@ -205,6 +206,21 @@ Report bugs to: ~a.") %guix-bug-report-address)
General help using GNU software: <http://www.gnu.org/gethelp/>"))
(newline))
+(define symlink
+ (let ((real-symlink (@ (guile) symlink)))
+ (lambda (target link)
+ "This is a 'symlink' replacement that provides proper error reporting."
+ (catch 'system-error
+ (lambda ()
+ (real-symlink target link))
+ (lambda (key proc fmt args errno)
+ ;; Augment the FMT and ARGS with information about LINK (this
+ ;; information is missing as of Guile 2.0.11, making the exception
+ ;; uninformative.)
+ (apply throw key proc "~A: ~S"
+ (append args (list link))
+ errno))))))
+
(define (string->number* str)
"Like `string->number', but error out with an error message on failure."
(or (string->number str)