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))
 | 
					                 (append args (list link))
 | 
				
			||||||
                 errno))))))
 | 
					                 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)
 | 
					(define (string->number* str)
 | 
				
			||||||
  "Like `string->number', but error out with an error message on failure."
 | 
					  "Like `string->number', but error out with an error message on failure."
 | 
				
			||||||
  (or (string->number str)
 | 
					  (or (string->number str)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Reference in a new issue