diff mbox series

[v2] t9604: Fix test for musl libc and new Debian

Message ID 20240410032812.30476-1-congdanhqx@gmail.com (mailing list archive)
State Accepted
Commit 03e84cca5d66083878901934711d3f1a56c41dbc
Headers show
Series [v2] t9604: Fix test for musl libc and new Debian | expand

Commit Message

Đoàn Trần Công Danh April 10, 2024, 3:28 a.m. UTC
CST6CDT and the like are POSIX timezone, with no rule for transition.
And POSIX doesn't enforce how to interpret the rule if it's omited.
Some libc (e.g. glibc) resorted back to IANA (formerly Olson) db rules
for those timezones.  Some libc (e.g. FreeBSD) uses a fixed rule.
Other libc (e.g. musl) interpret that as no transition at all [1].

In addition, distributions (notoriously Debian-derived, which uses IANA
db for CST6CDT and the like) started to split "legacy" timezones
like CST6CDT, EST5EDT into `tzdata-legacy', which will not be installed
by default [2].

In those cases, t9604 will run into failure.

Let's switch to POSIX timezone with rules to change timezone.

1: http://mm.icann.org/pipermail/tz/2024-March/058751.html
2: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1043250

Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
---
Range-diff against v1:
1:  23a4298eababe ! 1:  9494adb39120c t9604: Fix test for musl libc and new Debian
    @@ Commit message
     
         CST6CDT and the like are POSIX timezone, with no rule for transition.
         And POSIX doesn't enforce how to interpret the rule if it's omited.
    -    Some libc resorted back to IANA (formerly Olson) db rules for those
    -    timezones.  Other libc (e.g. musl) interpret that as no transition at
    -    all [1].
    +    Some libc (e.g. glibc) resorted back to IANA (formerly Olson) db rules
    +    for those timezones.  Some libc (e.g. FreeBSD) uses a fixed rule.
    +    Other libc (e.g. musl) interpret that as no transition at all [1].
     
         In addition, distributions (notoriously Debian-derived, which uses IANA
         db for CST6CDT and the like) started to split "legacy" timezones
    @@ Commit message
         Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
     
      ## t/t9604-cvsimport-timestamps.sh ##
    -@@ t/t9604-cvsimport-timestamps.sh: test_description='git cvsimport timestamps'
    +@@
    + test_description='git cvsimport timestamps'
    + . ./lib-cvs.sh
      
    ++test_lazy_prereq POSIX_TIMEZONE '
    ++	local tz=XST-1XDT,M3.5.0,M11.1.0
    ++	echo "1711846799 -> 2024-03-31 01:59:59 +0100" >expected &&
    ++	TZ="$tz" test-tool date show:iso-local 1711846799 >actual &&
    ++	test_cmp expected actual &&
    ++	echo "1711846800 -> 2024-03-31 03:00:00 +0200" >expected &&
    ++	TZ="$tz" test-tool date show:iso-local 1711846800 >actual &&
    ++	test_cmp expected actual &&
    ++	echo "1730591999 -> 2024-11-03 01:59:59 +0200" >expected &&
    ++	TZ="$tz" test-tool date show:iso-local 1730591999 >actual &&
    ++	test_cmp expected actual &&
    ++	echo "1730592000 -> 2024-11-03 01:00:00 +0100" >expected &&
    ++	TZ="$tz" test-tool date show:iso-local 1730592000 >actual &&
    ++	test_cmp expected actual
    ++'
    ++
      setup_cvs_test_repository t9604
      
     -test_expect_success PERL 'check timestamps are UTC (TZ=CST6CDT)' '
    -+test_expect_success PERL 'check timestamps are UTC (TZ=America/Chicago)' '
    ++test_expect_success PERL,POSIX_TIMEZONE 'check timestamps are UTC' '
      
     -	TZ=CST6CDT git cvsimport -p"-x" -C module-1 module &&
     +	TZ=CST6CDT,M4.1.0,M10.5.0 \
    @@ t/t9604-cvsimport-timestamps.sh: test_description='git cvsimport timestamps'
      	git cvsimport -p"-x" -C module-1 module &&
      	(
      		cd module-1 &&
    -@@ t/t9604-cvsimport-timestamps.sh: test_expect_success PERL 'check timestamps with author-specific timezones' '
    +@@ t/t9604-cvsimport-timestamps.sh: test_expect_success PERL 'check timestamps are UTC (TZ=CST6CDT)' '
    + 	test_cmp expect-1 actual-1
    + '
    + 
    +-test_expect_success PERL 'check timestamps with author-specific timezones' '
    ++test_expect_success PERL,POSIX_TIMEZONE 'check timestamps with author-specific timezones' '
      
      	cat >cvs-authors <<-EOF &&
      	user1=User One <user1@domain.org>

 t/t9604-cvsimport-timestamps.sh | 29 +++++++++++++++++++++++------
 1 file changed, 23 insertions(+), 6 deletions(-)

Comments

Eric Sunshine April 10, 2024, 3:29 a.m. UTC | #1
On Tue, Apr 9, 2024 at 11:28 PM Đoàn Trần Công Danh
<congdanhqx@gmail.com> wrote:
> CST6CDT and the like are POSIX timezone, with no rule for transition.
> And POSIX doesn't enforce how to interpret the rule if it's omited.
> Some libc (e.g. glibc) resorted back to IANA (formerly Olson) db rules
> for those timezones.  Some libc (e.g. FreeBSD) uses a fixed rule.
> Other libc (e.g. musl) interpret that as no transition at all [1].

s/omited/omitted/

> In addition, distributions (notoriously Debian-derived, which uses IANA
> db for CST6CDT and the like) started to split "legacy" timezones
> like CST6CDT, EST5EDT into `tzdata-legacy', which will not be installed
> by default [2].
>
> In those cases, t9604 will run into failure.
>
> Let's switch to POSIX timezone with rules to change timezone.
>
> 1: http://mm.icann.org/pipermail/tz/2024-March/058751.html
> 2: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1043250
>
> Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
Đoàn Trần Công Danh April 10, 2024, 3:35 a.m. UTC | #2
On 2024-04-10 10:28:12+0700, Đoàn Trần Công Danh <congdanhqx@gmail.com> wrote:
> -test_expect_success PERL 'check timestamps with author-specific timezones' '
> +test_expect_success PERL,POSIX_TIMEZONE 'check timestamps with author-specific timezones' '
>  
>  	cat >cvs-authors <<-EOF &&
>  	user1=User One <user1@domain.org>
> -	user2=User Two <user2@domain.org> CST6CDT
> -	user3=User Three <user3@domain.org> EST5EDT
> -	user4=User Four <user4@domain.org> MST7MDT
> +	user2=User Two <user2@domain.org> CST6CDT,M4.1.0,M10.5.0
> +	user3=User Three <user3@domain.org> EST5EDT,M4.1.0,M10.5.0
> +	user4=User Four <user4@domain.org> MST7MDT,M4.1.0,M10.5.0

Not sure if it's a good idea to change those CST6CDT, EST5EDT MST7MDT
to some non-sense likes: XST6XDT, YST5YDT, ZST7ZDT, though.
Since those characters are for decoration purpose

>  	EOF
>  	git cvsimport -p"-x" -A cvs-authors -C module-2 module &&
>  	(
> -- 
> 2.44.0.rc0.258.g7320e9588666f
>
Eric Sunshine April 10, 2024, 3:37 a.m. UTC | #3
On Tue, Apr 9, 2024 at 11:28 PM Đoàn Trần Công Danh
<congdanhqx@gmail.com> wrote:
> CST6CDT and the like are POSIX timezone, with no rule for transition.
> And POSIX doesn't enforce how to interpret the rule if it's omited.
> Some libc (e.g. glibc) resorted back to IANA (formerly Olson) db rules
> for those timezones.  Some libc (e.g. FreeBSD) uses a fixed rule.
> Other libc (e.g. musl) interpret that as no transition at all [1].
>
> In addition, distributions (notoriously Debian-derived, which uses IANA
> db for CST6CDT and the like) started to split "legacy" timezones
> like CST6CDT, EST5EDT into `tzdata-legacy', which will not be installed
> by default [2].
>
> In those cases, t9604 will run into failure.
>
> Let's switch to POSIX timezone with rules to change timezone.
>
> Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
> ---
> diff --git a/t/t9604-cvsimport-timestamps.sh b/t/t9604-cvsimport-timestamps.sh
> @@ -3,11 +3,28 @@
> +test_expect_success PERL,POSIX_TIMEZONE 'check timestamps are UTC' '
>
> -       TZ=CST6CDT git cvsimport -p"-x" -C module-1 module &&
> +       TZ=CST6CDT,M4.1.0,M10.5.0 \
> +       git cvsimport -p"-x" -C module-1 module &&
>         git cvsimport -p"-x" -C module-1 module &&

Is this duplicated `git cvsimport` invocation intentional?
Đoàn Trần Công Danh April 10, 2024, 7:10 a.m. UTC | #4
On 2024-04-09 23:37:16-0400, Eric Sunshine <sunshine@sunshineco.com> wrote:
> On Tue, Apr 9, 2024 at 11:28 PM Đoàn Trần Công Danh
> <congdanhqx@gmail.com> wrote:
> > CST6CDT and the like are POSIX timezone, with no rule for transition.
> > And POSIX doesn't enforce how to interpret the rule if it's omited.
> > Some libc (e.g. glibc) resorted back to IANA (formerly Olson) db rules
> > for those timezones.  Some libc (e.g. FreeBSD) uses a fixed rule.
> > Other libc (e.g. musl) interpret that as no transition at all [1].
> >
> > In addition, distributions (notoriously Debian-derived, which uses IANA
> > db for CST6CDT and the like) started to split "legacy" timezones
> > like CST6CDT, EST5EDT into `tzdata-legacy', which will not be installed
> > by default [2].
> >
> > In those cases, t9604 will run into failure.
> >
> > Let's switch to POSIX timezone with rules to change timezone.
> >
> > Signed-off-by: Đoàn Trần Công Danh <congdanhqx@gmail.com>
> > ---
> > diff --git a/t/t9604-cvsimport-timestamps.sh b/t/t9604-cvsimport-timestamps.sh
> > @@ -3,11 +3,28 @@
> > +test_expect_success PERL,POSIX_TIMEZONE 'check timestamps are UTC' '
> >
> > -       TZ=CST6CDT git cvsimport -p"-x" -C module-1 module &&
> > +       TZ=CST6CDT,M4.1.0,M10.5.0 \
> > +       git cvsimport -p"-x" -C module-1 module &&
> >         git cvsimport -p"-x" -C module-1 module &&
> 
> Is this duplicated `git cvsimport` invocation intentional?

I have no idea whether that was intentional, it's there from the very
begining.  Apply this diff on top of my change, and tests still pass.
----- 8< ------

 t/t9604-cvsimport-timestamps.sh | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/t/t9604-cvsimport-timestamps.sh b/t/t9604-cvsimport-timestamps.sh
index 2d03259729b5f..c51a9fa8b6ca6 100755
--- a/t/t9604-cvsimport-timestamps.sh
+++ b/t/t9604-cvsimport-timestamps.sh
@@ -25,11 +25,7 @@ test_expect_success PERL,POSIX_TIMEZONE 'check timestamps are UTC' '
 
 	TZ=CST6CDT,M4.1.0,M10.5.0 \
 	git cvsimport -p"-x" -C module-1 module &&
-	git cvsimport -p"-x" -C module-1 module &&
-	(
-		cd module-1 &&
-		git log --format="%s %ai"
-	) >actual-1 &&
+	git -C module-1 log --format="%s %ai" >actual-1 &&
 	cat >expect-1 <<-EOF &&
 	Rev 16 2006-10-29 07:00:01 +0000
 	Rev 15 2006-10-29 06:59:59 +0000
@@ -60,10 +56,7 @@ test_expect_success PERL,POSIX_TIMEZONE 'check timestamps with author-specific t
 	user4=User Four <user4@domain.org> MST7MDT,M4.1.0,M10.5.0
 	EOF
 	git cvsimport -p"-x" -A cvs-authors -C module-2 module &&
-	(
-		cd module-2 &&
-		git log --format="%s %ai %an"
-	) >actual-2 &&
+	git -C module-2 log --format="%s %ai %an" >actual-2 &&
 	cat >expect-2 <<-EOF &&
 	Rev 16 2006-10-29 01:00:01 -0600 User Two
 	Rev 15 2006-10-29 01:59:59 -0500 User Two
----- >8 ----------------
diff mbox series

Patch

diff --git a/t/t9604-cvsimport-timestamps.sh b/t/t9604-cvsimport-timestamps.sh
index 2ff4aa932df44..2d03259729b5f 100755
--- a/t/t9604-cvsimport-timestamps.sh
+++ b/t/t9604-cvsimport-timestamps.sh
@@ -3,11 +3,28 @@ 
 test_description='git cvsimport timestamps'
 . ./lib-cvs.sh
 
+test_lazy_prereq POSIX_TIMEZONE '
+	local tz=XST-1XDT,M3.5.0,M11.1.0
+	echo "1711846799 -> 2024-03-31 01:59:59 +0100" >expected &&
+	TZ="$tz" test-tool date show:iso-local 1711846799 >actual &&
+	test_cmp expected actual &&
+	echo "1711846800 -> 2024-03-31 03:00:00 +0200" >expected &&
+	TZ="$tz" test-tool date show:iso-local 1711846800 >actual &&
+	test_cmp expected actual &&
+	echo "1730591999 -> 2024-11-03 01:59:59 +0200" >expected &&
+	TZ="$tz" test-tool date show:iso-local 1730591999 >actual &&
+	test_cmp expected actual &&
+	echo "1730592000 -> 2024-11-03 01:00:00 +0100" >expected &&
+	TZ="$tz" test-tool date show:iso-local 1730592000 >actual &&
+	test_cmp expected actual
+'
+
 setup_cvs_test_repository t9604
 
-test_expect_success PERL 'check timestamps are UTC (TZ=CST6CDT)' '
+test_expect_success PERL,POSIX_TIMEZONE 'check timestamps are UTC' '
 
-	TZ=CST6CDT git cvsimport -p"-x" -C module-1 module &&
+	TZ=CST6CDT,M4.1.0,M10.5.0 \
+	git cvsimport -p"-x" -C module-1 module &&
 	git cvsimport -p"-x" -C module-1 module &&
 	(
 		cd module-1 &&
@@ -34,13 +51,13 @@  test_expect_success PERL 'check timestamps are UTC (TZ=CST6CDT)' '
 	test_cmp expect-1 actual-1
 '
 
-test_expect_success PERL 'check timestamps with author-specific timezones' '
+test_expect_success PERL,POSIX_TIMEZONE 'check timestamps with author-specific timezones' '
 
 	cat >cvs-authors <<-EOF &&
 	user1=User One <user1@domain.org>
-	user2=User Two <user2@domain.org> CST6CDT
-	user3=User Three <user3@domain.org> EST5EDT
-	user4=User Four <user4@domain.org> MST7MDT
+	user2=User Two <user2@domain.org> CST6CDT,M4.1.0,M10.5.0
+	user3=User Three <user3@domain.org> EST5EDT,M4.1.0,M10.5.0
+	user4=User Four <user4@domain.org> MST7MDT,M4.1.0,M10.5.0
 	EOF
 	git cvsimport -p"-x" -A cvs-authors -C module-2 module &&
 	(