Fix link
[worg.git] / org-contribute.org
blob269c867e9c0802087d5d27479566df6f8f8e9db3
1 #+TITLE:      How to contribute to Org?
2 #+AUTHOR:     Worg people
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)
8 #+LANGUAGE:   en
9 #+PRIORITIES: A C B
10 #+CATEGORY:   worg
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
33   list.
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
48     it with people.
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
58     GNU Emacs.
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
85 contributors?]]
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.
91 #+begin_example
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.
96 #+end_example
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
108 into Emacs.
110 * For Org developers
111   :PROPERTIES:
112   :CUSTOM_ID: devs
113   :END:
115 1. Send your public key to [[mailto:bzgATgnuDOTorg][Bastien]]
117 2. Wait for confirmation that your public key has been added to the
118    server.
120 3. Clone =org-mode.git= repository like this:
121    : ~$ git clone orgmode@orgmode.org:org-mode.git
123 4. Commit your changes.
125 5. Run =make test=
127 6. If the tests pass, push your changes.
129 If you are undertaking big changes, please create a dedicated branch for
130 them.
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.
150 ** Sending commits
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:
158 #+begin_quote
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
173   list.
174 #+end_quote
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:
185 #+begin_quote
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,
193   origin/master):
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.
199 #+end_quote
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
223    public repository.
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 ...]
233    e.g.
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.
241 5. Often do
243    : git remote update
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
250    your work.
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
263   :PROPERTIES:
264   :ID:       c526dfd7-2b0c-4b66-9deb-6e442e48708c
265   :END:
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
283   : message.
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
299   single quote).
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:
309 #+begin_example
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.
323   TINYCHANGE
324 #+end_example
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
340 copyright issues.
342 ** Current contributors
343   :PROPERTIES:
344   :CUSTOM_ID: contributors_with_fsf_papers
345   :END:
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
349 within GNU Emacs:
351 1. Aaron Ecay
352 2. Abdó Roig-Maranges
353 3. Achim Gratz
354 4. Adam Elliott
355 5. Adam Spiers
356 6. Alan Schmitt
357 7. Andreas Burtzlaff
358 8. Andreas Leha
359 9. Andrew Hyatt
360 10. Andrzej Lichnerowicz
361 11. Andy Steward
362 12. Anthony John Day
363 13. Anthony Lander
364 14. Arni Magnusson
365 15. Baoqiu Cui
366 16. Barry Leonard Gidden
367 17. Bastien Guerry
368 18. Benjamin Andresen
369 19. Bernd Grobauer
370 20. Bernt Hansen
371 21. Brian James Gough
372 22. Carsten Dominik
373 23. Charles Berry
374 24. Charles Sebold
375 25. Christian Egli
376 26. Christian Moe
377 27. Christopher League
378 28. Christopher Miles Gray
379 29. Christopher Schmidt
380 30. Christopher Suckling
381 31. Dan Davison
382 32. Daniel M German
383 33. Daniel M. Hackney
384 34. David Arroyo Menéndez
385 35. David Maus
386 36. David O'Toole
387 37. Dieter Schoen
388 38. Dima Kogan
389 39. Dmitry Antipov
390 40. Eric Abrahamsen
391 41. Eric S. Fraga
392 42. Eric Schulte
393 43. Erik Iverson
394 44. Ethan Ligon
395 45. Feng Shu
396 46. Francesco Pizzolante
397 47. Gary Oberbrunner
398 48. Georg Lehner
399 49. George Kettleborough
400 50. Giovanni Ridolfi
401 51. Grégoire Jadi (aka Daimrod)
402 52. Gustav Wikström
403 53. Henning Dietmar Weiss
404 54. Ian Barton
405 55. Ian Kelling
406 56. Ilya Shlyakhter
407 57. Ippei Furuhashi
408 58. James TD Smith
409 59. Jan Böcker
410 60. Jarmo Hurri
411 61. Jason Riedy
412 62. Jay Kerns
413 63. Jeffrey Ryan Horn
414 64. Joe Corneli
415 65. Joel Boehland
416 66. John Kitchin
417 67. John Wiegley
418 68. Jon Snader
419 69. Jonas Bernoulli
420 70. Jonathan Leech-Pepin
421 71. Juan Pechiar
422 72. Julian Gehring
423 73. Julien Barnier
424 74. Julien Danjou
425 75. Justin Gordon
426 76. Justus Piater
427 77. Karl Fogel
428 78. Kodi Arfer
429 79. Konstantin Antipin
430 80. Kyle Meyer
431 81. Lawrence Mitchell
432 82. Le Wang
433 83. Lennart Borgman
434 84. Leonard Avery Randall
435 85. Luis Anaya
436 86. Lukasz Stelmach
437 87. Madan Ramakrishnan
438 88. Magnus Henoch
439 89. Manuel Giraud
440 90. Marco Wahl
441 91. Martin Pohlack
442 92. Martyn Jago
443 93. Matt Lundin
444 94. Max Mikhanosha
445 95. Michael Albinus
446 96. Michael Brand
447 97. Michael Gauland
448 98. Michael Sperber
449 99. Miguel A. Figueroa-Villanueva
450 100. Mikael Fornius
451 101. Moritz Ulrich
452 102. Nathan Neff
453 103. Nicholas Dokos
454 104. Nicolas Berthier
455 105. Nicolas Goaziou
456 106. Nicolas Richard
457 107. Niels Giessen
458 108. Noorul Islam K M
459 109. Oleh Krehel
460 110. Paul Sexton
461 111. Pedro Alexandre Marcelino Costa da Silva
462 112. Peter Jones
463 113. Phil Jackson
464 114. Philip Rooke
465 115. Pieter Praet
466 116. Piotr Zielinski
467 117. Puneeth Chaganti
468 118. Rainer M Krug
469 119. Rasmus Pank Roulund
470 120. Richard Klinda
471 121. Richard Riley
472 122. Rick Frankel
473 123. Russel Adams
474 124. Ryo Takaishi
475 125. Rüdiger Sonderfeld
476 126. Sacha Chua
477 127. Samuel Loury
478 128. Sebastian Rose
479 129. Sebastien Vauban
480 130. Sergey Litvinov
481 131. Seweryn Kokot
482 132. Stephen Eglen
483 133. Steven Rémot
484 134. Suvayu Ali
485 135. T.F. Torrey
486 136. Tassilo Horn
487 137. Thierry Banel
488 138. Thomas Baumann
489 139. Thomas Holst
490 140. Thomas S. Dye
491 141. Thorsten Jolitz
492 142. Tim Burt
493 143. Titus von der Malsburg
494 144. Toby Cubitt
495 145. Tokuya Kameshima
496 146. Tom Breton
497 147. Tomas Hlavaty
498 148. Tony Day
499 149. Trevor Murphy
500 150. Ulf Stegemann
501 151. Vitalie Spinu
502 152. Yann Hodique
503 153. Yasushi Shoji
504 154. Yoshinari Nomura
505 155. Yuri D. Lensky
506 156. Zhang Weize
507 157. Zhuo Qingliang (Killy Draw)
509 ** Processing
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.
514 - Bill Wishon
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)
519 ** Tiny Changes
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]].
526 1. Andrew Burgess
527 2. Andy Lutomirski
528 3. Aurélien Aptel
529 4. Brice Waegenire
530 5. Craig Tanis
531 6. Derek Feichtinger
532 7. Florian Beck
533 8. Frederico Beffa
534 9. Greg Tucker-Kellogg
535 10. Gregor Zattler
536 11. Ivan Vilata i Balaguer
537 12. Jacob Gerlach
538 13. Jacob Matthews
539 14. Joe Hirn
540 15. John Foerch
541 16. Jon Miller
542 17. Jonas Hörsch
543 18. Joost Diepenmaat
544 19. Kodi Arfer
545 20. Leslie Harlley Watter
546 21. Luke Amdor
547 22. Mario Frasca
548 23. Matthew Gidden
549 24. Michael Weylandt
550 25. Mike McLean
551 26. Miro Bezjak
552 27. Moritz Kiefer
553 28. Muchenxuan Tong
554 29. Myles English
555 30. Nathaniel Flath
556 31. Peter Moresi
557 32. Rafael Laboissiere
558 33. Richard Lawrence
559 34. Richard Y. Kim (Kim)
560 35. Robert P. Goldman
561 36. Roberto Huelga
562 37. Sami Airaksinen
563 38. Saulius Menkevičius
564 39. Sylvain Chouleur
565 40. Teika Kazura
566 41. Thierry Pellé
567 42. Vicente Vera Parra
568 43. Viktor Rosenfeld
569 44. Vladimir Lomov
570 45. York Zhao
571 46. Zane D. Purvis
573 (This list may be incomplete - please help completing it.)
575 ** No FSF assignment
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"
585 #+END: