serialization: 'fold-archive' notifies about directory processing completion.
* guix/serialization.scm (fold-archive): Call PROC with a 'directory-complete tag when done with a directory. (restore-file): Handle it. * guix/scripts/archive.scm (list-contents): Likewise. * guix/scripts/challenge.scm (archive-contents): Likewise. * tests/nar.scm ("write-file-tree + fold-archive"): Adjust accordingly.master
parent
7a2897149d
commit
465d2cb286
|
@ -347,6 +347,8 @@ output port."
|
||||||
(match type
|
(match type
|
||||||
('directory
|
('directory
|
||||||
(format #t "D ~a~%" file))
|
(format #t "D ~a~%" file))
|
||||||
|
('directory-complete
|
||||||
|
#t)
|
||||||
('symlink
|
('symlink
|
||||||
(format #t "S ~a -> ~a~%" file content))
|
(format #t "S ~a -> ~a~%" file content))
|
||||||
((or 'regular 'executable)
|
((or 'regular 'executable)
|
||||||
|
|
|
@ -210,6 +210,7 @@ taken since we do not import the archives."
|
||||||
(cons `(,file ,type ,(port-sha256* port size))
|
(cons `(,file ,type ,(port-sha256* port size))
|
||||||
result))))
|
result))))
|
||||||
('directory result)
|
('directory result)
|
||||||
|
('directory-complete result)
|
||||||
('symlink
|
('symlink
|
||||||
(cons `(,file ,type ,contents) result))))
|
(cons `(,file ,type ,contents) result))))
|
||||||
'()
|
'()
|
||||||
|
|
|
@ -444,7 +444,8 @@ depends on TYPE."
|
||||||
(file file)
|
(file file)
|
||||||
(token x))))))
|
(token x))))))
|
||||||
(loop (read-string port) result)))))
|
(loop (read-string port) result)))))
|
||||||
(")" result) ;done with DIR
|
(")" ;done with DIR
|
||||||
|
(proc file 'directory-complete #f result))
|
||||||
(x
|
(x
|
||||||
(raise
|
(raise
|
||||||
(condition
|
(condition
|
||||||
|
@ -463,6 +464,8 @@ Restore it as FILE."
|
||||||
(match type
|
(match type
|
||||||
('directory
|
('directory
|
||||||
(mkdir file))
|
(mkdir file))
|
||||||
|
('directory-complete
|
||||||
|
#t)
|
||||||
('symlink
|
('symlink
|
||||||
(symlink content file))
|
(symlink content file))
|
||||||
((or 'regular 'executable)
|
((or 'regular 'executable)
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
;;; GNU Guix --- Functional package management for GNU
|
;;; GNU Guix --- Functional package management for GNU
|
||||||
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
|
;;; Copyright © 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -218,8 +218,10 @@
|
||||||
'(("R" directory #f)
|
'(("R" directory #f)
|
||||||
("R/dir" directory #f)
|
("R/dir" directory #f)
|
||||||
("R/dir/exe" executable "1234")
|
("R/dir/exe" executable "1234")
|
||||||
|
("R/dir" directory-complete #f)
|
||||||
("R/foo" regular "abcdefg")
|
("R/foo" regular "abcdefg")
|
||||||
("R/lnk" symlink "foo"))
|
("R/lnk" symlink "foo")
|
||||||
|
("R" directory-complete #f))
|
||||||
|
|
||||||
(let ()
|
(let ()
|
||||||
(define-values (port get-bytevector)
|
(define-values (port get-bytevector)
|
||||||
|
|
Reference in New Issue