From aba8def46d392b3ef2278d16a2c9708fab05c6fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= <ludo@gnu.org>
Date: Wed, 2 Sep 2020 15:53:06 +0200
Subject: [PATCH] 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.
---
 guix/scripts/substitute.scm | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/guix/scripts/substitute.scm b/guix/scripts/substitute.scm
index f9d19fd735f..117d8244495 100755
--- a/guix/scripts/substitute.scm
+++ b/guix/scripts/substitute.scm
@@ -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 ()
-- 
GitLab