diff options
Diffstat (limited to 'guix/digests.scm')
-rw-r--r-- | guix/digests.scm | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/guix/digests.scm b/guix/digests.scm index a1db2148d1..9b09b010f6 100644 --- a/guix/digests.scm +++ b/guix/digests.scm @@ -39,7 +39,9 @@ store-deduplication-link file-tree-digest file-digest - restore-digest)) + restore-digest + + digest->sexp)) ;;; Commentary: ;;; @@ -211,3 +213,22 @@ false." (symlink source target) (utime target 1 1 0 0 AT_SYMLINK_NOFOLLOW) missing)))) + +(define (digest->sexp digest) + "Return an sexp serialization of DIGEST." + (define (->sexp digest) + (match digest + (($ <digest> 'directory _ entries) + `(d ,@(map (match-lambda + (($ <digest-entry> name digest) + `(,name ,(->sexp digest)))) + entries))) + (($ <digest> (and type (or 'executable 'regular)) size + (algorithm hash)) + `(,(if (eq? type 'executable) 'x 'f) ,size + (,algorithm ,(bytevector->nix-base32-string hash)))) + (($ <digest> 'symlink _ target) + `(l ,target)))) + + `(digest (version 0) + ,(->sexp digest))) |