From a2bae937712bd4c86274bdcc31e5a588cb3bda2b Mon Sep 17 00:00:00 2001 From: Puck Meerburg Date: Sat, 16 Nov 2024 16:44:32 +0000 Subject: [PATCH] (zilch lang go vfs): create multiple parent directories --- lang/go/src/vfs.sld | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/lang/go/src/vfs.sld b/lang/go/src/vfs.sld index fd6f8ff..ed7c323 100644 --- a/lang/go/src/vfs.sld +++ b/lang/go/src/vfs.sld @@ -144,6 +144,12 @@ (set! file (string-copy line 66)) (set! lines (cons (cons file hash) lines)))))) (define output (mapping (make-default-comparator))) + (define (create-parent-dirs dirname) + (define second-to-last-slash (string-index-right dirname (lambda (c) (char=? c #\/)))) + (when second-to-last-slash + (set! output (mapping-set! output (cons (string-copy dirname 0 second-to-last-slash) (string-copy dirname (+ second-to-last-slash 1))) 'directory)) + (create-parent-dirs (string-copy dirname 0 second-to-last-slash))) + (unless (or second-to-last-slash (string=? dirname "")) (set! output (mapping-set! output (cons "" dirname) 'directory)))) (for-each ; (path . hash) (lambda (pair) @@ -157,18 +163,12 @@ (set! dirname (string-copy file-path 0 last-slash)) (set! filename (string-copy file-path (+ last-slash 1)))) - ; Record directory name in the parent directory. - (unless last-slash - (let ((second-to-last-slash (string-index-right dirname (lambda (c) (char=? c #\/))))) - (if second-to-last-slash - (set! output (mapping-set! output (cons (string-copy dirname 0 second-to-last-slash) (string-copy dirname (+ second-to-last-slash 1))) 'directory)) - (unless (string=? dirname "") (set! output (mapping-set! output (cons "" dirname) 'directory)))))) - (define file (store-path-for-fod "file" "x86_64-linux" #~(#$unpack-zip #$zip ,(car pair)) '() "sha256" hash #f)) ; Skip files we know for sure won't be used. ; TODO(puck): this should be moved to vfs-filter-for-go-package? (unless (or (string-contains dirname "/_") (string-contains dirname "/.") (string-contains dirname "/testdata/") (char=? #\. (string-ref filename 0)) (char=? #\_ (string-ref filename 0))) + (create-parent-dirs dirname) (set! output (mapping-set! output (cons dirname filename) file)))) lines) (make-vfs output))