Module Name: src Committed By: kre Date: Wed Aug 17 14:32:34 UTC 2022
Modified Files: src/external/public-domain/tz: tzdata2netbsd Log Message: Add support for fetching and using the Global Time Zone fork of tzdata in addition to the older (Eggert) version. The GTZ vesion is the one we're currently using, so automating its use helps. While here, correctly compare version numbers, correctly handling the almost unthinkable need for a multi-char suffix after the year as the version ID. This was almost correct before, but would have failed in the case that 9999za was being updated to 10000a And add the ability (should not be needed often) to fetch one version but claim to be using another (this was useful this time, as 2022c followed quickly on the heels of 2022b - but made no changes at all to the data, just some of the build infrastructure we don't use). The GTZ version hadn't been updated (there was no real need, since the data, which is all that it alters, had not changed) at the time, so we updated to 2022c using the gtz data file for 2022b. (The 2022cgtz data file now exists - but didn't then). To generate a diff of this commit: cvs rdiff -u -r1.14 -r1.15 src/external/public-domain/tz/tzdata2netbsd Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/public-domain/tz/tzdata2netbsd diff -u src/external/public-domain/tz/tzdata2netbsd:1.14 src/external/public-domain/tz/tzdata2netbsd:1.15 --- src/external/public-domain/tz/tzdata2netbsd:1.14 Tue Aug 16 13:23:12 2022 +++ src/external/public-domain/tz/tzdata2netbsd Wed Aug 17 14:32:34 2022 @@ -1,4 +1,4 @@ -# $NetBSD: tzdata2netbsd,v 1.14 2022/08/16 13:23:12 kre Exp $ +# $NetBSD: tzdata2netbsd,v 1.15 2022/08/17 14:32:34 kre Exp $ # For use by NetBSD developers when updating to new versions of tzdata. # @@ -56,7 +56,9 @@ usage() printf >&2 '%s\n' \ "Usage: $0 [new-version-id [old-version-id]]" \ " where a version-id is of the form YYYYx (eg: 2018c)" \ - " or '' for new-version-id (to specify only the old)" + " or '' for new-version-id (to specify only the old)" \ + " and where new-version-id can have =fetch-version-id" \ + " appended to specify fetching that version instead" exit 2 } @@ -71,8 +73,12 @@ fail() valid_vers() { case "$2" in + # The IANA (Eggert) standard version names ${VERS_PATTERN} | ${VERS_PATTERN}[a-z] ) ;; + # The alternate (more rational) fork "global timezone" version + ${VERS_PATTERN}gtz | ${VERS_PATTERN}[a-z]gtz ) + ;; *) printf >&2 '%s: %s\n' \ "Bad form for $1 version specifier '$2'" \ "should (usually) be 'YYYYx'" @@ -121,7 +127,7 @@ get_curvers() argparse() { - local OVF + local OVF OV NV OVy OVs NVy NVs if OVF=$(find "${WORK_PFX}" -name "${UPDATE_FROM##*/}" -mtime +2 -print) then @@ -156,6 +162,14 @@ argparse() case "$#:$1" in 0: | 1: | 2: ) ;; + 1:=?*|2:=?*) + valid_vers fetch "${1#=}" && FETCHVER="${1#=}" || usage + ;; + 1:*=?*|2:*=?*) + set -- "{$1%=*}" "${1#*=}" + valid_vers fetch "$2" && FETCHVER="$2" || usage + valid_vers new "$1" && NEWVER="$1" || usage + ;; 1:?*|2:?*) valid_vers new "$1" && NEWVER="$1" || usage ;; @@ -165,6 +179,13 @@ argparse() test -z "${NEWVER}" && get_curvers + test -z "${FETCHVER}" && FETCHVER=${NEWVER} + + case "${FETCHVER}" in + *gtz) GLOBAL=true;; + *) GLOBAL=false;; + esac + test "${NEWVER}" = "${OLDVER}" && { printf '%s\n' \ "New and old versions both ${NEWVER}: nothing to do" @@ -175,22 +196,50 @@ argparse() printf '%s\n' "${OLDVER}" > "${UPDATE_FROM}" || fail "Unable to preserve old version ${OLDVER} in ${UPDATE_FROM}" - test "${#NEWVER}" -gt "${#OLDVER}" || - test "${NEWVER}" '>' "${OLDVER}" || - { - local reply - - printf '%s\n' \ - "Update would revert ${OLDVER} to ${NEWVER}" - read -p "Is reversion intended? " reply - case "${reply}" in - [Yy]*) ;; - *) printf '%s\n' OK. Aborted. - rm -f "${UPDATE_FROM}" - exit 1 - ;; - esac + # Do version upgrade test using base version names, ignoring + # the "gtz" in the "global timezone" versions, so we can + # switch back and forth between use of those as circumstances change + OV=${OLDVER%gtz} + NV=${NEWVER%gtz} + + OVy=${OV%%[!0-9]*} + OVs=${OV#${OVy}} + NVy=${NV%%[!0-9]*} + NVs=${NV#${NVy}} + + # To get all the permutations correct, we need to separate + # the year and suffix parts of the version IDs (done just above) + # and then compare them separately. The suffix is only relevant + # to the result when the years are the same. + + # We compare the length of the suffix separately to the suffix + # itself, a multi-char suffix has never happened (and is never + # likely to) - but in the event that prediction is wrong, we don't + # know (yet) what is to come after 'z' - it might be 'za' 'zb' + # ... to 'zz" then 'zza' ... or it might be 'aa' 'ab' ... 'az' 'ba'... + # we need to handle both possibilities. Two things stand out from + # those: 1. a longer suffix is always going to be for a newer version + # than a shorter one; 2. equal length suffixes can be compared as + # strings + + if [ "${OVy}" -gt "${NVy}" ] || { + [ "${OVy}" -eq "${NVy}" ] && { + [ "${#OVs}" -gt "${#NVs}" ] || + LC_COLLATE=C [ "${OVs}" '>' "${NVs}" ] } + } then + local reply + + printf '%s\n' "Update would revert ${OLDVER} to ${NEWVER}" + read -p "Is reversion intended? " reply + case "${reply}" in + [Yy]*) ;; + *) printf '%s\n' OK. Aborted. + rm -f "${UPDATE_FROM}" + exit 1 + ;; + esac + fi return 0 } @@ -207,10 +256,22 @@ setup_versions() CVSBRANCHTAG="TZDATA" GITHUBTAG="${NEWVER}" + if $GLOBAL && [ "${CVSNEWTAG%GTZ}" = "${CVSNEWTAG}" ] + then + CVSNEWTAG=${CVSNEWTAG}GTZ + fi + # URLs for fetching distribution files, etc. - DISTURL="ftp://${DIST_HOST}/${DIST_PATH}/${DIST_FILES}" - DISTURL="${DISTURL}/tzdata${NEWVER}.tar.gz" - SIGURL="${DISTURL}.asc" + if $GLOBAL + then + DISTURL=https://github.com/JodaOrg/global-tz/releases/download + DISTURL=${DISTURL}/${FETCHVER}/tzdata${FETCHVER}.tar.gz + unset SIGURL + else + DISTURL="ftp://${DIST_HOST}/${DIST_PATH}/${DIST_FILES}" + DISTURL="${DISTURL}/tzdata${NEWVER}.tar.gz" + SIGURL="${DISTURL}.asc" + fi NEWSURL="https://github.com/eggert/tz/raw/${GITHUBTAG}/NEWS" # Directories @@ -365,8 +426,13 @@ fetch() { [ -f "${DISTFILE}" ] || ftp -o "${DISTFILE}" "${DISTURL}" || fail "fetch of ${DISTFILE} failed" - [ -f "${SIGFILE}" ] || ftp -o "${SIGFILE}" "${SIGURL}" || - fail "fetch of ${SIGFILE} failed" + + if [ -n "${SIGURL}" ] + then + [ -f "${SIGFILE}" ] || ftp -o "${SIGFILE}" "${SIGURL}" || + fail "fetch of ${SIGFILE} failed" + fi + [ -f "${NEWSFILE}" ] || ftp -o "${NEWSFILE}" "${NEWSURL}" || fail "fetch of ${NEWSFILE} failed" } @@ -604,7 +670,7 @@ main() setup_versions mkworkdir fetch - checksig + $GLOBAL || checksig extract addnews trimnews