1 #+TITLE: How to contribute to Org?
3 #+EMAIL: mdl AT imapmail DOT org
4 #+OPTIONS: H:3 num:nil toc:t \n:nil ::t |:t ^:t -:t f:t *:t tex:t d:(HIDE) tags:not-in-toc
5 #+STARTUP: align fold nodlcheck hidestars oddeven lognotestate
6 #+SEQ_TODO: TODO(t) INPROGRESS(i) WAITING(w@) | DONE(d) CANCELED(c@)
7 #+TAGS: Write(w) Update(u) Fix(f) Check(c)
12 # This file is the default header for new Org files in Worg. Feel free
13 # to tailor it to your needs.
15 [[file:index.org][{Back to Worg's index}]]
17 * Types of contributions
19 Every contribution to Org is very welcome. Here is a list of areas
20 where your contribution will be useful:
22 - you can submit *bug reports* -- Before sending a bug report, make
23 sure you have read this section of Org's manual: [[http://orgmode.org/org.html#Feedback][Feedback]] You can
24 also read this great text: "[[http://www.chiark.greenend.org.uk/~sgtatham/bugs.html][How to Send Bug Reports Effectively]]"
26 - you can submit *feature requests* -- Org is already mature, but new
27 ideas keep popping up. If you want to request a feature, it might
28 be a good idea to have a look at the current [[http://orgmode.org/worg/org-issues.html][Issue tracking file]]
29 which captures both bug reports and feature requests. Or dig into
30 the mailing list for possible previous discussions about your idea.
31 If you cannot find back your idea, formulate it as detailed as
32 possible, if possible with examples, and send it to the mailing
35 - you can submit *patches* -- You can submit patches to the mailing
36 list. See the [[For Org contributors: preferred way of submitting patches][Preferred way of submitting patches]] section for
37 details. You can run =make test= to check that your patch does
38 not introduce new bugs.
40 If your patch is against a file that is part of Emacs, then your
41 total contribution (all patches you submit) should change /less than
42 15 lines/ (See the [[http://bzr.savannah.gnu.org/lh/emacs/trunk/annotate/head:/etc/CONTRIBUTE][etc/CONTRIBUTE file in GNU Emacs]].) If you
43 contribute more, you have to assign the copyright of your
44 contribution to the Free Software Foundation (see below).
46 - you can submit Org *add-ons* -- there are many Org add-ons.
47 - The best way is to submit your code to [[file:org-mailing-list.org][the mailing list]] to discuss
49 - If it is useful, you might consider contributing it to the
50 =lisp/contrib/= directory in the git repository. It will be
51 reviewed, and if it passes, it will be included. Ask help from
52 [[file:org-people.org][Eric Schulte]] for this step. The =lisp/contrib/= directory is
53 somehow relaxed: it is not distributed with Emacs, and does not
54 require a formal copyright assignment.
55 - If you decide to sign the [[*Copyright issues when contributing to
56 Emacs Org mode][assignment contract with the FSF]], we
57 might include your contribution in the distribution, and then in
60 - you can submit material to the *Worg* website -- This website is
61 made of Org files that you can contribute to. Learn what Worg is
62 [[file:worg-about.org][about]] and how to contribute to it [[file:worg-git.org][through git]].
64 * Copyright issues when contributing to Emacs Org mode
66 Org is made of many files. Most of them are also distributed as part
67 of GNU Emacs. These files are called the /Org core/, and they are all
68 copyrighted by the [[http://www.fsf.org][Free Software Foundation, Inc]]. If you consider
69 contributing to these files, your first need to grant the right to
70 include your works in GNU Emacs to the FSF. For this you need to
71 complete [[http://orgmode.org/request-assign-future.txt][this form]], and send it to [[mailto:assign@gnu.org][assign@gnu.org]]. The FSF will send
72 you the assignment contract that both you and the FSF will sign.
73 Please let the Org-mode maintainer know when this process is complete.
74 Some people consider this assignment process a hassle. I don't want
75 to discuss this in detail here - there are some good reasons for
76 getting the copyright registered, an example is discussed in this
77 [[http://twit.tv/floss117][FLOSS weekly podcast]]. Furthermore, by playing according to the Emacs
78 rules, we gain the fantastic advantage that every version of Emacs
79 ships with Org-mode already fully built in. So please consider doing
80 this - it makes our work as maintainers so much easier, because we can
81 then take your patches without any additional work.
83 If you want to learn more about /why/ copyright assignments are
84 collected, read this: [[http://www.gnu.org/licenses/why-assign.html][Why the FSF gets copyright assignments from
87 By submitting patches to emacs-orgmode@gnu.org, or by pushing changes
88 to the Org-mode repository, you are placing these changes under the
89 same licensing terms as those under which GNU Emacs is published.
92 ;; GNU Emacs is free software: you can redistribute it and/or modify
93 ;; it under the terms of the GNU General Public License as published by
94 ;; the Free Software Foundation, either version 3 of the License, or
95 ;; (at your option) any later version.
98 If at the time you submit or push these changes you do have active
99 copyright assignment papers with the FSF, for future changes to either
100 Org-mode or to Emacs, this means that copyright to these changes is
101 automatically transferred to the FSF. The Org-mode repository is seen
102 as upstream repository for Emacs, anything contained in it can
103 potentially end up in Emacs. If you do not have signed papers with
104 the FSF, only changes to files in the =contrib/= part of the
105 repository will be accepted, as well as very minor changes (so-called
106 /tiny changes/) to core files. We will ask you to sign FSF papers at
107 the moment we attempt to move a =contrib/= file into the Org core, or
115 1. Send your public key to [[mailto:bzgATgnuDOTorg][Bastien]]
117 2. Wait for confirmation that your public key has been added to the
120 3. Clone =org-mode.git= repository like this:
121 : ~$ git clone orgmode@orgmode.org:org-mode.git
123 4. Commit your changes.
127 6. If the tests pass, push your changes.
129 If you are undertaking big changes, please create a dedicated branch for
132 * For Org contributors: preferred way of submitting patches
134 ** Coding conventions
136 Org is part of Emacs, so any contribution should follow the [[http://www.gnu.org/software/emacs/manual/html_node/elisp/Coding-Conventions.html][GNU Emacs
137 Lisp coding conventions]] described in Emacs manual.
139 ** Sending patch with git
141 Org-mode is developed using /git/ as the version control system. Git
142 provides an amazing framework to collaborate on a project. Git can be
143 used to make patches and send them via email -- this is perfectly fine
144 for major and minor changes.
146 When sending a patch (either using =git diff= or =git format-patch=)
147 please *always add a properly formatted Emacs ChangeLog entry*. See
148 [[id:c526dfd7-2b0c-4b66-9deb-6e442e48708c][this section]] for details on how to create such a ChangeLog.
152 For every patch you send, we suggest to use =git format-patch=.
154 This is easy for small patches and more consequent ones. Sometimes,
155 you might even want to work in several steps and send each commit
156 separately. Here is the suggested workflow:
159 : ~$ git pull # make sure your repo is up to date
160 : ~$ git branch my-changes # create a new branch from master
161 : ~$ git checkout my-changes # switch to this new branch
163 ... make some changes (1) ...
165 : ~$ git commit -a -m "This is change (1)" # Commit your change
167 ... make another change (2) ...
169 : ~$ git commit -a -m "This is change (2)" # Commit your change
170 : ~$ git format-patch master # Creates two patches
172 ... Then two patches for your two commits are ready to be sent to the
176 Write useful commit messages: please provide 1) a reason for it in
177 your email and 2) a ChangeLog entry in the commit message (see [[id:c526dfd7-2b0c-4b66-9deb-6e442e48708c][this
178 section]] on how to format a ChangeLog entry.)
180 ** Sending quick fixes for testing purpose
182 If you want to send a quick fix that needs to be further tested by
183 other people (before you submit a real patch), here is how you can do:
186 This command will make a patch between the staging area (in your
187 computer), and the file you modified:
189 : git diff -p org-whatever.el > org-whatever.el.diff
191 If you already committed your changes to your index (staging area), then
192 you should compare against a particular branch (in this example,
195 : git diff -p origin/master org-whatever.el > org-whatever.el.diff
197 You email the output to the mailing list, adding =[PATCH]= to the
198 subject, and description of what you fixed or changed.
201 Note that small patches sent like this still need to have a ChangeLog
202 entry to be applied. If your patch looks good to you, it's always
203 better to send a patch through =git format-patch=.
205 ** Sharing changes from a public branch
207 For more significant contributions, the best way to submit patches is
208 through public branches of your repository clone.
210 1. Clone our git repository at =http://orgmode.org/w/org-mode.git=.
211 You can clone using any of the commands below.
213 : git clone git://orgmode.org/org-mode.git
214 : git clone http://orgmode.org/org-mode.git
216 The url using the git protocol is preferred. If you are behind a
217 firewall that blocks ~git://~, you can use the http url.
219 2. Create a repository that can be publicly accessed, for example on
220 /GitHub/, /repo.or.cz/, or on your own server.
222 3. Push your topic branches (and optionally the master branch) to your
225 Define a remote for your public repository you push topics to.
227 : git remote add REMOTE URL-GOES-HERE
229 Push branches to the remote
231 : git push REMOTE BRANCH1 [BRANCH2 BRANCH3 ...]
235 : git remote add github ssh://.../ # Done once to define the remote 'github'
236 : git push github my-topic
238 4. Do your work on topic-specific branches, using a branch name that
239 relates to what you are working on.
245 to pull commits from all defined remote repositories, in particular
246 the org-mode master at /repo.or.cz/.
248 6. When you have something workable, publish the git path and branch
249 name on the mailing list, so that people can test it and review
252 7. After your topic has been merged to the project master branch you
253 can delete the topic on your local and remote repositories.
255 : git branch -d NEWTOPIC
256 : git push REMOTE :NEWTOPIC
258 The instructions above are generally useful to let people test new
259 features before sending the patch series to the mailing list, but the
260 patches remain the preferred way of receiving contributions.
262 * Commit messages and ChangeLog entries
264 :ID: c526dfd7-2b0c-4b66-9deb-6e442e48708c
267 We have decided to no longer keep a ChangeLog file to record changes
268 to individual functions.
270 A commit message should be constructed in the following way:
272 - Line 1 of the commit message should always be a short description of
273 the overall change. Line 1 does /not/ get a dot at the end and does
274 not start with a star. Generally, it starts with the filename that
275 has been changed, followed by a colon.
277 - Line 2 is an empty line.
279 - In line 3, the ChangeLog entry should start. A ChangeLog entry
280 looks like [[http://orgmode.org/cgit.cgi/org-mode.git/commit/?id%3Dd49957ef021e256f19092c907d127390d39ec1ed][this]]:
282 : * org-timer.el (org-timer-cancel-timer, org-timer-stop): Enhance
284 : (org-timer-set-timer): Use the number of minutes in the Effort
285 : property as the default timer value. Three prefix arguments will
286 : ignore the Effort value property.
288 - After the changelog, another empty line should come before any
289 additional information that the committer wishes to provide in order
290 to explain the patch.
292 - If the change is a minor change made by a committer without
293 copyright assignment to the FSF, the commit message should also
294 contain the cookie =TINYCHANGE= (anywhere in the message). When we
295 later produce the ChangeLog file for Emacs, the change will be
296 marked appropriately.
298 - Variables and functions names are quoted like `this' (backquote and
301 - Sentences should be separated by two spaces.
303 - Sentences should start with an uppercase letter.
305 - Avoid the passive form: i.e., use "change" instead of "changed".
307 Here is an example for such a message:
310 org-capture.el: Fix the case of using a template file
312 ,* lisp/org-capture.el (org-capture-set-plist): Make sure txt is a
313 string before calling `string-match'.
314 (org-capture-templates): Fix customization type.
316 ,* doc/org.texi (Capture): Document using a file for a template.
318 The problem here was that a wrong keyword was given in the
319 customization type. This let to a string-match against a list value.
321 Modified from a patch proposal by Johan Friis.
326 If you are using /magit.el/ in Emacs, the ChangeLog for such entries
327 are easily produced by pressing =C= in the diff listing.
329 Another option to produce the entries is to use `C-x 4 a' in the
330 changed function or in the diff listing. This will create entries in
331 the ChangeLog file, and you can then cut and paste these to the commit
332 message and remove the indentation.
334 * Copyrighted contributors to Org-mode
336 Here is the list of people who have contributed actual code to the
337 Org-mode core. Note that the manual contains a more extensive list
338 with acknowledgments, including contributed ideas! The lists below
339 are mostly for house keeping, to help the maintainers keep track of
342 ** Current contributors
344 :CUSTOM_ID: contributors_with_fsf_papers
347 Here is the list of people who signed the papers with the Free Software
348 Foundation and can now freely submit code to Org files that are included
352 2. Abdó Roig-Maranges
360 10. Andrzej Lichnerowicz
366 16. Barry Leonard Gidden
368 18. Benjamin Andresen
371 21. Brian James Gough
377 27. Christopher League
378 28. Christopher Miles Gray
379 29. Christopher Schmidt
380 30. Christopher Suckling
383 33. Daniel M. Hackney
384 34. David Arroyo Menéndez
396 46. Francesco Pizzolante
399 49. George Kettleborough
401 51. Grégoire Jadi (aka Daimrod)
403 53. Henning Dietmar Weiss
413 63. Jeffrey Ryan Horn
420 70. Jonathan Leech-Pepin
429 79. Konstantin Antipin
431 81. Lawrence Mitchell
434 84. Leonard Avery Randall
437 87. Madan Ramakrishnan
449 99. Miguel A. Figueroa-Villanueva
454 104. Nicolas Berthier
458 108. Noorul Islam K M
461 111. Pedro Alexandre Marcelino Costa da Silva
467 117. Puneeth Chaganti
469 119. Rasmus Pank Roulund
475 125. Rüdiger Sonderfeld
479 129. Sebastien Vauban
493 143. Titus von der Malsburg
495 145. Tokuya Kameshima
504 154. Yoshinari Nomura
507 157. Zhuo Qingliang (Killy Draw)
511 These people have been asked to sign the papers, and they are
512 currently considering it or a request is being processed by the FSF.
515 - Mats Kindahl (as of 2013-04-06) for [[http://mid.gmane.org/513BAB7D.1000603@oracle.com][this patch]]
516 - Georg Lehner (as of 2013-06-27)
517 - Kodi Arfer (as of 2013-06-29)
521 These people have submitted tiny change patches that made it into Org
522 without FSF papers. When they submit more, we need to get papers
523 eventually. The limit is a cumulative change of 20 non-repetitive
524 change lines. Details are given in [[http://www.gnu.org/prep/maintain/maintain.html#Legally-Significant ][this document]].
534 9. Greg Tucker-Kellogg
536 11. Ivan Vilata i Balaguer
545 20. Leslie Harlley Watter
557 32. Rafael Laboissiere
559 34. Richard Y. Kim (Kim)
560 35. Robert P. Goldman
563 38. Saulius Menkevičius
567 42. Vicente Vera Parra
573 (This list may be incomplete - please help completing it.)
577 These people cannot or prefer to not sign the FSF copyright papers,
578 and we can only accept patches that do not change the core files (the
579 ones that are also in Emacs).
581 Luckily, this list is still empty.
583 #+BEGIN: timestamp :string "Last update: " :format "%Y-%m-%d @ %H:%M"