1308265SgjbContributing to the tz code and data
2308265Sgjb
3308265SgjbThe time zone database is by no means authoritative: governments
4308265Sgjbchange timekeeping rules erratically and sometimes with little
5308265Sgjbwarning, the data entries do not cover all of civil time before
6308265Sgjb1970, and undoubtedly errors remain in the code and data.  Feel
7308265Sgjbfree to fill gaps or fix mistakes, and please email improvements
8325160Sphilipto tz@iana.org for use in the future.  In your email, please give
9325160Sphilipreliable sources that reviewers can check.
10308265Sgjb
11325160Sphilip-----
12325160Sphilip
13325160SphilipDevelopers can contribute technical changes to the source code and
14325160Sphilipdata as follows.
15325160Sphilip
16308265SgjbTo email small changes, please run a POSIX shell command like
17308265Sgjb'diff -u old/europe new/europe >myfix.patch', and attach
18308265Sgjbmyfix.patch to the email.
19308265Sgjb
20339631SphilipFor more-elaborate or possibly-controversial changes,
21339631Sphilipsuch as renaming, adding or removing zones, please read
22339631Sphilip<https://www.iana.org/time-zones/repository/theory.html> or the file
23339631Sphiliptheory.html.  It is also good to browse the mailing list archives
24339631Sphilip<https://mm.icann.org/pipermail/tz/> for examples of patches that tend
25339631Sphilipto work well.  Additions to data should contain commentary citing
26339631Sphilipreliable sources as justification.  Citations should use https: URLs
27339631Sphilipif available.
28308265Sgjb
29308265SgjbPlease submit changes against either the latest release in
30325160Sphilip<https://www.iana.org/time-zones> or the master branch of the development
31331663Sphiliprepository.  The latter is preferred.  If you use Git the following
32331663Sphilipworkflow may be helpful:
33308265Sgjb
34309793Sbapt  * Copy the development repository.
35308265Sgjb
36308265Sgjb      git clone https://github.com/eggert/tz.git
37308265Sgjb      cd tz
38308265Sgjb
39308265Sgjb  * Get current with the master branch.
40308265Sgjb
41308265Sgjb      git checkout master
42308265Sgjb      git pull
43308265Sgjb
44308265Sgjb  * Switch to a new branch for the changes.  Choose a different
45308265Sgjb    branch name for each change set.
46308265Sgjb
47308265Sgjb      git checkout -b mybranch
48308265Sgjb
49331663Sphilip  * Sleuth by using 'git blame'.  For example, when fixing data for
50331663Sphilip    Africa/Sao_Tome, if the command 'git blame africa' outputs a line
51331663Sphilip    '2951fa3b (Paul Eggert 2018-01-08 09:03:13 -0800 1068) Zone
52331663Sphilip    Africa/Sao_Tome 0:26:56 - LMT 1884', commit 2951fa3b should
53331663Sphilip    provide some justification for the 'Zone Africa/Sao_Tome' line.
54331663Sphilip
55308265Sgjb  * Edit source files.  Include commentary that justifies the
56308265Sgjb    changes by citing reliable sources.
57308265Sgjb
58308265Sgjb  * Debug the changes, e.g.:
59308265Sgjb
60308265Sgjb      make check
61308265Sgjb      make install
62308265Sgjb      ./zdump -v America/Los_Angeles
63308265Sgjb
64308265Sgjb  * For each separable change, commit it in the new branch, e.g.:
65308265Sgjb
66308265Sgjb      git add northamerica
67308265Sgjb      git commit
68308265Sgjb
69308265Sgjb    See recent 'git log' output for the commit-message style.
70308265Sgjb
71308265Sgjb  * Create patch files 0001-*, 0002-*, ...
72308265Sgjb
73308265Sgjb      git format-patch master
74308265Sgjb
75308265Sgjb  * After reviewing the patch files, send the patches to tz@iana.org
76308265Sgjb    for others to review.
77308265Sgjb
78308265Sgjb      git send-email master
79308265Sgjb
80331663Sphilip    For an archived example of such an email, see
81331663Sphilip    <https://mm.icann.org/pipermail/tz/2018-February/026122.html>.
82331663Sphilip
83308265Sgjb  * Start anew by getting current with the master branch again
84308265Sgjb    (the second step above).
85308265Sgjb
86308265SgjbPlease do not create issues or pull requests on GitHub, as the
87308265Sgjbproper procedure for proposing and distributing patches is via
88308265Sgjbemail as illustrated above.
89308265Sgjb
90308265Sgjb-----
91308265Sgjb
92308265SgjbThis file is in the public domain.
93