blob: 7afbe7ba8e465f6de21ed388d9ece5c172d1acb9 (
plain)
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
|
#! /usr/bin/env guile
!#
(use-modules (ice-9 format)
(ice-9 getopt-long)
(ice-9 ftw)
(ice-9 regex)
(srfi srfi-26)
(srfi srfi-34)
(srfi srfi-35))
;; Copied over from GNU/Guix source tree.
(define (file-name-predicate regexp)
"Return a predicate that returns true when passed a file name whose base
name matches REGEXP."
(let ((file-rx (if (regexp? regexp)
regexp
(make-regexp regexp))))
(lambda (file stat)
(regexp-exec file-rx (basename file)))))
(define* (find-files dir #:optional (pred (const #t))
#:key (stat lstat)
directories?
fail-on-error?)
"Return the lexicographically sorted list of files under DIR for which PRED
returns true. PRED is passed two arguments: the absolute file name, and its
stat buffer; the default predicate always returns true. PRED can also be a
regular expression, in which case it is equivalent to (file-name-predicate
PRED). STAT is used to obtain file information; using 'lstat' means that
symlinks are not followed. If DIRECTORIES? is true, then directories will
also be included. If FAIL-ON-ERROR? is true, raise an exception upon error."
(let ((pred (if (procedure? pred)
pred
(file-name-predicate pred))))
;; Sort the result to get deterministic results.
(sort (file-system-fold (const #t)
(lambda (file stat result) ; leaf
(if (pred file stat)
(cons file result)
result))
(lambda (dir stat result) ; down
(if (and directories?
(pred dir stat))
(cons dir result)
result))
(lambda (dir stat result) ; up
result)
(lambda (file stat result) ; skip
result)
(lambda (file stat errno result)
(format (current-error-port) "find-files: ~a: ~a~%"
file (strerror errno))
(when fail-on-error?
(error "find-files failed"))
result)
'()
dir
stat)
string<?)))
(define-syntax-rule (warn-on-error expr file)
(catch 'system-error
(lambda ()
expr)
(lambda args
(format (current-error-port)
"warning: failed to delete ~a: ~a~%"
file (strerror
(system-error-errno args))))))
(define* (delete-file-recursively dir
#:key follow-mounts?)
"Delete DIR recursively, like `rm -rf', without following symlinks. Don't
follow mount points either, unless FOLLOW-MOUNTS? is true. Report but ignore
errors."
(let ((dev (stat:dev (lstat dir))))
(file-system-fold (lambda (dir stat result) ; enter?
(or follow-mounts?
(= dev (stat:dev stat))))
(lambda (file stat result) ; leaf
(warn-on-error (delete-file file) file))
(const #t) ; down
(lambda (dir stat result) ; up
(warn-on-error (rmdir dir) dir))
(const #t) ; skip
(lambda (file stat errno result)
(format (current-error-port)
"warning: failed to delete ~a: ~a~%"
file (strerror errno)))
#t
dir
;; Don't follow symlinks.
lstat)))
(let* ((option-spec
'((settings (single-char #\s) (value #t))
(documentation (single-char #\d) (value #t))
(output (single-char #\o) (value #t))))
(options (getopt-long (command-line) option-spec))
(settings (option-ref options 'settings #f))
(output (option-ref options 'output #f))
(documentation (option-ref options 'documentation #f))
(%source-dir (dirname (current-filename))))
(unless (file-exists? output)
(mkdir output))
;; Transform data to RDF
(for-each (lambda (file)
(let* ((base-file-name (basename file ".scm"))
(ttl-file (string-append output "/" base-file-name ".ttl")))
;; Ignore dataset-metadata-git.scm because TODO
(unless (string=? base-file-name "dataset-metadata-git")
(system* "./pre-inst-env" file "--settings" settings
"--output" ttl-file))))
(find-files "./examples" ".scm"))
;; Copy hand-woven ttl files.
(for-each (lambda (file)
(copy-file
file (format #f "~a/~a" output (basename file))))
(find-files "./schema" ".ttl"))
;; Validate transformed turtle files
(for-each (lambda (file)
(system* "rapper" "--input" "turtle" "--count" file))
(append (find-files output ".ttl")
(find-files "./schema" ".ttl"))))
|