[tz] [PROPOSED 2/2] Vanguard form now uses links to links
Paul Eggert
eggert at cs.ucla.edu
Mon Oct 24 06:08:36 UTC 2022
* Makefile (check_links): Propagate DATAFORM to checklinks.awk.
* NEWS: Mention the change.
* backward: Adjust whitespace so that using ziguard.awk to
convert to vanguard form and back is a no-op
* checklinks.awk: Do not warn about links to links in vanguard form.
In warning, distiguish between dangling links and links to links.
* ziguard.awk: Convert to and from vanguard form, which now
uses links to links.
---
Makefile | 10 +++++++---
NEWS | 4 +++-
backward | 10 +++++-----
checklinks.awk | 7 ++++++-
ziguard.awk | 21 +++++++++++++++++++++
5 files changed, 42 insertions(+), 10 deletions(-)
diff --git a/Makefile b/Makefile
index 6f8b2f9..d3cfbd0 100644
--- a/Makefile
+++ b/Makefile
@@ -829,9 +829,13 @@ check_sorted: backward backzone iso3166.tab zone.tab zone1970.tab
touch $@
check_links: checklinks.awk $(TDATA_TO_CHECK) tzdata.zi
- $(AWK) -f checklinks.awk -v backcheck=backward \
- $(TDATA_TO_CHECK)
- $(AWK) -f checklinks.awk tzdata.zi
+ $(AWK) \
+ -v DATAFORM=$(DATAFORM) \
+ -v backcheck=backward \
+ -f checklinks.awk $(TDATA_TO_CHECK)
+ $(AWK) \
+ -v DATAFORM=$(DATAFORM) \
+ -f checklinks.awk tzdata.zi
touch $@
check_tables: checktab.awk $(YDATA) backward $(ZONETABLES)
diff --git a/NEWS b/NEWS
index f400d71..ac8de47 100644
--- a/NEWS
+++ b/NEWS
@@ -5,7 +5,7 @@ Unreleased, experimental changes
Briefly:
Move links to 'backward'.
In vanguard form, GMT is now a Zone and Etc/GMT a link.
- zic now supports links to links.
+ zic now supports links to links, and vanguard form uses this.
Simplify four Ontario zones into one.
Fix a Y2438 bug when reading TZif data.
@@ -19,6 +19,8 @@ Unreleased, experimental changes
However, this change exposes a bug in TZUpdater 2.3.2 so it is
present only in vanguard form for now.
+ Vanguard form now uses links to links, as zic now supports this.
+
Changes to past timestamps
Simplify four Ontario zones to one, as the post-1970 differences
diff --git a/backward b/backward
index 4c1c5d5..46dc17d 100644
--- a/backward
+++ b/backward
@@ -89,7 +89,7 @@ Link Etc/GMT GMT0
Link Etc/GMT Greenwich
# End of rearguard section.
Link Asia/Hong_Kong Hongkong
-Link Africa/Abidjan Iceland #= Atlantic/Reykjavik
+Link Africa/Abidjan Iceland #= Atlantic/Reykjavik
Link Asia/Tehran Iran
Link Asia/Jerusalem Israel
Link America/Jamaica Jamaica
@@ -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 #= America/Shiprock
Link Asia/Shanghai PRC
Link Europe/Warsaw Poland
Link Europe/Lisbon Portugal
@@ -139,7 +139,7 @@ Link America/Argentina/Jujuy America/Jujuy
Link America/Indiana/Knox America/Knox_IN
Link America/Kentucky/Louisville America/Louisville
Link America/Argentina/Mendoza America/Mendoza
-Link America/Puerto_Rico America/Virgin #= America/St_Thomas
+Link America/Puerto_Rico America/Virgin #= America/St_Thomas
Link Pacific/Pago_Pago Pacific/Samoa
@@ -293,11 +293,11 @@ Link Pacific/Port_Moresby Pacific/Yap
# Alternate names for the same location
# Link TARGET LINK-NAME #= TARGET1
-Link Africa/Nairobi Africa/Asmera #= Africa/Asmara
+Link Africa/Nairobi Africa/Asmera #= Africa/Asmara
Link America/Nuuk America/Godthab
Link Asia/Ashgabat Asia/Ashkhabad
Link Asia/Kolkata Asia/Calcutta
-Link Asia/Shanghai Asia/Chungking #= Asia/Chongqing
+Link Asia/Shanghai Asia/Chungking #= Asia/Chongqing
Link Asia/Dhaka Asia/Dacca
# Istanbul is in both continents.
Link Europe/Istanbul Asia/Istanbul
diff --git a/checklinks.awk b/checklinks.awk
index 6e4fda8..82a5fea 100644
--- a/checklinks.awk
+++ b/checklinks.awk
@@ -46,8 +46,13 @@ BEGIN {
END {
for (tz in used) {
if (defined[tz] != Zone) {
- printf "%s: Link to non-zone\n", tz
+ if (!defined[tz]) {
+ printf "%s: Link to nowhere\n", tz
status = 1
+ } else if (DATAFORM != "vanguard") {
+ printf "%s: Link to link\n", tz
+ status = 1
+ }
}
}
for (tz in shortcut) {
diff --git a/ziguard.awk b/ziguard.awk
index a864f9f..8cff035 100644
--- a/ziguard.awk
+++ b/ziguard.awk
@@ -311,6 +311,10 @@ DATAFORM != "main" {
}
}
+/^Link/ && $4 == "#=" && DATAFORM == "vanguard" {
+ $0 = "Link\t" $5 "\t" $3
+}
+
# If a Link line is followed by a Link or Zone line for the same data, comment
# out the Link line. This can happen if backzone overrides a Link
# with a Zone or a different Link.
@@ -320,11 +324,28 @@ DATAFORM != "main" {
/^Link/ {
sub(/^Link/, "#Link", line[linkline[$3]])
linkline[$3] = NR
+ linktarget[$3] = $2
}
{ line[NR] = $0 }
+function cut_link_chains_short(\
+ linkname, target, t, u)
+{
+ for (linkname in linktarget) {
+ target = linktarget[linkname]
+ for (t = target; (u = linktarget[t]); t = u)
+ continue;
+ if (t != target) {
+ line[linkline[linkname]] = "Link\t" t "\t" linkname "\t#= " target
+ }
+ }
+}
+
END {
+ if (DATAFORM != "vanguard") {
+ cut_link_chains_short()
+ }
for (i = 1; i <= NR; i++)
print line[i]
}
--
2.37.3
More information about the tz
mailing list