ngz pushed a commit to branch tex-team
in repository guix.

commit 0709868ff24f0b91380659269d7d4678bc9b5a5a
Author: Nicolas Goaziou <m...@nicolasgoaziou.fr>
AuthorDate: Sun Jun 23 17:29:37 2024 +0200

    guix: download-multi-svn-to-store: Allow exporting from base URL.
    
    * guix/svn-download.scm (download-multi-svn-to-store): Allow exporting from
    locations such as "./" or "somefile.txt".
    
    Change-Id: If37362e4672b175fe413acc56ed67064ad998fe3
---
 guix/svn-download.scm | 40 ++++++++++++++++++++++++----------------
 1 file changed, 24 insertions(+), 16 deletions(-)

diff --git a/guix/svn-download.scm b/guix/svn-download.scm
index 62649e4374..b20cdc79d1 100644
--- a/guix/svn-download.scm
+++ b/guix/svn-download.scm
@@ -351,21 +351,29 @@ reports to LOG."
 reports to LOG."
   (call-with-temporary-directory
    (lambda (temp)
-     (and (every (lambda (location)
-                   (let ((dir (string-append temp "/" (dirname location))))
-                     (mkdir-p dir))
-                   (parameterize ((current-output-port log))
-                     (build:svn-fetch (string-append (svn-multi-reference-url 
ref)
-                                                     "/" location)
-                                      (svn-multi-reference-revision ref)
-                                      (if (string-suffix? "/" location)
-                                          (string-append temp "/" location)
-                                          (string-append temp "/" (dirname 
location)))
-                                      #:recursive?
-                                      (svn-multi-reference-recursive? ref)
-                                      #:user-name 
(svn-multi-reference-user-name ref)
-                                      #:password (svn-multi-reference-password 
ref))))
-                 (svn-multi-reference-locations ref))
-          (add-to-store store name #t "sha256" temp)))))
+     ;; When "svn" is called, TEMP already exists.  As a consequence, "svn"
+     ;; refuses to export files there, assuming it would overwrite a previous
+     ;; export.  It can be an issue if locations includes files at SVN URL.
+     ;; To circumvent this, export in a fresh sub-directory.
+     (let ((output (string-append temp "/svn")))
+       (mkdir-p output)
+       (and (every (lambda (location)
+                     (unless (string-suffix? "/" location)
+                       (mkdir-p (string-append output "/" (dirname location))))
+                     (parameterize ((current-output-port log))
+                       (build:svn-fetch
+                        (string-append (svn-multi-reference-url ref)
+                                       "/"
+                                       location)
+                        (svn-multi-reference-revision ref)
+                        (if (string-suffix? "/" location)
+                            (string-append output "/" location)
+                            (string-append output "/" (dirname location)))
+                        #:recursive?
+                        (svn-multi-reference-recursive? ref)
+                        #:user-name (svn-multi-reference-user-name ref)
+                        #:password (svn-multi-reference-password ref))))
+                   (svn-multi-reference-locations ref))
+            (add-to-store store name #t "sha256" output))))))
 
 ;;; svn-download.scm ends here

Reply via email to