1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
| | ;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2022 pukkamustard <pukkamustard@posteo.net>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (guix eris)
#:use-module (eris)
#:use-module (eris fs)
#:use-module (eris sqlite)
#:use-module (eris read-capability)
#:use-module (web uri)
#:use-module (ice-9 match)
#:use-module (srfi srfi-171)
#:export (%eris-store-url
eris-encode-store-item))
(define %eris-store-url
(make-parameter
(getenv "ERIS_STORE_URL")
(lambda (val)
(cond
((uri? val) val)
((string? val) (string->uri val))
(else #f)))))
(define %guix-eris-convergence-secret
(make-parameter %null-convergence-secret))
(define (guix-eris-block-reducer)
"Returns an ERIS block reducer."
(if (uri? (%eris-store-url))
(match (uri-scheme (%eris-store-url))
;; Store blocks in an SQLite database (see
;; https://eris.codeberg.page/eer/sqlite.xml)
('sqlite
(eris-sqlite-block-reducer (uri-path (%eris-store-url))))
;; TODO
;; ('coap+unix #f)
;; ('coap+tcp #f)
(_ (error "Don't know how to handle ERIS store URL "
(uri->string (%eris-store-url)))))
;; If no ERIS store URL is provided we just compute the ERIS URN without
;; storing the blocks anywhere. As dummy block-reducer we use `rcount` from
;; SRFI-171 that counts the number of blocks.
rcount))
(define* (eris-encode-store-item item)
"Encodes the store item ITEM using ERIS and returns the read capability as
string."
(eris-read-capability->string
(eris-fs-encode item
#:convergence-secret (%guix-eris-convergence-secret)
#:block-reducer (guix-eris-block-reducer))))
|