ui: Add 'copy-file' replacement with better error reporting.
* guix/ui.scm (copy-file): New procedure.
This commit is contained in:
		
							parent
							
								
									f245b03deb
								
							
						
					
					
						commit
						9b14107f2d
					
				
					 1 changed files with 17 additions and 0 deletions
				
			
		
							
								
								
									
										17
									
								
								guix/ui.scm
									
										
									
									
									
								
							
							
						
						
									
										17
									
								
								guix/ui.scm
									
										
									
									
									
								
							| 
						 | 
				
			
			@ -246,6 +246,23 @@ General help using GNU software: <http://www.gnu.org/gethelp/>"))
 | 
			
		|||
                 (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)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Reference in a new issue