Subject: [PATCH 2/2] guix: build: svn: Add 'guard' to handle error.

From: zimoun <[email-masked]>
Date: Mon, 5 Oct 2020 18:47:39 +0200

* guix/build/svn.scm (svn-fetch): Add 'guard' to handle error.
---
 guix/build/svn.scm | 20 ++++++++++++++++++--
 1 file changed, 18 insertions(+), 2 deletions(-)

diff --git a/guix/build/svn.scm b/guix/build/svn.scm
index 33783f3056..0afe887487 100644
--- a/guix/build/svn.scm
+++ b/guix/build/svn.scm
@@ -2,6 +2,7 @@
 ;;; Copyright © 2014 Ludovic Courtès <[email-masked]>
 ;;; Copyright © 2014 Sree Harsha Totakura <[email-masked]>
 ;;; Copyright © 2018 Mark H Weaver <[email-masked]>
+;;; Copyright © 2020 Simon Tournier <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -20,6 +21,8 @@
 
 (define-module (guix build svn)
   #:use-module (guix build utils)
+  #:use-module (srfi srfi-34)
+  #:use-module (ice-9 format)
   #:export (svn-fetch))
 
 ;;; Commentary:
@@ -36,7 +39,20 @@
                     (password #f))
   "Fetch REVISION from URL into DIRECTORY.  REVISION must be an integer, and a
 valid Subversion revision.  Return #t on success, #f otherwise."
-  (apply invoke svn-command
+  (mkdir-p directory)
+
+  (guard (c ((invoke-error? c)
+             (format (current-error-port)
+                     "svn-fetch: '~a~{ ~a~}' failed with exit code ~a~%"
+                     (invoke-error-program c)
+                     (invoke-error-arguments c)
+                     (or (invoke-error-exit-status c) ;XXX: not quite accurate
+                         (invoke-error-stop-signal c)
+                         (invoke-error-term-signal c)))
+             (delete-file-recursively directory)
+             #f))
+    (with-directory-excursion directory
+      (apply invoke svn-command
          "export" "--non-interactive"
          ;; Trust the server certificate.  This is OK as we
          ;; verify the checksum later.  This can be removed when
@@ -50,6 +66,6 @@ valid Subversion revision.  Return #t on success, #f otherwise."
                  '()
                  (list "--ignore-externals"))
            ,url ,directory))
-  #t)
+      #t)))
 
 ;;; svn.scm ends here
-- 
2.28.0