diff options
author | Attila Lendvai <attila@lendvai.name> | 2022-04-19 20:09:55 +0200 |
---|---|---|
committer | Ludovic Courtès <ludo@gnu.org> | 2022-04-20 23:46:43 +0200 |
commit | 8852f911ff506dd50b714274ba0e2143f0285f78 (patch) | |
tree | 3dc95d468f3b14a82c65884d499496942ed7fafd | |
parent | 8540c2d86ca535ceb188c838cf1885de6f65c94f (diff) | |
download | guix-8852f911ff506dd50b714274ba0e2143f0285f78.tar.gz |
git-download: Set locale to deal with Unicode in git metadata.
Without this the git-fetch GEXP is run in an environment that uses ASCII character encoding when strings are crossing the Guile - C boundary. It means that e.g. tag names that have Unicode chars in them will cause problems, e.g. when walking and deleting the .git directory. An example in the wild: https://github.com/klauspost/pgzip/tags Fixes <https://issues.guix.gnu.org/54893>. * guix/git-download.scm (git-fetch): Call 'setenv' and 'setlocale' to set it to en_US.utf8. * gnu/packages/commencement.scm (glibc-utf8-locales-final): Make public. Add 'properties' field. Co-authored-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r-- | gnu/packages/commencement.scm | 4 | ||||
-rw-r--r-- | guix/git-download.scm | 13 |
2 files changed, 16 insertions, 1 deletions
diff --git a/gnu/packages/commencement.scm b/gnu/packages/commencement.scm index e8b47fbeab..1fed8bcd6e 100644 --- a/gnu/packages/commencement.scm +++ b/gnu/packages/commencement.scm @@ -3613,7 +3613,7 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%" (with-boot4 (hidden-package (package-with-bootstrap-guile guile-3.0/fixed)))) -(define glibc-utf8-locales-final +(define-public glibc-utf8-locales-final ;; Now that we have GUILE-FINAL, build the UTF-8 locales. They are needed ;; by the build processes afterwards so their 'scm_to_locale_string' works ;; with the full range of Unicode codepoints (remember @@ -3621,6 +3621,8 @@ exec ~a/bin/~a-~a -B~a/lib -Wl,-dynamic-linker -Wl,~a/~a \"$@\"~%" ;; function.) (package (inherit glibc-utf8-locales) + (properties `((hidden? . #t) + ,@(package-properties glibc-utf8-locales))) (native-inputs `(("glibc" ,glibc-final) ("gzip" ,(with-boot4 gzip)))))) diff --git a/guix/git-download.scm b/guix/git-download.scm index 5e624b9ae9..a1566bed4d 100644 --- a/guix/git-download.scm +++ b/guix/git-download.scm @@ -104,6 +104,12 @@ HASH-ALGO (a symbol). Use NAME as the file name, or a generic name if #f." (define gnutls (module-ref (resolve-interface '(gnu packages tls)) 'gnutls)) + (define glibc-locales + ;; Note: pick the '-final' variant to avoid circular dependency on + ;; i586-gnu, where 'glibc-utf8-locales' indirectly depends on Git. + (module-ref (resolve-interface '(gnu packages commencement)) + 'glibc-utf8-locales-final)) + (define modules (delete '(guix config) (source-module-closure '((guix build git) @@ -125,6 +131,13 @@ HASH-ALGO (a symbol). Use NAME as the file name, or a generic name if #f." (define recursive? (call-with-input-string (getenv "git recursive?") read)) + ;; Let Guile interpret file names as UTF-8, otherwise + ;; 'delete-file-recursively' might fail to delete all of + ;; '.git'--see <https://issues.guix.gnu.org/54893>. + (setenv "GUIX_LOCPATH" + #+(file-append glibc-locales "/lib/locale")) + (setlocale LC_ALL "en_US.utf8") + ;; The 'git submodule' commands expects Coreutils, sed, ;; grep, etc. to be in $PATH. (set-path-environment-variable "PATH" '("bin") |