GNU bug report logs - #46038
Tests (tests/channels.scm) assume UTF-8 locale

Previous Next

Package: guix;

Reported by: Vagrant Cascadian <vagrant <at> reproducible-builds.org>

Date: Fri, 22 Jan 2021 16:58:01 UTC

Severity: normal

Merged with 50123, 50512

To reply to this bug, email your comments to 46038 AT debbugs.gnu.org.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to bug-guix <at> gnu.org:
bug#46038; Package guix. (Fri, 22 Jan 2021 16:58:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Vagrant Cascadian <vagrant <at> reproducible-builds.org>:
New bug report received and forwarded. Copy sent to bug-guix <at> gnu.org. (Fri, 22 Jan 2021 16:58:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Vagrant Cascadian <vagrant <at> reproducible-builds.org>
To: bug-guix <at> gnu.org
Subject: guix 1.2.0 test failure: channels-news, one entry
Date: Fri, 22 Jan 2021 08:56:46 -0800
[Message part 1 (text/plain, inline)]
I've uploaded guix 1.2.0 built against guile-2.2 to Debian, and while it
builds fine on the official buildd.debian.org infrastructure, on amd64
and arm64 the "channel-news, one entry" test from tests/channels.scm
fails on tests.reproducible-builds.org.

There are likely a few differences in the two build environments,
possibly including network access.

Does the "channel-news, one entry" test indirectly depend on network or
bootstrap binaries?

Could a difference in locale related variables affect the result of the
test (e.g. LANGUAGE=en:en_US vs. LANGUAGE unset, LC_ALL unset
vs. LC_ALL=C or LC_ALL=C.UTF-8)?

  https://tests.reproducible-builds.org/debian/rb-pkg/experimental/amd64/guix.html

test-name: channel-news, one entry
location: /build/1st/guix-1.2.0/tests/channels.scm:324
source:
+ (test-assert
+   "channel-news, one entry"
+   (with-temporary-git-repository
+     directory
+     `((add ".guix-channel"
+            ,(object->string
+               '(channel (version 0) (news-file "news.scm"))))
+       (commit "first commit")
+       (add "src/a.txt" "A")
+       (commit "second commit")
+       (tag "tag-for-first-news-entry")
+       (add "news.scm"
+            ,(lambda (repository)
+               (let ((previous
+                       (reference-name->oid repository "HEAD")))
+                 (object->string
+                   `(channel-news
+                      (version 0)
+                      (entry (commit ,(oid->string previous))
+                             (title (en "New file!") (eo "Nova dosiero!"))
+                             (body (en "Yeah, a.txt."))))))))
+       (commit "third commit")
+       (add "src/b.txt" "B")
+       (commit "fourth commit")
+       (add hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint: 	git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint: 	git branch -m <name>
Initialized empty Git repository in /tmp/guix-directory.6SfxEu/.git/
[master (root-commit) 8b5d0e8] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 .guix-channel
[master b8dd467] second commit
 1 file changed, 1 insertion(+)
 create mode 100644 src/a.txt
[master 324d7bc] third commit
 1 file changed, 1 insertion(+)
 create mode 100644 news.scm
[master 2cd62e1] fourth commit
 1 file changed, 1 insertion(+)
 create mode 100644 src/b.txt
[master d0e63c3] fifth commit
 1 file changed, 1 insertion(+), 1 deletion(-)
hint: Using 'master' as the name for the initial branch. This default branch name
hint: is subject to change. To configure the initial branch name to use in all
hint: of your new repositories, which will suppress this warning, call:
hint: 
hint: 	git config --global init.defaultBranch <name>
hint: 
hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
hint: 'development'. The just-created branch can be renamed via this command:
hint: 
hint: 	git branch -m <name>
Initialized empty Git repository in /tmp/guix-directory.M2UpCv/.git/
[master (root-commit) f84a5c3] first commit
 1 file changed, 1 insertion(+)
 create mode 100644 a.txt
[master b1e63da] second commit
 1 file changed, 1 insertion(+)
 create mode 100644 b.scm
"news.scm"
+            ,(lambda (repository)
+               (let ((second
+                       (commit-id
+                         (find-commit repository "second commit")))
+                     (previous
+                       (reference-name->oid repository "HEAD")))
+                 (object->string
+                   `(channel-news
+                      (version 0)
+                      (entry (commit ,(oid->string previous))
+                             (title (en "Another file!"))
+                             (body (en "Yeah, b.txt.")))
+                      (entry (tag "tag-for-first-news-entry")
+                             (title (en "Old news.") (eo "Malnova?oj."))
+                             (body (en "For a.txt"))))))))
+       (commit "fifth commit"))
+     (with-repository
+       directory
+       repository
+       (define (find-commit* message)
+         (oid->string
+           (commit-id (find-commit repository message))))
+       (let ((channel
+               (channel
+                 (url (string-append "file://" directory))
+                 (name 'foo)))
+             (commit1 (find-commit* "first commit"))
+             (commit2 (find-commit* "second commit"))
+             (commit3 (find-commit* "third commit"))
+             (commit4 (find-commit* "fourth commit"))
+             (commit5 (find-commit* "fifth commit")))
+         (and (null? (channel-news-for-commit channel commit2))
+              (lset= string=?
+                     (map channel-news-entry-commit
+                          (channel-news-for-commit channel commit5))
+                     (list commit2 commit4))
+              (lset= equal?
+                     (map channel-news-entry-title
+                          (channel-news-for-commit channel commit5))
+                     '((("en" . "Another file!"))
+                       (("en" . "Old news.") ("eo" . "Malnova?oj."))))
+              (lset= string=?
+                     (map channel-news-entry-commit
+                          (channel-news-for-commit channel commit3))
+                     (list commit2))
+              (lset= string=?
+                     (map channel-news-entry-commit
+                          (channel-news-for-commit channel commit3 commit1))
+                     (list commit2))
+              (lset= string=?
+                     (map channel-news-entry-commit
+                          (channel-news-for-commit channel commit5 commit3))
+                     (list commit4))
+              (lset= string=?
+                     (map channel-news-entry-commit
+                          (channel-news-for-commit channel commit5 commit1))
+                     (list commit4 commit2))
+              (lset= equal?
+                     (map channel-news-entry-tag
+                          (channel-news-for-commit channel commit5 commit1))
+                     '(#f "tag-for-first-news-entry")))))))
actual-value: #f
result: FAIL


live well,
  vagrant
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#46038; Package guix. (Sun, 02 May 2021 02:24:01 GMT) Full text and rfc822 format available.

Message #8 received at 46038 <at> debbugs.gnu.org (full text, mbox):

From: Vagrant Cascadian <vagrant <at> reproducible-builds.org>
To: 46038 <at> debbugs.gnu.org
Subject: guix 1.3.0rc1 test failure: channels-news, one entry
Date: Sat, 01 May 2021 19:23:17 -0700
[Message part 1 (text/plain, inline)]
On 2021-01-22, Vagrant Cascadian wrote:
> I've uploaded guix 1.2.0 built against guile-2.2 to Debian, and while it
> builds fine on the official buildd.debian.org infrastructure, on amd64
> and arm64 the "channel-news, one entry" test from tests/channels.scm
> fails on tests.reproducible-builds.org.
>
> There are likely a few differences in the two build environments,
> possibly including network access.
>
> Does the "channel-news, one entry" test indirectly depend on network or
> bootstrap binaries?
>
> Could a difference in locale related variables affect the result of the
> test (e.g. LANGUAGE=en:en_US vs. LANGUAGE unset, LC_ALL unset
> vs. LC_ALL=C or LC_ALL=C.UTF-8)?
>
>   https://tests.reproducible-builds.org/debian/rb-pkg/experimental/amd64/guix.html

Still basically the same story with 1.3.0rc1, in some cases this test
fails, but I haven't consistently figured out what triggers it.


> test-name: channel-news, one entry
> location: /build/1st/guix-1.2.0/tests/channels.scm:324
> source:
> + (test-assert
> +   "channel-news, one entry"
> +   (with-temporary-git-repository
> +     directory
> +     `((add ".guix-channel"
> +            ,(object->string
> +               '(channel (version 0) (news-file "news.scm"))))
> +       (commit "first commit")
> +       (add "src/a.txt" "A")
> +       (commit "second commit")
> +       (tag "tag-for-first-news-entry")
> +       (add "news.scm"
> +            ,(lambda (repository)
> +               (let ((previous
> +                       (reference-name->oid repository "HEAD")))
> +                 (object->string
> +                   `(channel-news
> +                      (version 0)
> +                      (entry (commit ,(oid->string previous))
> +                             (title (en "New file!") (eo "Nova dosiero!"))
> +                             (body (en "Yeah, a.txt."))))))))
> +       (commit "third commit")
> +       (add "src/b.txt" "B")
> +       (commit "fourth commit")
> +       (add hint: Using 'master' as the name for the initial branch. This default branch name
> hint: is subject to change. To configure the initial branch name to use in all
> hint: of your new repositories, which will suppress this warning, call:
> hint: 
> hint: 	git config --global init.defaultBranch <name>
> hint: 
> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
> hint: 'development'. The just-created branch can be renamed via this command:
> hint: 
> hint: 	git branch -m <name>
> Initialized empty Git repository in /tmp/guix-directory.6SfxEu/.git/
> [master (root-commit) 8b5d0e8] first commit
>  1 file changed, 1 insertion(+)
>  create mode 100644 .guix-channel
> [master b8dd467] second commit
>  1 file changed, 1 insertion(+)
>  create mode 100644 src/a.txt
> [master 324d7bc] third commit
>  1 file changed, 1 insertion(+)
>  create mode 100644 news.scm
> [master 2cd62e1] fourth commit
>  1 file changed, 1 insertion(+)
>  create mode 100644 src/b.txt
> [master d0e63c3] fifth commit
>  1 file changed, 1 insertion(+), 1 deletion(-)
> hint: Using 'master' as the name for the initial branch. This default branch name
> hint: is subject to change. To configure the initial branch name to use in all
> hint: of your new repositories, which will suppress this warning, call:
> hint: 
> hint: 	git config --global init.defaultBranch <name>
> hint: 
> hint: Names commonly chosen instead of 'master' are 'main', 'trunk' and
> hint: 'development'. The just-created branch can be renamed via this command:
> hint: 
> hint: 	git branch -m <name>
> Initialized empty Git repository in /tmp/guix-directory.M2UpCv/.git/
> [master (root-commit) f84a5c3] first commit
>  1 file changed, 1 insertion(+)
>  create mode 100644 a.txt
> [master b1e63da] second commit
>  1 file changed, 1 insertion(+)
>  create mode 100644 b.scm
> "news.scm"
> +            ,(lambda (repository)
> +               (let ((second
> +                       (commit-id
> +                         (find-commit repository "second commit")))
> +                     (previous
> +                       (reference-name->oid repository "HEAD")))
> +                 (object->string
> +                   `(channel-news
> +                      (version 0)
> +                      (entry (commit ,(oid->string previous))
> +                             (title (en "Another file!"))
> +                             (body (en "Yeah, b.txt.")))
> +                      (entry (tag "tag-for-first-news-entry")
> +                             (title (en "Old news.") (eo "Malnova?oj."))
> +                             (body (en "For a.txt"))))))))
> +       (commit "fifth commit"))
> +     (with-repository
> +       directory
> +       repository
> +       (define (find-commit* message)
> +         (oid->string
> +           (commit-id (find-commit repository message))))
> +       (let ((channel
> +               (channel
> +                 (url (string-append "file://" directory))
> +                 (name 'foo)))
> +             (commit1 (find-commit* "first commit"))
> +             (commit2 (find-commit* "second commit"))
> +             (commit3 (find-commit* "third commit"))
> +             (commit4 (find-commit* "fourth commit"))
> +             (commit5 (find-commit* "fifth commit")))
> +         (and (null? (channel-news-for-commit channel commit2))
> +              (lset= string=?
> +                     (map channel-news-entry-commit
> +                          (channel-news-for-commit channel commit5))
> +                     (list commit2 commit4))
> +              (lset= equal?
> +                     (map channel-news-entry-title
> +                          (channel-news-for-commit channel commit5))
> +                     '((("en" . "Another file!"))
> +                       (("en" . "Old news.") ("eo" . "Malnova?oj."))))
> +              (lset= string=?
> +                     (map channel-news-entry-commit
> +                          (channel-news-for-commit channel commit3))
> +                     (list commit2))
> +              (lset= string=?
> +                     (map channel-news-entry-commit
> +                          (channel-news-for-commit channel commit3 commit1))
> +                     (list commit2))
> +              (lset= string=?
> +                     (map channel-news-entry-commit
> +                          (channel-news-for-commit channel commit5 commit3))
> +                     (list commit4))
> +              (lset= string=?
> +                     (map channel-news-entry-commit
> +                          (channel-news-for-commit channel commit5 commit1))
> +                     (list commit4 commit2))
> +              (lset= equal?
> +                     (map channel-news-entry-tag
> +                          (channel-news-for-commit channel commit5 commit1))
> +                     '(#f "tag-for-first-news-entry")))))))
> actual-value: #f
> result: FAIL


live well,
  vagrant
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#46038; Package guix. (Tue, 04 May 2021 19:54:01 GMT) Full text and rfc822 format available.

Message #11 received at 46038 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Vagrant Cascadian <vagrant <at> reproducible-builds.org>
Cc: 46038 <at> debbugs.gnu.org
Subject: Re: bug#46038: guix 1.3.0rc1 test failure: channels-news, one entry
Date: Tue, 04 May 2021 21:53:46 +0200
Hi Vagrant,

Vagrant Cascadian <vagrant <at> reproducible-builds.org> skribis:

> On 2021-01-22, Vagrant Cascadian wrote:
>> I've uploaded guix 1.2.0 built against guile-2.2 to Debian, and while it
>> builds fine on the official buildd.debian.org infrastructure, on amd64
>> and arm64 the "channel-news, one entry" test from tests/channels.scm
>> fails on tests.reproducible-builds.org.
>>
>> There are likely a few differences in the two build environments,
>> possibly including network access.
>>
>> Does the "channel-news, one entry" test indirectly depend on network or
>> bootstrap binaries?
>>
>> Could a difference in locale related variables affect the result of the
>> test (e.g. LANGUAGE=en:en_US vs. LANGUAGE unset, LC_ALL unset
>> vs. LC_ALL=C or LC_ALL=C.UTF-8)?
>>
>>   https://tests.reproducible-builds.org/debian/rb-pkg/experimental/amd64/guix.html
>
> Still basically the same story with 1.3.0rc1, in some cases this test
> fails, but I haven't consistently figured out what triggers it.
>
>
>> test-name: channel-news, one entry
>> location: /build/1st/guix-1.2.0/tests/channels.scm:324
>> source:

[...]

>> +              (lset= equal?
>> +                     (map channel-news-entry-title
>> +                          (channel-news-for-commit channel commit5))
>> +                     '((("en" . "Another file!"))
>> +                       (("en" . "Old news.") ("eo" . "Malnova?oj."))))

The culprit is right here: it should read “Malnovaĵoj”, but there’s a
question mark instead of ‘ĵ’.

Could it be that you’re not running tests in a UTF-8 locale?

Thanks,
Ludo’.




Information forwarded to bug-guix <at> gnu.org:
bug#46038; Package guix. (Tue, 04 May 2021 22:36:01 GMT) Full text and rfc822 format available.

Message #14 received at 46038 <at> debbugs.gnu.org (full text, mbox):

From: Vagrant Cascadian <vagrant <at> reproducible-builds.org>
To: Ludovic Courtès <ludo <at> gnu.org>
Cc: 46038 <at> debbugs.gnu.org
Subject: Re: bug#46038: guix 1.3.0rc1 test failure: channels-news, one entry
Date: Tue, 04 May 2021 15:34:44 -0700
[Message part 1 (text/plain, inline)]
On 2021-05-04, Ludovic Courtès wrote:
> Vagrant Cascadian <vagrant <at> reproducible-builds.org> skribis:
>
>> On 2021-01-22, Vagrant Cascadian wrote:
>>> I've uploaded guix 1.2.0 built against guile-2.2 to Debian, and while it
>>> builds fine on the official buildd.debian.org infrastructure, on amd64
>>> and arm64 the "channel-news, one entry" test from tests/channels.scm
>>> fails on tests.reproducible-builds.org.
>>>
>>> There are likely a few differences in the two build environments,
>>> possibly including network access.
>>>
>>> Does the "channel-news, one entry" test indirectly depend on network or
>>> bootstrap binaries?
>>>
>>> Could a difference in locale related variables affect the result of the
>>> test (e.g. LANGUAGE=en:en_US vs. LANGUAGE unset, LC_ALL unset
>>> vs. LC_ALL=C or LC_ALL=C.UTF-8)?
>>>
>>>   https://tests.reproducible-builds.org/debian/rb-pkg/experimental/amd64/guix.html
>>
>> Still basically the same story with 1.3.0rc1, in some cases this test
>> fails, but I haven't consistently figured out what triggers it.
>>
>>
>>> test-name: channel-news, one entry
>>> location: /build/1st/guix-1.2.0/tests/channels.scm:324
>>> source:
>
> [...]
>
>>> +              (lset= equal?
>>> +                     (map channel-news-entry-title
>>> +                          (channel-news-for-commit channel commit5))
>>> +                     '((("en" . "Another file!"))
>>> +                       (("en" . "Old news.") ("eo" . "Malnova?oj."))))
>
> The culprit is right here: it should read “Malnovaĵoj”, but there’s a
> question mark instead of ‘ĵ’.
>
> Could it be that you’re not running tests in a UTF-8 locale?

Thanks for taking a deeper look!

Yes, on tests.reproducible-builds.org, one build is run in the C locale,
the other in various UTF-8 locales (somewhat arbitrarily tied to
architecture exactly which UTF-8 locale is used). I'm guessing
buildd.debian.org use C.UTF-8, since it builds fine there.

So now the question is what to do; should tests be able to assume a
UTF-8 locale?

Should I try to adapt the test to work in C?

Should I workaround it in the Debian packaging by forcing to use a UTF-8
locale (on Debian, the only one definitely available is C.UTF-8, which
isn't in upstream glibc, and thus not in guix itself).


live well,
  vagrant
[signature.asc (application/pgp-signature, inline)]

Information forwarded to bug-guix <at> gnu.org:
bug#46038; Package guix. (Thu, 06 May 2021 10:47:01 GMT) Full text and rfc822 format available.

Message #17 received at 46038 <at> debbugs.gnu.org (full text, mbox):

From: Ludovic Courtès <ludo <at> gnu.org>
To: Vagrant Cascadian <vagrant <at> reproducible-builds.org>
Cc: 46038 <at> debbugs.gnu.org
Subject: Re: bug#46038: guix 1.3.0rc1 test failure: channels-news, one entry
Date: Thu, 06 May 2021 12:46:48 +0200
Hi,

Vagrant Cascadian <vagrant <at> reproducible-builds.org> skribis:

> So now the question is what to do; should tests be able to assume a
> UTF-8 locale?
>
> Should I try to adapt the test to work in C?
>
> Should I workaround it in the Debian packaging by forcing to use a UTF-8
> locale (on Debian, the only one definitely available is C.UTF-8, which
> isn't in upstream glibc, and thus not in guix itself).

Since it’s the only test that makes this assumption, you can choose
whichever option sounds best to you.  In Guix proper, I’d rather assume
we’re running in a UTF-8 locale.  If that’s not a good option for you,
you could patch this one non-ASCII character.

HTH!

Ludo’.




Merged 46038 50123 50512. Request was from Tobias Geerinckx-Rice <me <at> tobias.gr> to control <at> debbugs.gnu.org. (Sat, 27 Nov 2021 13:44:02 GMT) Full text and rfc822 format available.

Changed bug title to 'Tests assume UTF-8 locale (specifically' from 'guix 1.2.0 test failure: channels-news, one entry' Request was from Tobias Geerinckx-Rice <me <at> tobias.gr> to control <at> debbugs.gnu.org. (Sat, 27 Nov 2021 13:47:02 GMT) Full text and rfc822 format available.

Changed bug title to 'Tests (tests/channels.scm) assume UTF-8 locale' from 'Tests assume UTF-8 locale (specifically' Request was from Tobias Geerinckx-Rice <me <at> tobias.gr> to control <at> debbugs.gnu.org. (Sat, 27 Nov 2021 13:58:01 GMT) Full text and rfc822 format available.

This bug report was last modified 3 years and 199 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.