CONTRIBUTING revision 1.5
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.5SchristosFor more-elaborate or possibly-controversial changes,
211.5Schristossuch as renaming, adding or removing zones, please read
221.5Schristos<https://www.iana.org/time-zones/repository/theory.html> or the file
231.5Schristostheory.html.  It is also good to browse the mailing list archives
241.5Schristos<https://mm.icann.org/pipermail/tz/> for examples of patches that tend
251.5Schristosto work well.  Additions to data should contain commentary citing
261.5Schristosreliable sources as justification.  Citations should use https: URLs
271.5Schristosif available.
281.1Schristos
291.1SchristosPlease submit changes against either the latest release in
301.3Schristos<https://www.iana.org/time-zones> or the master branch of the development
311.4Schristosrepository.  The latter is preferred.  If you use Git the following
321.4Schristosworkflow may be helpful:
331.1Schristos
341.2Schristos  * Copy the development repository.
351.1Schristos
361.1Schristos      git clone https://github.com/eggert/tz.git
371.1Schristos      cd tz
381.1Schristos
391.1Schristos  * Get current with the master branch.
401.1Schristos
411.1Schristos      git checkout master
421.1Schristos      git pull
431.1Schristos
441.1Schristos  * Switch to a new branch for the changes.  Choose a different
451.1Schristos    branch name for each change set.
461.1Schristos
471.1Schristos      git checkout -b mybranch
481.1Schristos
491.4Schristos  * Sleuth by using 'git blame'.  For example, when fixing data for
501.4Schristos    Africa/Sao_Tome, if the command 'git blame africa' outputs a line
511.4Schristos    '2951fa3b (Paul Eggert 2018-01-08 09:03:13 -0800 1068) Zone
521.4Schristos    Africa/Sao_Tome 0:26:56 - LMT 1884', commit 2951fa3b should
531.4Schristos    provide some justification for the 'Zone Africa/Sao_Tome' line.
541.4Schristos
551.1Schristos  * Edit source files.  Include commentary that justifies the
561.1Schristos    changes by citing reliable sources.
571.1Schristos
581.1Schristos  * Debug the changes, e.g.:
591.1Schristos
601.1Schristos      make check
611.1Schristos      make install
621.1Schristos      ./zdump -v America/Los_Angeles
631.1Schristos
641.1Schristos  * For each separable change, commit it in the new branch, e.g.:
651.1Schristos
661.1Schristos      git add northamerica
671.1Schristos      git commit
681.1Schristos
691.1Schristos    See recent 'git log' output for the commit-message style.
701.1Schristos
711.1Schristos  * Create patch files 0001-*, 0002-*, ...
721.1Schristos
731.1Schristos      git format-patch master
741.1Schristos
751.1Schristos  * After reviewing the patch files, send the patches to tz@iana.org
761.1Schristos    for others to review.
771.1Schristos
781.1Schristos      git send-email master
791.1Schristos
801.4Schristos    For an archived example of such an email, see
811.4Schristos    <https://mm.icann.org/pipermail/tz/2018-February/026122.html>.
821.4Schristos
831.1Schristos  * Start anew by getting current with the master branch again
841.1Schristos    (the second step above).
851.1Schristos
861.1SchristosPlease do not create issues or pull requests on GitHub, as the
871.1Schristosproper procedure for proposing and distributing patches is via
881.1Schristosemail as illustrated above.
89