]> Cypherpunks repositories - gostls13.git/commitdiff
[release-branch.go1.15] time: support slim tzdata format
authorIan Lance Taylor <iant@golang.org>
Thu, 22 Oct 2020 22:25:00 +0000 (15:25 -0700)
committerIan Lance Taylor <iant@golang.org>
Thu, 29 Oct 2020 19:02:27 +0000 (19:02 +0000)
Backport of part of https://golang.org/cl/261877 to support the slim
tzdata format. As of tzdata 2020b, the default is to use the slim format.
We need to support that format so that Go installations continue to
work when tzdata is updated.

Relevant part of the CL description:

    The reason for the failed tests was that when caching location data, the
    extended time format past the end of zone transitions was not
    considered. The respective change was introduced in (*Location).lookup
    by CL 215539.

For #42138

Change-Id: I37f52a0917b2c6e3957e6b4612c8ef104c736e65
Reviewed-on: https://go-review.googlesource.com/c/go/+/264301
Trust: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Tobias Klauser <tobias.klauser@gmail.com>
src/time/zoneinfo_read.go

index 6f789be92a708f8a82870898449f597693aa0b3c..e9f1ab2ec686fd127ad7d07d44c8fc0e360a2cdb 100644 (file)
@@ -325,8 +325,16 @@ func LoadLocationFromTZData(name string, data []byte) (*Location, error) {
                        l.cacheEnd = omega
                        if i+1 < len(tx) {
                                l.cacheEnd = tx[i+1].when
+                       } else if l.extend != "" {
+                               // If we're at the end of the known zone transitions,
+                               // try the extend string.
+                               if _, _, estart, eend, ok := tzset(l.extend, l.cacheEnd, sec); ok {
+                                       l.cacheStart = estart
+                                       l.cacheEnd = eend
+                               }
                        }
                        l.cacheZone = &l.zone[tx[i].index]
+                       break
                }
        }