~ruther/guix-local

44fd6ef137f4aa7b9eb9c999e57b450432c4e915 — Ludovic Courtès 11 years ago 3392ce5
ui: Add 'symlink' replacement with better error reporting.

* guix/ui.scm (symlink): New procedure.
1 files changed, 16 insertions(+), 0 deletions(-)

M guix/ui.scm
M guix/ui.scm => guix/ui.scm +16 -0
@@ 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)