substitute: Set LC_MESSAGES to the client's locale, not LC_ALL.

Fixes <https://bugs.gnu.org/43039>.
Reported by Adam Griffiths <adam.lw.griffiths@gmail.com>.

Previously, a client could lead 'guix substitute' to run in a non-UTF-8
locale, such as the "C" locale.  Consequently, 'guix substitute' would
now fail to decode UTF-8 file names such as those that appear in the
'nss-certs' package.

* guix/scripts/substitute.scm (guix-substitute): Set LC_MESSAGES, not LC_ALL.
This commit is contained in:
Ludovic Courtès 2020-09-02 15:53:06 +02:00
parent 8ce6f4dc28
commit aba8def46d
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5

View file

@ -1126,12 +1126,13 @@ (define print-build-trace?
;; Sanity-check SUBSTITUTE-URLS so we can provide a meaningful error message.
(for-each validate-uri (substitute-urls))
;; Attempt to install the client's locale, mostly so that messages are
;; suitably translated.
;; Attempt to install the client's locale so that messages are suitably
;; translated. LC_CTYPE must be a UTF-8 locale; it's the case by default so
;; don't change it.
(match (or (find-daemon-option "untrusted-locale")
(find-daemon-option "locale"))
(#f #f)
(locale (false-if-exception (setlocale LC_ALL locale))))
(locale (false-if-exception (setlocale LC_MESSAGES locale))))
(catch 'system-error
(lambda ()