1309577SglebiusContributing to the tz code and data
2309577Sglebius
3309577SglebiusThe time zone database is by no means authoritative: governments
4309577Sglebiuschange timekeeping rules erratically and sometimes with little
5309577Sglebiuswarning, the data entries do not cover all of civil time before
6309577Sglebius1970, and undoubtedly errors remain in the code and data.  Feel
7309577Sglebiusfree to fill gaps or fix mistakes, and please email improvements
8325322Sgordonto tz@iana.org for use in the future.  In your email, please give
9325322Sgordonreliable sources that reviewers can check.
10309577Sglebius
11325322Sgordon-----
12325322Sgordon
13325322SgordonDevelopers can contribute technical changes to the source code and
14325322Sgordondata as follows.
15325322Sgordon
16309577SglebiusTo email small changes, please run a POSIX shell command like
17309577Sglebius'diff -u old/europe new/europe >myfix.patch', and attach
18309577Sglebiusmyfix.patch to the email.
19309577Sglebius
20325322SgordonFor more-elaborate changes, please read the theory.html file and browse
21325322Sgordonthe mailing list archives <https://mm.icann.org/pipermail/tz/> for
22325322Sgordonexamples of patches that tend to work well.  Additions to
23309577Sglebiusdata should contain commentary citing reliable sources as
24325322Sgordonjustification.  Citations should use https: URLs if available.
25309577Sglebius
26309577SglebiusPlease submit changes against either the latest release in
27325322Sgordon<https://www.iana.org/time-zones> or the master branch of the development
28331986Sgordonrepository.  The latter is preferred.  If you use Git the following
29331986Sgordonworkflow may be helpful:
30309577Sglebius
31325322Sgordon  * Copy the development repository.
32309577Sglebius
33309577Sglebius      git clone https://github.com/eggert/tz.git
34309577Sglebius      cd tz
35309577Sglebius
36309577Sglebius  * Get current with the master branch.
37309577Sglebius
38309577Sglebius      git checkout master
39309577Sglebius      git pull
40309577Sglebius
41309577Sglebius  * Switch to a new branch for the changes.  Choose a different
42309577Sglebius    branch name for each change set.
43309577Sglebius
44309577Sglebius      git checkout -b mybranch
45309577Sglebius
46331986Sgordon  * Sleuth by using 'git blame'.  For example, when fixing data for
47331986Sgordon    Africa/Sao_Tome, if the command 'git blame africa' outputs a line
48331986Sgordon    '2951fa3b (Paul Eggert 2018-01-08 09:03:13 -0800 1068) Zone
49331986Sgordon    Africa/Sao_Tome 0:26:56 - LMT 1884', commit 2951fa3b should
50331986Sgordon    provide some justification for the 'Zone Africa/Sao_Tome' line.
51331986Sgordon
52309577Sglebius  * Edit source files.  Include commentary that justifies the
53309577Sglebius    changes by citing reliable sources.
54309577Sglebius
55309577Sglebius  * Debug the changes, e.g.:
56309577Sglebius
57309577Sglebius      make check
58309577Sglebius      make install
59309577Sglebius      ./zdump -v America/Los_Angeles
60309577Sglebius
61309577Sglebius  * For each separable change, commit it in the new branch, e.g.:
62309577Sglebius
63309577Sglebius      git add northamerica
64309577Sglebius      git commit
65309577Sglebius
66309577Sglebius    See recent 'git log' output for the commit-message style.
67309577Sglebius
68309577Sglebius  * Create patch files 0001-*, 0002-*, ...
69309577Sglebius
70309577Sglebius      git format-patch master
71309577Sglebius
72309577Sglebius  * After reviewing the patch files, send the patches to tz@iana.org
73309577Sglebius    for others to review.
74309577Sglebius
75309577Sglebius      git send-email master
76309577Sglebius
77331986Sgordon    For an archived example of such an email, see
78331986Sgordon    <https://mm.icann.org/pipermail/tz/2018-February/026122.html>.
79331986Sgordon
80309577Sglebius  * Start anew by getting current with the master branch again
81309577Sglebius    (the second step above).
82309577Sglebius
83309577SglebiusPlease do not create issues or pull requests on GitHub, as the
84309577Sglebiusproper procedure for proposing and distributing patches is via
85309577Sglebiusemail as illustrated above.
86309577Sglebius
87309577Sglebius-----
88309577Sglebius
89309577SglebiusThis file is in the public domain.
90