CONTRIBUTING revision 331663
1235368SgnnContributing to the tz code and data
2235368Sgnn
3235368SgnnThe time zone database is by no means authoritative: governments
4235368Sgnnchange timekeeping rules erratically and sometimes with little
5235368Sgnnwarning, the data entries do not cover all of civil time before
6235368Sgnn1970, and undoubtedly errors remain in the code and data.  Feel
7235368Sgnnfree to fill gaps or fix mistakes, and please email improvements
8235368Sgnnto tz@iana.org for use in the future.  In your email, please give
9235368Sgnnreliable sources that reviewers can check.
10235368Sgnn
11235368Sgnn-----
12235368Sgnn
13235368SgnnDevelopers can contribute technical changes to the source code and
14235368Sgnndata as follows.
15235368Sgnn
16235368SgnnTo email small changes, please run a POSIX shell command like
17235368Sgnn'diff -u old/europe new/europe >myfix.patch', and attach
18235368Sgnnmyfix.patch to the email.
19235368Sgnn
20235368SgnnFor more-elaborate changes, please read the theory.html file and browse
21235368Sgnnthe mailing list archives <https://mm.icann.org/pipermail/tz/> for
22235368Sgnnexamples of patches that tend to work well.  Additions to
23235368Sgnndata should contain commentary citing reliable sources as
24235368Sgnnjustification.  Citations should use https: URLs if available.
25235368Sgnn
26235368SgnnPlease submit changes against either the latest release in
27235368Sgnn<https://www.iana.org/time-zones> or the master branch of the development
28235368Sgnnrepository.  The latter is preferred.  If you use Git the following
29235368Sgnnworkflow may be helpful:
30235368Sgnn
31235368Sgnn  * Copy the development repository.
32235368Sgnn
33235368Sgnn      git clone https://github.com/eggert/tz.git
34235368Sgnn      cd tz
35235368Sgnn
36235368Sgnn  * Get current with the master branch.
37235368Sgnn
38235368Sgnn      git checkout master
39235368Sgnn      git pull
40235368Sgnn
41235368Sgnn  * Switch to a new branch for the changes.  Choose a different
42235368Sgnn    branch name for each change set.
43235368Sgnn
44235368Sgnn      git checkout -b mybranch
45235368Sgnn
46235368Sgnn  * Sleuth by using 'git blame'.  For example, when fixing data for
47235368Sgnn    Africa/Sao_Tome, if the command 'git blame africa' outputs a line
48235368Sgnn    '2951fa3b (Paul Eggert 2018-01-08 09:03:13 -0800 1068) Zone
49235368Sgnn    Africa/Sao_Tome 0:26:56 - LMT 1884', commit 2951fa3b should
50235368Sgnn    provide some justification for the 'Zone Africa/Sao_Tome' line.
51235368Sgnn
52235368Sgnn  * Edit source files.  Include commentary that justifies the
53235368Sgnn    changes by citing reliable sources.
54235368Sgnn
55235368Sgnn  * Debug the changes, e.g.:
56235368Sgnn
57235368Sgnn      make check
58235368Sgnn      make install
59235368Sgnn      ./zdump -v America/Los_Angeles
60235368Sgnn
61235368Sgnn  * For each separable change, commit it in the new branch, e.g.:
62235368Sgnn
63235368Sgnn      git add northamerica
64235368Sgnn      git commit
65235368Sgnn
66235368Sgnn    See recent 'git log' output for the commit-message style.
67235368Sgnn
68235368Sgnn  * Create patch files 0001-*, 0002-*, ...
69235368Sgnn
70235368Sgnn      git format-patch master
71235368Sgnn
72235368Sgnn  * After reviewing the patch files, send the patches to tz@iana.org
73235368Sgnn    for others to review.
74235368Sgnn
75235368Sgnn      git send-email master
76235368Sgnn
77235368Sgnn    For an archived example of such an email, see
78235368Sgnn    <https://mm.icann.org/pipermail/tz/2018-February/026122.html>.
79235368Sgnn
80235368Sgnn  * Start anew by getting current with the master branch again
81235368Sgnn    (the second step above).
82235368Sgnn
83235368SgnnPlease do not create issues or pull requests on GitHub, as the
84235368Sgnnproper procedure for proposing and distributing patches is via
85235368Sgnnemail as illustrated above.
86235368Sgnn
87235368Sgnn-----
88235368Sgnn
89235368SgnnThis file is in the public domain.
90