[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
11/142: utils: Fix wrap-script argument handling.
From: |
guix-commits |
Subject: |
11/142: utils: Fix wrap-script argument handling. |
Date: |
Mon, 10 Jan 2022 13:07:13 -0500 (EST) |
apteryx pushed a commit to branch version-1.4.0
in repository guix.
commit 7f8a896c5f3ecde60a19f244d5a407ec1033a08d
Author: Brendan Tildesley <mail@brendan.scot>
AuthorDate: Thu Apr 29 20:33:08 2021 +1000
utils: Fix wrap-script argument handling.
* guix/build/utils.scm (wrap-script):
Don't add (car cl) one too many times, cl its self contains it's car.
Split the aguments string with string-tokenize to avoid leaving an empty
string argument when there should be none. These two bugs seemed to
be partially cancelling each other out so that scripts still worked when
ran with no arguments.
* tests/build-utils.scm: Adjust wrap-script to above changes.
Add two tests to ensure the command line arguments appear identical to a
script and its wrapped version.
Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com>
---
guix/build/utils.scm | 8 ++++----
tests/build-utils.scm | 57 +++++++++++++++++++++++++++++++++++++++++++++------
2 files changed, 55 insertions(+), 10 deletions(-)
diff --git a/guix/build/utils.scm b/guix/build/utils.scm
index 3beb7da67a..dd5a91f52f 100644
--- a/guix/build/utils.scm
+++ b/guix/build/utils.scm
@@ -8,6 +8,7 @@
;;; Copyright © 2020 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2020, 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -1462,10 +1463,9 @@ not supported."
`(let ((cl (command-line)))
(apply execl ,interpreter
(car cl)
- (cons (car cl)
- (append
- ',(string-split args
#\space)
- cl))))))
+ (append
+ ',(string-tokenize args
char-set:graphic)
+ cl)))))
(template (string-append prog ".XXXXXX"))
(out (mkstemp! template))
(st (stat prog))
diff --git a/tests/build-utils.scm b/tests/build-utils.scm
index 6b131c0af8..7f4f12ccc7 100644
--- a/tests/build-utils.scm
+++ b/tests/build-utils.scm
@@ -3,6 +3,7 @@
;;; Copyright © 2019 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2021 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
+;;; Copyright © 2021 Brendan Tildesley <mail@brendan.scot>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -167,9 +168,7 @@ echo hello world"))
"/some/path:/some/other/path"))))
'(let ((cl (command-line)))
(apply execl "/anything/cabbage-bash-1.2.3/bin/sh"
- (car cl)
- (cons (car cl)
- (append '("") cl)))))
+ (car cl) (append (quote ()) cl))))
script-contents)
(call-with-temporary-directory
(lambda (directory)
@@ -208,8 +207,7 @@ print('hello world')"))
`(let ((cl (command-line)))
(apply execl "/anything/cabbage-bash-1.2.3/bin/python3"
(car cl)
- (cons (car cl)
- (append '("" "-and" "-args") cl)))))
+ (append '("-and" "-args") cl))))
script-contents)
(call-with-temporary-directory
(lambda (directory)
@@ -243,6 +241,54 @@ print('hello world')"))
"/some/other/path")))
#f)))))
+(define (arg-test bash-args)
+ (call-with-temporary-directory
+ (lambda (directory)
+ (let ((script-file-name (string-append directory "/bash-test.sh")))
+ (call-with-output-file script-file-name
+ (lambda (port)
+ (display (string-append "\
+#!" (which "bash") bash-args "
+echo \"$#$0$*${A}\"")
+ port)))
+
+ (display "Unwrapped script contents:\n")
+ (call-with-input-file script-file-name
+ (lambda (port) (display (get-string-all port))))
+ (newline) (newline)
+ (chmod script-file-name #o777)
+ (setenv "A" "A")
+ (let* ((run-script (lambda _
+ (open-pipe*
+ OPEN_READ
+ script-file-name "1" "2" "3 3" "4")))
+ (pipe (run-script))
+ (unwrapped-output (get-string-all pipe)))
+ (close-pipe pipe)
+
+ (wrap-script script-file-name `("A" = ("A\nA")))
+
+ (display "Wrapped script contents:\n")
+ (call-with-input-file script-file-name
+ (lambda (port) (display (get-string-all port))))
+ (newline) (newline)
+
+ (let* ((pipe (run-script))
+ (wrapped-output (get-string-all pipe)))
+ (close-pipe pipe)
+ (display "./bash-test.sh 1 2 3\\ 3 4 # Output:\n")
+ (display unwrapped-output) (newline)
+ (display "./bash-test.sh 1 2 3\\ 3 4 # Output (wrapped):\n")
+ (display wrapped-output) (newline)
+ (string=? (string-append unwrapped-output "A\n")
+ wrapped-output)))))))
+
+(test-assert "wrap-script, argument handling"
+ (arg-test ""))
+
+(test-assert "wrap-script, argument handling, bash --norc"
+ (arg-test " --norc"))
+
(test-equal "substitute*, text contains a NUL byte, UTF-8"
"c\0d"
(with-fluids ((%default-port-encoding "UTF-8")
@@ -287,5 +333,4 @@ print('hello world')"))
("guile/bin" . ,(dirname (which "guile"))))
"guile"))))
-
(test-end)
- branch version-1.4.0 created (now a02c1ce716), guix-commits, 2022/01/10
- 01/142: sitecustomize.py: Honor .pth files., guix-commits, 2022/01/10
- 04/142: gnu: python-packaging-bootstrap: Update to 21.3., guix-commits, 2022/01/10
- 06/142: gnu: python-pyparsing: Update to 3.0.6., guix-commits, 2022/01/10
- 11/142: utils: Fix wrap-script argument handling.,
guix-commits <=
- 15/142: gnu: isc-dhcp: Address TODOs., guix-commits, 2022/01/10
- 09/142: gnu: meson: Update to 0.60.2 and absorb meson-wrapped., guix-commits, 2022/01/10
- 10/142: gnu: Remove meson-0.59 workarounds., guix-commits, 2022/01/10
- 02/142: gnu: libx11: Update to 1.7.3.1., guix-commits, 2022/01/10
- 08/142: gnu: python-flit-core: Update to 3.5.1., guix-commits, 2022/01/10
- 03/142: gnu: mesa: Update to 21.3.2., guix-commits, 2022/01/10
- 16/142: gnu: binutils: Absorb binutils-next., guix-commits, 2022/01/10
- 31/142: gnu: glibmm-2.64: Fix libsigc++ propagation., guix-commits, 2022/01/10
- 19/142: gnu: gobject-introspection: Unconditionally use flex and bison., guix-commits, 2022/01/10
- 14/142: gnu: autoconf-2.69: Repatriate unpatch-shebangs phase from 2.71., guix-commits, 2022/01/10