Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/share/zoneinfo Add tzdata2netbsd, a script to help import ne...



details:   https://anonhg.NetBSD.org/src/rev/c57ed855d0b6
branches:  trunk
changeset: 329271:c57ed855d0b6
user:      apb <apb%NetBSD.org@localhost>
date:      Sat May 17 19:53:22 2014 +0000

description:
Add tzdata2netbsd, a script to help import new versions of tzdata.

diffstat:

 share/zoneinfo/tzdata2netbsd |  204 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 204 insertions(+), 0 deletions(-)

diffs (208 lines):

diff -r 592a16130d94 -r c57ed855d0b6 share/zoneinfo/tzdata2netbsd
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/share/zoneinfo/tzdata2netbsd      Sat May 17 19:53:22 2014 +0000
@@ -0,0 +1,204 @@
+# $NetBSD: tzdata2netbsd,v 1.1 2014/05/17 19:53:22 apb Exp $
+#
+# For use by NetBSD developers when updating to new versions of tzdata.
+#
+
+OLDVER=2013i
+NEWVER=2014c
+
+# Uppercase variants of OLDVER and NEWVER
+OLDVER_UC="$( echo "${OLDVER}" | tr '[a-z]' '[A-Z]' )"
+NEWVER_UC="$( echo "${NEWVER}" | tr '[a-z]' '[A-Z]' )"
+
+# Tags for use with version control systems
+CVSOLDTAG="TZDATA${OLDVER_UC}"
+CVSNEWTAG="TZDATA${NEWVER_UC}"
+CVSBRANCHTAG="TZDATA"
+GITHUBTAG="${NEWVER}"
+
+# URLs for fetching distribution files, etc.
+DISTURL="ftp://ftp.iana.org/tz/releases/tzdata${NEWVER}.tar.gz";
+SIGURL="${DISTURL}.asc"
+NEWSURL="https://github.com/eggert/tz/raw/${GITHUBTAG}/NEWS";
+
+# Directories
+REPODIR="src/share/zoneinfo"   # relative to the NetSBD CVS repository
+WORKDIR="$(pwd)/update-work"
+EXTRACTDIR="${WORKDIR}/extract/${NEWVER}"
+
+# Files in the work directory
+DISTFILE="${WORKDIR}/${DISTURL##*/}"
+SIGFILE="${DISTFILE}.sig"
+NEWSFILE="${WORKDIR}/NEWS"
+NEWSTRIMFILE="${WORKDIR}/NEWS.trimmed"
+IMPORTMSGFILE="${WORKDIR}/import.msg"
+MERGSMSGFILE="${WORKDIR}/merge.msg"
+
+DOIT()
+{
+       really_do_it=false
+
+       if $really_do_it; then
+               "$@"
+       else
+               echo "NOT REALLY DOING:" "$@"
+       fi
+}
+
+mkworkdir()
+{
+       mkdir -p "${WORKDIR}"
+}
+
+fetch()
+{
+       [ -f "${DISTFILE}" ] || ftp -o "${DISTFILE}" "${DISTURL}"
+       [ -f "${SIGFILE}" ] || ftp -o "${SIGFILE}" "${SIGURL}"
+       [ -f "${NEWSFILE}" ] || ftp -o "${NEWSFILE}" "${NEWSURL}"
+}
+
+checksig()
+{
+       gpg --verify "${SIGFILE}" "${DISTFILE}"
+}
+
+extract()
+{
+       mkdir -p "${EXTRACTDIR}"
+       tar -z -xf "${DISTFILE}" -C "${EXTRACTDIR}"
+}
+
+# Each release has a heading in the NEWS file, like
+# "Release <version> - <date>".
+# Find the relevant part of the NEWS file for all release between
+# OLDVAR and NEWVER, and save them to NEWSTRIMFILE.
+#
+trimnews()
+{
+       awk -v oldver="${OLDVER}" -v newver="${NEWVER}" \
+           '
+               BEGIN {inrange = 0}
+               /^Release [0-9]+[a-z]+ - .*/ {
+                       inrange = ($2 > oldver && $2 <= newver)
+               }
+               // { if (inrange) print; }
+               ' \
+               <"${NEWSFILE}" >"${NEWSTRIMFILE}"
+}
+
+# Create IMPORTMSGFILE from NEWSTRIMFILE, by ignoring some sections,
+# keeping only the first sentence from paragraphs in other sections,
+# and changing the format.  The result should be edited by hand before
+# performing a cvs commit.
+#
+mkimportmsg()
+{
+       [ -s "${IMPORTMSGFILE}" ] && return
+       awk -v oldver="${OLDVER}" -v newver="${NEWVER}" \
+           -v disturl="${DISTURL}" \
+           '
+               BEGIN {
+                       bullet = "  * ";
+                       indent = "    ";
+                       blankline = 0;
+                       goodsection = 0;
+                       havesentence = 0;
+                       print "Import tzdata"newver" from "disturl;
+               }
+               /^Release/ {
+                       ver = $2;
+                       date = gensub(".* - ", "", 1, $0);
+                       print "";
+                       print "Summary of changes in tzdata"ver \
+                               " ("date"):";
+               }
+               /^$/ { blankline = 1; havesentence = 0; }
+               /^  Changes affecting/ { goodsection = 0; }
+               /^  Changes affecting.*time/ { goodsection = 1; }
+               /^  Changes affecting.*documentation/ || \
+               /^  Changes affecting.*commentary/ {
+                       t = gensub("^ *", "", 1, $0);
+                       t = gensub("\\.*$", ".", 1, t);
+                       print bullet t;
+                       goodsection = 0;
+               }
+               /^    .*/ && goodsection {
+                       # In a paragraph in a "good" section.
+                       # Ignore leading spaces, and ignore anything
+                       # after the first sentence.
+                       # First line of paragraph gets a bullet.
+                       t = gensub("^ *", "", 1, $0);
+                       t = gensub("\\. .*", ".", 1, t);
+                       if (blankline) print bullet t;
+                       else if (! havesentence) print indent t;
+                       havesentence = (havesentence || (t ~ "\\.$"));
+               }
+               /./ { blankline = 0; }
+               ' \
+               <"${NEWSTRIMFILE}" >"${IMPORTMSGFILE}"
+}
+
+editimportmsg()
+{
+       cat <<EOF
+Edit ${IMPORTMSGFILE##%/}, which will be used as a log message
+for "cvs import".  A template has been prepared from the NEWS file.
+EOF
+       vi "${IMPORTMSGFILE}" "${NEWSFILE}"
+}
+
+cvsimport()
+{
+       DOIT cvs import -F "${IMPORTMSGFILE}" \
+               "${REPODIR}" "${CVSBRANCHTAG}" "${CVSNEWTAG}"
+}
+
+cvsmerge()
+{
+       DOIT cvs update -j"${CVSOLDTAG}" -j"${CVSNEWTAG}"
+}
+
+resolveconflicts()
+{
+       cat <<EOF
+Resolve conflicts resulting from the cvs merge.
+exit 0 when done.  exit 1 to abort.
+EOF
+       nl='
+'
+       PS1="[inside ${0##*/}]${nl}${PS1}" sh -i
+}
+
+cvscommitmerge()
+{
+       DOIT cvs commit -m "Merge tzdata${NEWVER}"
+}
+
+extra()
+{
+       cat <<EOF
+Also do the following:
+ * Edit src/doc/3RDPARTY
+ * Edit src/doc/CHANGES
+ * Submit pullup requests for all active release branches.
+ * rm -rf ${WORKDIR}
+EOF
+}
+
+main()
+{
+       mkworkdir || exit $?
+       fetch || exit $?
+       checksig || exit $?
+       extract || exit $?
+       trimnews || exit $?
+       mkimportmsg || exit $?
+       editimportmsg || exit $?
+       cvsimport || exit $?
+       cvsmerge || exit $?
+       resolveconflicts || exit $?
+       cvscommitmerge || exit $?
+       extra || exit $?
+}
+
+main "$@"



Home | Main Index | Thread Index | Old Index