summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--guix/records.scm12
-rw-r--r--tests/records.scm14
2 files changed, 23 insertions, 3 deletions
diff --git a/guix/records.scm b/guix/records.scm
index 64581f1be2..57664df5a6 100644
--- a/guix/records.scm
+++ b/guix/records.scm
@@ -217,13 +217,23 @@ PORT, according to FIELDS.  FIELDS must be a list of field name/getter pairs."
 (define %recutils-field-rx
   (make-regexp "^([[:graph:]]+): (.*)$"))
 
+(define %recutils-comment-rx
+  ;; info "(recutils) Comments"
+  (make-regexp "^#"))
+
 (define (recutils->alist port)
   "Read a recutils-style record from PORT and return it as a list of key/value
 pairs.  Stop upon an empty line (after consuming it) or EOF."
   (let loop ((line   (read-line port))
              (result '()))
-    (cond ((or (eof-object? line) (string-null? line))
+    (cond ((eof-object? line)
            (reverse result))
+          ((string-null? line)
+           (if (null? result)
+               (loop (read-line port) result)     ; leading space: ignore it
+               (reverse result)))                 ; end-of-record marker
+          ((regexp-exec %recutils-comment-rx line)
+           (loop (read-line port) result))
           ((regexp-exec %recutils-field-rx line)
            =>
            (lambda (match)
diff --git a/tests/records.scm b/tests/records.scm
index 470644451c..d0635ebb1f 100644
--- a/tests/records.scm
+++ b/tests/records.scm
@@ -138,13 +138,23 @@
      ("Something_else" . "chbouib"))
     (("Name" . "bar")
      ("Version" . "1.5")))
-  (let ((p (open-input-string "Name: foo
+  (let ((p (open-input-string "
+# Comment following an empty line, and
+# preceding a couple of empty lines, all of
+# which should be silently consumed.
+
+
+Name: foo
 Version: 0.1
+# Comment right in the middle,
+# spanning two lines.
 Synopsis: foo bar
 Something_else: chbouib
 
+# Comment right before.
 Name: bar
-Version: 1.5")))
+Version: 1.5
+# Comment at the end.")))
     (list (recutils->alist p)
           (recutils->alist p))))