summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-10-01 22:09:58 +0200
committerLudovic Courtès <ludo@gnu.org>2020-10-02 08:11:38 +0200
commitf43ffee90882c2d61b46d69728daa7432be297e4 (patch)
tree78616df51a7950f27f4918b8395b2d1019228aad /tests
parent23dc21f05b54ef63daaea9eb301cfddbc4c82ddb (diff)
downloadguix-f43ffee90882c2d61b46d69728daa7432be297e4.tar.gz
gexp: 'local-file' warns when passed a non-literal relative file name.
Fixes <https://bugs.gnu.org/43736>.
Reported by Vitaliy Shatrov <guix.vits@disroot.org>.

* guix/gexp.scm (%local-file): Add #:literal? and #:location.
Emit a warning when LITERAL? is false and FILE is not absolute.
(local-file): In the non-literal case, pass #:location and #:literal?.
* po/guix/POTFILES.in: Add guix/gexp.scm.
* tests/guix-system.sh: Add test for the warning.
Diffstat (limited to 'tests')
-rw-r--r--tests/guix-system.sh14
1 files changed, 14 insertions, 0 deletions
diff --git a/tests/guix-system.sh b/tests/guix-system.sh
index 667e084fcf..957479ede0 100644
--- a/tests/guix-system.sh
+++ b/tests/guix-system.sh
@@ -297,6 +297,20 @@ EOF
 guix system build "$tmpdir/config.scm" -n
 (cd "$tmpdir"; guix system build "config.scm" -n)
 
+# Check that we get a warning when passing 'local-file' a non-literal relative
+# file name.
+cat > "$tmpdir/config.scm" <<EOF
+(use-modules (guix))
+
+(define (bad-local-file file)
+  (local-file file))
+
+(bad-local-file "whatever.scm")
+EOF
+! guix system build "$tmpdir/config.scm" -n
+guix system build "$tmpdir/config.scm" -n 2>&1 | \
+    grep "config\.scm:4:2: warning:.*whatever.*relative to current directory"
+
 # Searching.
 guix system search tor | grep "^name: tor"
 guix system search tor | grep "^shepherdnames: tor"