Subject: [bug#62712] [PATCH 0/2] Disable keyword expansion for Subversion downloads

From: Timothy Sample <[email-masked]>
Date: Fri, 07 Apr 2023 10:54:05 -0600

Hi Ludo,

Whoops!  I guess I was a little slow getting my patch in.  I’ve
highlighted a few sources you missed below, as well as attached my patch
(for comparison and for listing the new hashes of the missing sources).

Ludovic Courtès <[email-masked]> writes:

> * gnu/packages/java.scm (java-geronimo-xbean-reflect):

Also java-geronimo-genesis-2.1.

> * gnu/packages/tex.scm (texlive-hyphen-base): Likewise.
> (texlive-dvips): Likewise.

Also texlive-dvipdfmx.

> (texlive-cm): Likewise.
> (texlive-tex-plain): Likewise.
> (texlive-kpathsea): Likewise
> (texlive-latexconfig): Likewise.
> (texlive-tetex): Likewise.
> (texlive-pdftex): Likewise.

Also texlive-xetex.

There’s also the “texlive-scripts” input in texlive-bin, and the
“texlive-luatexconfig” native input in texlive-latex-base.

> [...]

I generated a big diff for all 17 sources that I found (mostly because
it excites me that Guix can do stuff like that).  Basically all the
changes were boring (as we expected).

For “texlive-scripts”, I added a phase that approximates keyword
expansion for the few scripts that use it to output version information.
It‘s not exactly the same as what Subversion does.  Subversion uses the
last revision that updated the given file, and I just use
‘%texlive-revision’ for every file.  I’m not too attached to this
approach, but it felt like the right thing to do.

> The second patch makes ‘recursive?’ default to #f, which AFAICS is
> what all the SVN-using packages that were not explicit expected (no
> changes required).

I also carefully checked turning recursion off by default.  I’m
confident that nothing changes.

-- Tim

>From 19c14a09e9e1d92a1035d15dbbb8d12fb3b59d17 Mon Sep 17 00:00:00 2001
From: Timothy Sample <[email-masked]>
Date: Wed, 5 Apr 2023 13:46:28 -0600
Subject: [PATCH] svn-download: Do not expand keywords.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

See <https://issues.guix.gnu.org/43442#15>.

* guix/build/svn.scm (svn-fecth): Pass "--ignore-keywords" to
Subversion.
* guix/build-system/texlive.scm (%texlive-date): New variable.
* gnu/packages/java.scm (java-geronimo-xbean-reflect)
(java-geronimo-genesis-2.1): Update the source hash.
* gnu/packages/machine-learning.scm (ghmm): Likewise.
* gnu/packages/video.scm (libsmpeg, libsmpeg-with-sdl1): Likewise.
* gnu/packages/tex.scm (texlive-bin): Update the hash of the
"texlive-scripts" input, and a add a new phase that imitates
Subversion keyword expansion for scripts that need it.
(texlive-latex-base): Update the hash of the "texlive-luatexconfig"
native input.
(texlive-hyphen-base, texlive-dvipdfmx, texlive-dvips, texlive-cm)
(texlive-tex-plain, texlive-kpathsea, texlive-latexconfig)
(texlive-tetex, texlive-pdftex, texlive-xetex): Update the source
hash.

Co-authored-by: Ludovic Courtès <[email-masked]>
---
 gnu/packages/java.scm             |  4 +--
 gnu/packages/machine-learning.scm |  2 +-
 gnu/packages/tex.scm              | 52 +++++++++++++++++++++++--------
 gnu/packages/video.scm            |  4 +--
 guix/build-system/texlive.scm     |  4 ++-
 guix/build/svn.scm                |  7 ++++-
 6 files changed, 53 insertions(+), 20 deletions(-)

diff --git a/gnu/packages/java.scm b/gnu/packages/java.scm
index de3a0003e5..4fad4b06f6 100644
--- a/gnu/packages/java.scm
+++ b/gnu/packages/java.scm
@@ -11216,7 +11216,7 @@ (define-public java-geronimo-xbean-reflect
               (file-name (string-append name "-" version))
               (sha256
                (base32
-                "18q3i6jgm6rkw8aysfgihgywrdc5nvijrwnslmi3ww497jvri6ja"))))
+                "0zjqmsad4xk0iar23hdyvx19nxczybd2bh0i35xrafli5cmh720k"))))
     (build-system ant-build-system)
     (arguments
      `(#:jar-name "geronimo-xbean-reflect.jar"
@@ -11267,7 +11267,7 @@ (define java-geronimo-genesis-2.1
               (file-name (string-append name "-" version "-source"))
               (sha256
                (base32
-                "119yn795jvnjf52si84q192s8wag1k013iabg78b7wnadssnnh31"))))
+                "1mky4zyl2xsqlgrkairaj5971byvhwk2z9bq8snsgvlr11ydc0zf"))))
     (build-system ant-build-system)
     (arguments
      `(#:tests? #f
diff --git a/gnu/packages/machine-learning.scm b/gnu/packages/machine-learning.scm
index 37d4ef78ad..503b41d64c 100644
--- a/gnu/packages/machine-learning.scm
+++ b/gnu/packages/machine-learning.scm
@@ -233,7 +233,7 @@ (define-public ghmm
                 (file-name (string-append name "-" version "-checkout"))
                 (sha256
                  (base32
-                  "0qbq1rqp94l530f043qzp8aw5lj7dng9wq0miffd7spd1ff638wq"))))
+                  "07kdsngvr4n1qxpqzv1nlay7g41d6jzjppa8vzmrg220s8ing87z"))))
       (build-system gnu-build-system)
       (arguments
        `(#:imported-modules (,@%gnu-build-system-modules
diff --git a/gnu/packages/tex.scm b/gnu/packages/tex.scm
index b40e72c582..3ced782c44 100644
--- a/gnu/packages/tex.scm
+++ b/gnu/packages/tex.scm
@@ -25,6 +25,7 @@
 ;;; Copyright © 2022 Philip McGrath <[email-masked]>
 ;;; Copyright © 2023 Thomas Albers Raviola <[email-masked]>
 ;;; Copyright © 2023 John Kehayias <[email-masked]>
+;;; Copyright © 2023 Timothy Sample <[email-masked]>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -293,7 +294,7 @@ (define-public texlive-bin
                                      "-checkout"))
            (sha256
             (base32
-             "10xpa4nnz1biap7qfv7fb0zk6132ki5g1j8w0bqwkggfncdfl07d"))))
+             "1jrphfjhmw17rp1yqsl70shmvka3vg0g8841q6zx2lfn48p7vqf3"))))
        ("cairo" ,cairo)
        ("fontconfig" ,fontconfig)
        ("fontforge" ,fontforge)
@@ -413,7 +414,32 @@ (define-public texlive-bin
              (mkdir "texlive-scripts")
              (with-directory-excursion "texlive-scripts"
                (apply (assoc-ref %standard-phases 'unpack)
-                      (list #:source (assoc-ref inputs "texlive-scripts"))))))
+                      (list #:source (assoc-ref inputs "texlive-scripts")))
+               ;; Configure the version string for some scripts.
+               ;; Normally this would be done by Subversion.
+               ;; See <https://issues.guix.gnu.org/43442#15>.
+               (for-each (lambda (file)
+                           (substitute* file
+                             (("\\$Id\\$")
+                              (format #f "$Id: ~a ~a ~a nobody $"
+                                      file
+                                      ,%texlive-revision
+                                      ,%texlive-date))
+                             (("\\$Revision\\$")
+                              (format #f "$Revision: ~a $"
+                                      ,%texlive-revision))
+                             (("\\$Date\\$")
+                              (format #f "$Date: ~a $"
+                                      ,%texlive-date))))
+                         '("fmtutil.pl"
+                           "mktexlsr"
+                           "mktexlsr.pl"
+                           "mktexmf"
+                           "mktexpk"
+                           "mktextfm"
+                           "tlmgr.pl"
+                           "tlmgrgui.pl"
+                           "updmap.pl")))))
          (add-after 'unpack-texlive-scripts 'patch-scripts
            (lambda _
              (let* ((scripts (append (find-files "texk/kpathsea" "^mktex")
@@ -731,7 +757,7 @@ (define-public texlive-hyphen-base
                     "/tex/generic/hyphen/hypht1.tex"
                     "/tex/generic/hyphen/zerohyph.tex")
               (base32
-               "1sagn9aybs34m1s6m3zwya5g5kbiwfnw8ifcgxssygmzzs88dgjp")
+               "1nad1bqpjsywm49hlv7d75mqvgha3j5vayvkvfhv8wwzgdb3mk84")
               #:trivial? #t))
     (home-page "https://tug.org/texlive/")
     (synopsis "Core hyphenation support files")
@@ -751,7 +777,7 @@ (define-public texlive-dvipdfmx
                          "fonts/cmap/dvipdfmx/"
                          "fonts/map/dvipdfmx/")
                    (base32
-                    "04x93w777l9qzdzglwanb14k8cmq74kjcsgyanvp3bsmnn5zfrgz")
+                    "08i81hciksh0sm9pw6lw8v8s2rj92p58wd5j2mq1mzqbp171wjmr")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -783,7 +809,7 @@ (define-public texlive-dvips
                     "/fonts/enc/dvips/base/"
                     "/tex/generic/dvips/")
               (base32
-               "0rns1hpjy4fmsskmkwx197j8qbgdmyj0j9214sq9vhpa6nv7czm3")
+               "1fb73mfw9mp4ylp6sfc0465rbdb7k830aq0qf3c085c3n0zyrin8")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/dvips")
     (synopsis "DVI to PostScript drivers")
@@ -1041,7 +1067,7 @@ (define-public texlive-cm
                          "/fonts/map/dvips/cm/cmtext-bsr-interpolated.map"
                          "/doc/fonts/cm/")
                    (base32
-                    "1ky4gvcn8qn3d61bvb39512b8r92igv6il7vh02hw04223yj6q8i")
+                    "0mfslqs9saqkb3z3xdhsqnklxk858nmipgj1y93by2791jzkma1d")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -1645,7 +1671,7 @@ (define-public texlive-tex-plain
               "texlive-tex-plain"
               (list "/tex/plain/")
               (base32
-               "0gwygkm8i2jmpf7bfg6fb6824rl7fq4a2s0wni73v0fz6s4chr1n")
+               "1hafbphx1486069cky87hyksx6ia5gd83m4wp2xmgc09z87faf0h")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/plain")
     (synopsis "Plain TeX format and supporting files")
@@ -2851,7 +2877,7 @@ (define-public texlive-kpathsea
                          "/web2c/tcvn-t5.tcx"
                          "/web2c/viscii-t5.tcx")
                    (base32
-                    "00q2nny7lw7jxyln6ch4h0alygbrzk8yynliyc291m53kds1h0mr")
+                    "08nfk5hicqbvnz73rjbxi97lcakd9i1k2cy4qi2cwghan92650jq")
                    #:trivial? #t)))
     (package
       (inherit template)
@@ -2914,7 +2940,7 @@ (define-public texlive-latexconfig
               "texlive-latexconfig"
               (list "/tex/latex/latexconfig/")
               (base32
-               "10ynmd8b9b9l1wl1mva23yz4zir53p6r5z31s39wmxz19pj12qvx")
+               "1x5fyr2185nx3qlyariykdz44hcy5azimrk9db2p707dg08bjhsd")
               #:trivial? #t))
     (home-page "https://www.tug.org/")
     (synopsis "Configuration files for LaTeX-related formats")
@@ -3068,7 +3094,7 @@ (define-public texlive-latex-base
                   "/tex/generic/config/luatexiniconfig.tex"
                   "/web2c/texmfcnf.lua")
             (base32
-             "0yjx7nw9mgfgnq1givkzbxh7z7ncw1liaddjgm7n2nwn0aw6xfdg")))))
+             "065j47i2785nbj2507pzxlscyrwr4ghv6nksc3a01rp62bq8kkjp")))))
       (propagated-inputs
        (list texlive-dehyph-exptl
              texlive-etex
@@ -3748,7 +3774,7 @@ (define-public texlive-tetex
                     "/fonts/enc/dvips/tetex/"
                     "/fonts/map/dvips/tetex/")
               (base32
-               "1si3as8mwi8837965djlw6jhwwzsp3r1hkflvdxv2avx9vb45hjb")
+               "05mf8yqdj2wrc1zm3al2j4aam2wx0ky6a7slxw17pkd1c7rmvjrq")
               #:trivial? #t))
     (home-page "https://www.ctan.org/pkg/tetex")
     (synopsis "Font maps originally from teTeX")
@@ -8195,7 +8221,7 @@ (define-public texlive-pdftex
                     "/tex/generic/pdftex/glyphtounicode.tex"
                     "/tex/generic/pdftex/pdfcolor.tex")
               (base32
-               "1wx928rqsv0x1a8vc7aq49w3nglr4bmlhl822slqglymfxrmb91b")
+               "0w4ar5g7x4w8zw8z6hdwqxwcbglfzzq7pcznz8rawllwy6dssr8g")
               #:trivial? #t))
     ;; TODO: add this missing package:
     ;; dehyph
@@ -12524,7 +12550,7 @@ (define-public texlive-xetex
                     "/fonts/misc/xetex/fontmapping/base/"
                     "/tex/xelatex/xetexconfig/")
               (base32
-               "1gmgagvsv2qknrjzjk840ca3wging8wfc20rgq7bnhphm9n87m6q")
+               "0j396anlhk5pqrnwxr8bpq55sp3qfyb6n9g08x4nmaa6p9b9y8ab")
               #:trivial? #t))
     (propagated-inputs
      (list texlive-generic-atbegshi
diff --git a/gnu/packages/video.scm b/gnu/packages/video.scm
index 2559634c29..131f001400 100644
--- a/gnu/packages/video.scm
+++ b/gnu/packages/video.scm
@@ -3795,7 +3795,7 @@ (define-public libsmpeg
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "18yfkr70lr1x1hc8snn2ldnbzdcc7b64xmkqrfk8w59gpg7sl1xn"))))
+                "1srzyjks9s0g4k7ms8vc0hjby2g6shndnr552hl63pn90sgmwxs9"))))
     (build-system gnu-build-system)
     (arguments
      ;; libsmpeg fails to build with -std=c++11, which is the default with
@@ -3831,7 +3831,7 @@ (define-public libsmpeg-with-sdl1
               (file-name (string-append name "-" version "-checkout"))
               (sha256
                (base32
-                "0jfi085rf3fa5xsn0vd3nqf32my8ph9c6a9445y7a8lrlz4dms64"))))
+                "1jy9xqykhwfg8in0fxjcqcvwazii1ckzs39wp749b926q7ny5bwy"))))
     (inputs
      (list sdl))))
 
diff --git a/guix/build-system/texlive.scm b/guix/build-system/texlive.scm
index d970c1beb9..aefd573d11 100644
--- a/guix/build-system/texlive.scm
+++ b/guix/build-system/texlive.scm
@@ -34,7 +34,8 @@ (define-module (guix build-system texlive)
             texlive-ref
             texlive-origin
             %texlive-tag
-            %texlive-revision))
+            %texlive-revision
+            %texlive-date))
 
 ;; Commentary:
 ;;
@@ -46,6 +47,7 @@ (define-module (guix build-system texlive)
 ;; are taken from https://www.tug.org/svn/texlive/tags/
 (define %texlive-tag "texlive-2021.3")
 (define %texlive-revision 59745)
+(define %texlive-date "2021-06-28 21:59:21Z")
 
 (define (texlive-origin name version locations hash)
   "Return an <origin> object for a TeX Live package consisting of multiple
diff --git a/guix/build/svn.scm b/guix/build/svn.scm
index 2d960cb364..bc6f3155a0 100644
--- a/guix/build/svn.scm
+++ b/guix/build/svn.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2014, 2020 Ludovic Courtès <[email-masked]>
+;;; Copyright © 2014, 2020, 2023 Ludovic Courtès <[email-masked]>
 ;;; Copyright © 2014 Sree Harsha Totakura <[email-masked]>
 ;;; Copyright © 2018 Mark H Weaver <[email-masked]>
 ;;; Copyright © 2020 Simon Tournier <[email-masked]>
@@ -47,6 +47,11 @@ (define* (svn-fetch url revision directory
            ;; verify the checksum later.  This can be removed when
            ;; ca-certificates package is added.
            "--trust-server-cert" "-r" (number->string revision)
+
+           ;; Disable keyword substitution (keywords are CVS-like strings
+           ;; like "$Date$", "$Id$", and so on).
+           "--ignore-keywords"
+
            `(,@(if (and user-name password)
                    (list (string-append "--username=" user-name)
                          (string-append "--password=" password))
-- 
2.39.2