summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--debian/changelog7
-rw-r--r--debian/patches/Correct-timezone-symlinks-when-using-BACKWARD-backward-PA.patch74
-rw-r--r--debian/patches/series2
-rw-r--r--debian/patches/ziguard.awk-Move-link-to-link-feature-from-vanguard-to-ma.patch39
-rwxr-xr-xdebian/tests/python29
5 files changed, 111 insertions, 40 deletions
diff --git a/debian/changelog b/debian/changelog
index 9ed8712..ec85854 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,10 @@
+tzdata (2024a-3) unstable; urgency=medium
+
+ * Avoid timezones being symlinks to symlinks to avoid breaking C++20 standard
+ expectation (LP: #2062522)
+
+ -- Benjamin Drung <bdrung@debian.org> Fri, 19 Apr 2024 21:38:15 +0200
+
tzdata (2024a-2) unstable; urgency=medium
* Update Italian debconf translation.
diff --git a/debian/patches/Correct-timezone-symlinks-when-using-BACKWARD-backward-PA.patch b/debian/patches/Correct-timezone-symlinks-when-using-BACKWARD-backward-PA.patch
new file mode 100644
index 0000000..b8e9fa5
--- /dev/null
+++ b/debian/patches/Correct-timezone-symlinks-when-using-BACKWARD-backward-PA.patch
@@ -0,0 +1,74 @@
+From: Benjamin Drung <benjamin.drung@canonical.com>
+Date: Wed, 3 Apr 2024 15:14:50 +0200
+Subject: Correct timezone symlinks when using BACKWARD=backward
+ PACKRATDATA=backzone
+
+When using BACKWARD=backward PACKRATDATA=backzone the symlinks might
+point to the incorrect file (e.g. Africa/Asmera points to Africa/Nairobi
+instead of Africa/Asmara).
+
+Move the link to link feature from vanguard to main dataform to produce
+correct symlink (e.g. Africa/Asmera -> Africa/Asmara) in this case. Drop
+those link from `backward` that would cause symlinks to symlinks.
+
+See https://bugs.launchpad.net/ubuntu/+source/tzdata/+bug/2062522
+
+Forwarded: https://mm.icann.org/pipermail/tz/2024-April/058853.html
+---
+ backward | 6 +++---
+ ziguard.awk | 4 ++--
+ 2 files changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/backward b/backward
+index 65c711b..08c95b1 100644
+--- a/backward
++++ b/backward
+@@ -30,7 +30,7 @@
+ # Pre-1993 naming conventions
+
+ # Link TARGET LINK-NAME #= TARGET1
+-Link Australia/Sydney Australia/ACT #= Australia/Canberra
++Link Australia/Sydney Australia/ACT
+ Link Australia/Lord_Howe Australia/LHI
+ Link Australia/Sydney Australia/NSW
+ Link Australia/Darwin Australia/North
+@@ -40,7 +40,7 @@ Link Australia/Hobart Australia/Tasmania
+ Link Australia/Melbourne Australia/Victoria
+ Link Australia/Perth Australia/West
+ Link Australia/Broken_Hill Australia/Yancowinna
+-Link America/Rio_Branco Brazil/Acre #= America/Porto_Acre
++Link America/Rio_Branco Brazil/Acre
+ Link America/Noronha Brazil/DeNoronha
+ Link America/Sao_Paulo Brazil/East
+ Link America/Manaus Brazil/West
+@@ -101,7 +101,7 @@ Link America/Mazatlan Mexico/BajaSur
+ Link America/Mexico_City Mexico/General
+ Link Pacific/Auckland NZ
+ Link Pacific/Chatham NZ-CHAT
+-Link America/Denver Navajo #= America/Shiprock
++Link America/Denver Navajo
+ Link Asia/Shanghai PRC
+ Link Europe/Warsaw Poland
+ Link Europe/Lisbon Portugal
+diff --git a/ziguard.awk b/ziguard.awk
+index 7a3404f..f6b8d24 100644
+--- a/ziguard.awk
++++ b/ziguard.awk
+@@ -340,7 +340,7 @@ function make_linkline(oldline, target, linkname, oldtarget, comment, \
+ return "Link\t" target "\t" replsuffix comment
+ }
+
+-/^Link/ && $4 == "#=" && DATAFORM == "vanguard" {
++/^Link/ && $4 == "#=" && (DATAFORM != "rearguard") {
+ $0 = make_linkline($0, $5, $3, $2)
+ }
+
+@@ -378,7 +378,7 @@ function cut_link_chains_short( \
+ }
+
+ END {
+- if (DATAFORM != "vanguard") {
++ if (DATAFORM == "rearguard") {
+ cut_link_chains_short()
+ }
+ for (i = 1; i <= NR; i++)
diff --git a/debian/patches/series b/debian/patches/series
index c9692cd..c81fc0c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1 @@
-ziguard.awk-Move-link-to-link-feature-from-vanguard-to-ma.patch
+Correct-timezone-symlinks-when-using-BACKWARD-backward-PA.patch
diff --git a/debian/patches/ziguard.awk-Move-link-to-link-feature-from-vanguard-to-ma.patch b/debian/patches/ziguard.awk-Move-link-to-link-feature-from-vanguard-to-ma.patch
deleted file mode 100644
index e788c38..0000000
--- a/debian/patches/ziguard.awk-Move-link-to-link-feature-from-vanguard-to-ma.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-From: Benjamin Drung <benjamin.drung@canonical.com>
-Date: Wed, 3 Apr 2024 15:14:50 +0200
-Subject: ziguard.awk: Move link to link feature from vanguard to main
- dataform
-
-When using BACKWARD=backward PACKRATDATA=backzone the symlinks might
-point to the incorrect file (e.g. Africa/Asmera points to Africa/Nairobi
-instead of Africa/Asmara).
-
-Move the link to link feature from vanguard to main dataform to produce
-correct symlink (e.g. Africa/Asmera -> Africa/Asmara) in this case.
-
-Forwarded: https://mm.icann.org/pipermail/tz/2024-April/058853.html
----
- ziguard.awk | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/ziguard.awk b/ziguard.awk
-index 7a3404f..f6b8d24 100644
---- a/ziguard.awk
-+++ b/ziguard.awk
-@@ -340,7 +340,7 @@ function make_linkline(oldline, target, linkname, oldtarget, comment, \
- return "Link\t" target "\t" replsuffix comment
- }
-
--/^Link/ && $4 == "#=" && DATAFORM == "vanguard" {
-+/^Link/ && $4 == "#=" && (DATAFORM != "rearguard") {
- $0 = make_linkline($0, $5, $3, $2)
- }
-
-@@ -378,7 +378,7 @@ function cut_link_chains_short( \
- }
-
- END {
-- if (DATAFORM != "vanguard") {
-+ if (DATAFORM == "rearguard") {
- cut_link_chains_short()
- }
- for (i = 1; i <= NR; i++)
diff --git a/debian/tests/python b/debian/tests/python
index 25044a9..bc4db3e 100755
--- a/debian/tests/python
+++ b/debian/tests/python
@@ -28,6 +28,12 @@ def read_backwards_links(backwards_file: pathlib.Path) -> dict[str, str]:
return backwards_links
+def read_link(link: pathlib.Path) -> pathlib.Path:
+ """Return the absolute path to which the symbolic link points."""
+ destination = link.parent / link.readlink()
+ return pathlib.Path(os.path.normpath(destination))
+
+
class TestZoneinfo(unittest.TestCase):
"""Test timezones using Python's zoneinfo module."""
@@ -132,6 +138,28 @@ class TestZoneinfo(unittest.TestCase):
future = now + datetime.timedelta(days=30 * 6)
self._assert_equal_zones_at_date(future, tz_link, tz_target)
+ def assert_not_symlink_to_symlink(self, timezone_path: pathlib.Path) -> None:
+ """Assert that the timezone is not a symlink to another symlink."""
+ if not timezone_path.is_symlink():
+ return
+ destination = read_link(timezone_path)
+ if not destination.is_symlink():
+ return
+ self.fail(
+ f"Symlink to symlink found: {timezone_path} -> {destination}"
+ f" -> {read_link(destination)}"
+ )
+
+ def test_no_symlinks_to_symlinks(self) -> None:
+ """Check that no timezone is a symlink to another symlink."""
+ for timezone in sorted(zoneinfo.available_timezones()):
+ if timezone == "localtime":
+ continue
+ with self.subTest(timezone):
+ for tzpath in zoneinfo.TZPATH:
+ timezone_path = pathlib.Path(tzpath) / timezone
+ self.assert_not_symlink_to_symlink(timezone_path)
+
def test_timezones(self) -> None:
"""Test all zones to load, have a name, and have a reasonable offset."""
for zone in zoneinfo.available_timezones():
@@ -168,6 +196,7 @@ class TestZoneinfo(unittest.TestCase):
date = datetime.datetime(2024, 3, 2, tzinfo=tzinfo)
self.assertEqual(self._hours(date.utcoffset()), 5)
+
def main() -> None:
"""Run unit tests in verbose mode."""
argv = sys.argv.copy()