CONTRIBUTING revision 1.4
11.1SchristosContributing to the tz code and data
21.1Schristos
31.1SchristosThe time zone database is by no means authoritative: governments
41.1Schristoschange timekeeping rules erratically and sometimes with little
51.1Schristoswarning, the data entries do not cover all of civil time before
61.1Schristos1970, and undoubtedly errors remain in the code and data.  Feel
71.1Schristosfree to fill gaps or fix mistakes, and please email improvements
81.3Schristosto tz@iana.org for use in the future.  In your email, please give
91.3Schristosreliable sources that reviewers can check.
101.3Schristos
111.3Schristos-----
121.3Schristos
131.3SchristosDevelopers can contribute technical changes to the source code and
141.3Schristosdata as follows.
151.1Schristos
161.1SchristosTo email small changes, please run a POSIX shell command like
171.1Schristos'diff -u old/europe new/europe >myfix.patch', and attach
181.1Schristosmyfix.patch to the email.
191.1Schristos
201.3SchristosFor more-elaborate changes, please read the theory.html file and browse
211.3Schristosthe mailing list archives <https://mm.icann.org/pipermail/tz/> for
221.3Schristosexamples of patches that tend to work well.  Additions to
231.1Schristosdata should contain commentary citing reliable sources as
241.3Schristosjustification.  Citations should use https: URLs if available.
251.1Schristos
261.1SchristosPlease submit changes against either the latest release in
271.3Schristos<https://www.iana.org/time-zones> or the master branch of the development
281.4Schristosrepository.  The latter is preferred.  If you use Git the following
291.4Schristosworkflow may be helpful:
301.1Schristos
311.2Schristos  * Copy the development repository.
321.1Schristos
331.1Schristos      git clone https://github.com/eggert/tz.git
341.1Schristos      cd tz
351.1Schristos
361.1Schristos  * Get current with the master branch.
371.1Schristos
381.1Schristos      git checkout master
391.1Schristos      git pull
401.1Schristos
411.1Schristos  * Switch to a new branch for the changes.  Choose a different
421.1Schristos    branch name for each change set.
431.1Schristos
441.1Schristos      git checkout -b mybranch
451.1Schristos
461.4Schristos  * Sleuth by using 'git blame'.  For example, when fixing data for
471.4Schristos    Africa/Sao_Tome, if the command 'git blame africa' outputs a line
481.4Schristos    '2951fa3b (Paul Eggert 2018-01-08 09:03:13 -0800 1068) Zone
491.4Schristos    Africa/Sao_Tome 0:26:56 - LMT 1884', commit 2951fa3b should
501.4Schristos    provide some justification for the 'Zone Africa/Sao_Tome' line.
511.4Schristos
521.1Schristos  * Edit source files.  Include commentary that justifies the
531.1Schristos    changes by citing reliable sources.
541.1Schristos
551.1Schristos  * Debug the changes, e.g.:
561.1Schristos
571.1Schristos      make check
581.1Schristos      make install
591.1Schristos      ./zdump -v America/Los_Angeles
601.1Schristos
611.1Schristos  * For each separable change, commit it in the new branch, e.g.:
621.1Schristos
631.1Schristos      git add northamerica
641.1Schristos      git commit
651.1Schristos
661.1Schristos    See recent 'git log' output for the commit-message style.
671.1Schristos
681.1Schristos  * Create patch files 0001-*, 0002-*, ...
691.1Schristos
701.1Schristos      git format-patch master
711.1Schristos
721.1Schristos  * After reviewing the patch files, send the patches to tz@iana.org
731.1Schristos    for others to review.
741.1Schristos
751.1Schristos      git send-email master
761.1Schristos
771.4Schristos    For an archived example of such an email, see
781.4Schristos    <https://mm.icann.org/pipermail/tz/2018-February/026122.html>.
791.4Schristos
801.1Schristos  * Start anew by getting current with the master branch again
811.1Schristos    (the second step above).
821.1Schristos
831.1SchristosPlease do not create issues or pull requests on GitHub, as the
841.1Schristosproper procedure for proposing and distributing patches is via
851.1Schristosemail as illustrated above.
86