org-contribute.org: Add Grégoire Jadi (aka Daimrod) to the list of FSF-signed contrib...
[worg.git] / org-contribute.org
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 -:t f:t *:t TeX:t LaTeX:t skip:nil 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
11
12 # This file is the default header for new Org files in Worg.  Feel free
13 # to tailor it to your needs.
14
15 [[file:index.org][{Back to Worg's index}]]
16
17 * Types of contributions
18
19 Every contribution to Org is very welcome.  Here is a list of areas where
20 your contribution will be useful:
21
22 - you can submit *bug reports* -- Before sending a bug report, make sure
23   you have read this section of Org's manual: [[http://orgmode.org/org.html#Feedback][Feedback]] You can also read
24   this great text: "[[http://www.chiark.greenend.org.uk/~sgtatham/bugs.html][How to Send Bug Reports Effectively]]"
25
26 - you can submit *feature requests* -- Org is already mature, but new ideas
27   keep popping up.  If you want to request a feature, it might be a good
28   idea to have a look at the current [[http://orgmode.org/worg/org-issues.html][Issue tracking file]] which captures
29   both bug reports and feature requests.  Or dig into the mailing list for
30   possible previous discussions about your idea.  If you cannot find back
31   your idea, formulate it as detailed as possible, if possible with
32   examples, and send it to the mailing list.
33
34 - you can submit *patches* -- You can submit patches to the mailing list.
35   See the [[For Org contributors: preferred way of submitting patches][Preferred way of submitting patches]] section for details.
36
37   If your patch is against a file that is part of Emacs, then your total
38   contribution (all patches you submit) should change /less than 15 lines/
39   (See the [[http://bzr.savannah.gnu.org/lh/emacs/trunk/annotate/head:/etc/CONTRIBUTE][etc/CONTRIBUTE file in GNU Emacs]].)  If you contribute more, you
40   have to assign the copyright of your contribution to the Free Software
41   Foundation (see below).
42   
43 - you can submit Org *add-ons* -- there are many Org add-ons.  The best way
44   is to submit your code to the mailing list to discuss it with people.  If
45   it is useful, you might consider contributing it to the =CONTRIB/=
46   directory in the git repository.
47
48 - you can submit material to the *Worg* website -- This website is made of
49   Org files that you can contribute to.  Learn what Worg is [[file:worg-about.org][about]] and how
50   to contribute to it [[file:worg-git.org][through git]].
51
52 * Copyright issues when contributing to Emacs org-mode
53
54 Org is made of many files.  Most of them are also distributed as part of
55 GNU Emacs.  These files are called the /Org core/, and they are all
56 copyrighted by the [[http://www.fsf.org][Free Software Foundation, Inc]].  If you consider
57 contributing to these files, your first need to grant the right to include
58 your works in GNU Emacs to the FSF.  For this you need to complete [[http://orgmode.org/request-assign-future.txt][this
59 form]], send it to [[mailto:assign@gnu.org][assign@gnu.org]], and tell the Org-mode maintainer when this
60 process is complete.  Some people consider this a hassle.  I don't want to
61 discuss this in detail here - there are some good reasons for getting the
62 copyright registered, an example is discussed in this [[http://twit.tv/floss117][FLOSS weekly podcast]].
63 Furthermore, by playing according to the Emacs rules, we gain the fantastic
64 advantage that every version of Emacs ships with Org-mode already fully
65 built in.  So please consider doing this - it makes our work as maintainers
66 so much easier, because we can then take your patches without any
67 additional work.
68
69 If you want to learn more about /why/ copyright assignments are
70 collected, read this: [[http://www.gnu.org/licenses/why-assign.html][Why the FSF gets copyright assignments from
71 contributors?]]
72
73 * For Org developers
74 :PROPERTIES:
75 :CUSTOM_ID: devs
76 :END:
77
78 1. Send your public key to [[mailto:jasondunsmore%20AT%20gmail%20DOT%20com][Jason Dunsmore]].
79 2. Wait for confirmation that your public key has been added to the server.
80 3. Clone =org-mode.git= repository like this:
81    : ~$ git clone orgmode@orgmode.org:org-mode.git
82 4. Commit your changes and push them.
83
84 If you are undertaking big changes, please create a dedicated branch for
85 them.
86
87 * For Org contributors: preferred way of submitting patches
88
89 ** Coding conventions
90
91 Org is part of Emacs, so any contribution should follow the [[http://www.gnu.org/software/emacs/elisp/html_node/Coding-Conventions.html][GNU Emacs Lisp
92 coding conventions]] described in Emacs manual.
93
94 ** Sending patch with git
95
96 Org-mode is developed using /git/ as the version control system.  Git
97 provides an amazing framework to collaborate on a project.  Git can be used
98 to make patches and send them via email -- this is perfectly fine for major
99 and minor changes.
100
101 When sending a patch (either using =git diff= or =git format-patch=) please
102 *always add a properly formatted Emacs ChangeLog entry*.  See [[id:c526dfd7-2b0c-4b66-9deb-6e442e48708c][this section]]
103 for details on how to create such a ChangeLog.
104
105 ** Patches get caught on patchwork
106
107 As long as these patches are formatted properly, they will be automatically
108 registered at [[http://patchwork.newartisans.com/project/org-mode][John Wiegley's patchwork server]] and will then be accepted,
109 rejected, or sent back to the author with a request for modification.
110
111 Patchwork assumes there is *only one patch per email* and will not catch
112 more than one patch -- so please send multiple patches in separate emails.
113
114 In this context, "formatted properly" means that the patches are included
115 either plainly in the mail text, or as text attachments (mime-type text,
116 subtypes "x-patch", "x-diff", or "plain").  In particular, binary types or,
117 even worse, "application/octet-stream" (the asinine default of some mail
118 programs) are *not* going to be recognized.  Please find out how to
119 convince your mail program to send proper attachments.  Also, if you
120 include the patch inline, please make sure that your mail program does not
121 reformat it (although there are plenty of places further down the line
122 where that can happen, unfortunately). If you attach the patch, then
123 reformatting is not a problem.
124
125 ** Sending commits
126
127 For every patch you send, we suggest to use =git format-patch=.
128
129 This is easy for small patches and more consequent ones.  Sometimes, you
130 might even want to work in several steps and send each commit separately.
131 Here is the suggested workflow:
132
133 #+begin_quote
134 :   ~$ git pull                 # make sure your repo is up to date
135 :   ~$ git branch my-changes    # create a new branch from master
136 :   ~$ git checkout my-changes  # switch to this new branch
137
138   ... make some changes (1) ...
139
140 :   ~$ git commit -m "This is change (1)"  # Commit your change
141
142   ... make another change (2) ...
143
144 :   ~$ git commit -m "This is change (2)"  # Commit your change
145 :   ~$ git format-patch master             # Creates two patches
146
147   ... Then two patches for your two commits are ready to be sent to the
148   list and detected by the patchwork server.
149 #+end_quote
150
151 Write useful commit messages: please provide 1) a reason for it in your
152 email and 2) a ChangeLog entry in the commit message (see [[id:c526dfd7-2b0c-4b66-9deb-6e442e48708c][this section]] on
153 how to format a ChangeLog entry.)
154
155 ** Sending quick fixes for testing purpose
156
157 If you want to send a quick fix that needs to be further tested by other
158 people (before you submit a real patch), here is how you can do:
159
160 #+begin_quote
161   This command will make a patch between the staging area (in your
162   computer), and the file you modified:
163
164   : git diff -p org-whatever.el > org-whatever.el.diff
165
166   If you already committed your changes to your index (staging area), then
167   you should compare against a particular branch (in this example,
168   origin/master):
169
170   : git diff -p origin/master org-whatever.el > org-whatever.el.diff
171
172   You email the output to the mailing list, adding =[PATCH]= to the
173   subject, and description of what you fixed or changed.
174 #+end_quote
175
176 Note that small patches sent like this still need to have a ChangeLog entry
177 to be applied.  If your patch looks good to you, it's always better to send
178 a patch through =git format-patch=.
179
180 ** Sharing changes from a public branch
181
182 For more significant contributions, the best way to submit patches is
183 through public branches of your repository clone.
184
185 1. Clone our git repository at =http://orgmode.org/w/org-mode.git=.
186    You can clone using any of the commands below.
187
188    : git clone git://orgmode.org/org-mode.git
189    : git clone http://orgmode.org/org-mode.git
190
191    The url using the git protocol is preferred. If you are behind a
192    firewall that blocks ~git://~, you can use the http url.
193
194 2. Create a repository that can be publicly accessed, for example on
195    /GitHub/, /repo.or.cz/, or on your own server.
196
197 3. Push your topic branches (and optionally the master branch) to your
198    public repository.
199
200    Define a remote for your public repository you push topics to.
201
202    : git remote add REMOTE URL-GOES-HERE
203
204    Push branches to the remote
205
206    : git push REMOTE BRANCH1 [BRANCH2 BRANCH3 ...]
207
208    e.g.
209
210    : git remote add github ssh://.../     # Done once to define the remote 'github'
211    : git push github my-topic
212
213 4. Do your work on topic-specific branches, using a branch name that
214    relates to what you are working on.
215
216 5. Often do
217
218    : git remote update
219
220    to pull commits from all defined remote repositories, in particular
221    the org-mode master at /repo.or.cz/.
222
223 6. When you have something workable, publish the git path and branch
224    name on the mailing list, so that people can test it and review
225    your work.
226
227 7. After your topic has been merged to the project master branch you
228    can delete the topic on your local and remote repositories.
229
230    : git branch -d NEWTOPIC
231    : git push REMOTE :NEWTOPIC
232
233 * Commit messages and ChangeLog entries
234   :PROPERTIES:
235   :ID:       c526dfd7-2b0c-4b66-9deb-6e442e48708c
236   :END:
237
238 We have decided to no longer keep a ChangeLog file to record changes to
239 individual functions.  In a modern version control system like git,
240 ChangeLog is duplicating information that should be in the commit message,
241 and it is the main cause of merge conflicts.
242
243 Instead, the change log entry should be part of the commit message.  A
244 commit message should be constructed in the following way:
245
246 - Line 1 of the commit message should always be a short description of
247   the overall change.  Line 1 does /not/ get a dot at the end.
248 - Line 2 is an empty line
249 - In line 3, the ChangeLog entry should start, in a similar format as
250   in the old ChangeLog files, but without the author information
251   (which is part of the commit anyway).
252 - After the changelog, another empty line should come before any
253   additional information that the committer wishes to provide in order
254   to explain the patch.
255 - If the change is a minor change made by a committer without
256   copyright assignment to the FSF, the commit message should also
257   contain the cookie =TINYCHANGE= (anywhere in the message).  When we
258   later produce the ChangeLog file for Emacs, the change will be
259   marked appropriately.
260
261 Here is an example for such a message
262
263 #+begin_example
264   Capture: Fix the case of using a template file
265       
266   ,* lisp/org-capture.el (org-capture-set-plist): Make sure txt is a string
267   before calling `string-match'.
268   (org-capture-templates): Fix customization type.
269   ,* doc/org.texi (Capture): Document using a file for a template
270       
271   The problem here was that a wrong keyword was given in the
272   customization type.  This let to a string-match against a list value.
273   
274   Modified from a patch proposal by Johan Friis.
275   
276   TINYCHANGE
277 #+end_example
278
279 If you are using /magit.el/ in Emacs, The ChangeLog-like such entries are
280 easily made by pressing =C= in the diff listing.  Another option to make
281 the entries is to use `C-x 4 a' in the changed function.  This will create
282 entries in the ChangeLog file, and you can then cut and paste these to the
283 commit message and remove the indentation.
284
285 * Copyrighted contributors to Org-mode
286
287 Here is the list of people who have contributed actual code to the
288 Org-mode core.  Note that the manual contains a more extensive list
289 with acknowledgments, including contributed ideas!  The lists below
290 are mostly for house keeping, to help the maintainers keep track of
291 copyright issues.
292
293 ** Current contributors
294   :PROPERTIES:
295   :CUSTOM_ID: contributors_with_fsf_papers
296   :END:
297
298 Here is the list of people who signed the papers with the Free Software
299 Foundation and can now freely submit code to Org files that are included
300 within GNU Emacs:
301
302 1. Abdó Roig-Maranges
303 2. Achim Gratz
304 3. Adam Elliott
305 4. Adam Spiers
306 5. Alan Schmitt
307 6. Andreas Burtzlaff
308 7. Andreas Leha
309 8. Andrew Hyatt
310 9. Andrzej Lichnerowicz
311 10. Andy Steward
312 11. Anthony John Day
313 12. Anthony Lander
314 13. Baoqiu Cui
315 14. Barry Leonard Gidden
316 15. Bastien Guerry
317 16. Benjamin Andresen
318 17. Bernd Grobauer
319 18. Bernt Hansen
320 19. Brian James Gough
321 20. Carsten Dominik
322 21. Charles Sebold
323 22. Christian Egli
324 23. Christian Moe
325 24. Christopher League
326 25. Christopher Miles Gray
327 26. Christopher Schmidt
328 27. Christopher Suckling
329 28. Dan Davison
330 29. Daniel M German
331 30. Daniel M. Hackney
332 31. David Maus
333 32. David O'Toole
334 33. Dmitry Antipov
335 34. Eric S. Fraga
336 35. Eric Schulte
337 36. Erik Iverson
338 37. Ethan Ligon
339 38. Feng Shu
340 39. Gary Oberbrunner
341 40. George Kettleborough
342 41. Giovanni Ridolfi
343 42. Grégoire Jadi (aka Daimrod)
344 43. Henning Dietmar Weiss
345 44. Ian Barton
346 45. Ilya Shlyakhter
347 46. Ippei Furuhashi
348 47. James TD Smith
349 48. Jan Böcker
350 49. Jarmo Hurri
351 50. Jason Riedy
352 51. Jeffrey Ryan Horn
353 52. Joel Boehland
354 53. John Wiegley
355 54. Jonas Bernoulli
356 55. Jonathan Leech-Pepin
357 56. Juan Pechiar
358 57. Julian Gehring
359 58. Julien Barnier
360 59. Julien Danjou
361 60. Justus Piater
362 61. Konstantin Antipin
363 62. Lawrence Mitchell
364 63. Le Wang
365 64. Lennart Borgman
366 65. Luis Anaya
367 66. Lukasz Stelmach
368 67. Madan Ramakrishnan
369 68. Magnus Henoch
370 69. Manuel Giraud
371 70. Martin Pohlack
372 71. Martyn Jago
373 72. Matt Lundin
374 73. Max Mikhanosha
375 74. Michael Brand
376 75. Michael Gauland
377 76. Michael Sperber
378 77. Miguel A. Figueroa-Villanueva
379 78. Mikael Fornius
380 79. Moritz Ulrich
381 80. Nathan Neff
382 81. Nicolas Goaziou
383 82. Nicolas Richard
384 83. Niels Giessen
385 84. Noorul Islam K M
386 85. Paul Sexton
387 86. Peter Jones
388 87. Phil Jackson
389 88. Philip Rooke
390 89. Pieter Praet
391 90. Piotr Zielinski
392 91. Puneeth Chaganti
393 92. Richard Klinda
394 93. Richard Riley
395 94. Rick Frankel
396 95. Ross Patterson
397 96. Russel Adams
398 97. Sacha Chua
399 98. Sebastian Rose
400 99. Sebastien Vauban
401 100. Sergey Litvinov
402 101. Seweryn Kokot
403 102. Stephen Eglen
404 103. Tassilo Horn
405 104. Thomas Baumann
406 105. Thomas Holst
407 106. Thomas S. Dye
408 107. Thorsten Jolitz
409 108. Toby Cubitt
410 109. Tokuya Kameshima
411 110. Tom Breton
412 111. Tomas Hlavaty
413 112. Tony Day
414 113. Ulf Stegemann
415 114. Yann Hodique
416 115. Zhang Weize
417
418 ** Processing
419
420 These people have been asked to sign the papers, and they are
421 currently considering it or a request is being processed by the FSF.
422
423 - Bill Wishon
424 - Samuel Loury (as of 2013-01-14)
425 - Ryo TAKAISHI (as of 2013-01-01)
426 - Francesco Pizzolante (as of 2013-01-31)
427
428 ** Tiny Changes
429
430 These people have submitted tiny change patches that made it into Org
431 without FSF papers.  When they submit more, we need to get papers
432 eventually.  The limit is a cumulative change of 20 non-repetitive
433 change lines.  Details are given in [[http://www.gnu.org/prep/maintain/maintain.html#Legally-Significant ][this document]].
434
435 1. Alan Schmitt
436 2. Andy Lutomirski
437 3. Ivan Vilata i Balaguer
438 4. John Foerch
439 5. Myles English
440 6. Rafael Laboissiere
441 7. Robert P. Goldman
442 8. Ryo Takaishi
443 9. Muchenxuan Tong
444
445 (this list may be incomplete - please help to complete it)
446
447 ** No FSF assignment
448
449 These people cannot or prefer to not sign the FSF copyright papers,
450 and we can only accept patches that do not change the core files (the
451 ones that are also in Emacs).
452
453 Luckily, this list is still empty.
454
455 #+BEGIN: timestamp :string "Last update: " :format "%Y-%m-%d @ %H:%M"
456
457 #+END: