Merge branch 'master' of orgmode.org:worg
[worg.git] / org-contribute.org
1 #+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
2 #+STARTUP:    align fold nodlcheck hidestars oddeven lognotestate
3 #+SEQ_TODO:   TODO(t) INPROGRESS(i) WAITING(w@) | DONE(d) CANCELED(c@)
4 #+TAGS:       Write(w) Update(u) Fix(f) Check(c) 
5 #+TITLE:      How to contribute to Org?
6 #+AUTHOR:     Worg people
7 #+EMAIL:      mdl AT imapmail DOT org
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 minor
99 changes.
100
101 ** Patches get caught on patchwork
102
103 As long as these patches are formatted properly, they will be automatically
104 registered at [[http://patchwork.newartisans.com/project/org-mode][John Wiegley's patchwork server]] and will then be accepted,
105 rejected, or sent back to the author with a request for modification.
106
107 Patchwork assumes there is *only one patch per email* and will not catch
108 more than one patch -- so please send multiple patches in separate emails.
109
110 In this context, "formatted properly" means that the patches are included
111 either plainly in the mail text, or as text attachments (mime-type text,
112 subtypes "x-patch", "x-diff", or "plain").  In particular, binary types or,
113 even worse, "application/octet-stream" (the asinine default of some mail
114 programs) are *not* going to be recognized.  Please find out how to
115 convince your mail program to send proper attachments.  Also, if you
116 include the patch inline, please make sure that your mail program does not
117 reformat it (although there are plenty of places further down the line
118 where that can happen, unfortunately). If you attach the patch, then
119 reformatting is not a problem.
120
121 ** Sending quick fixes
122
123 #+begin_quote
124   This command will make a patch between the staging area (in your
125   computer), and the file you modified:
126
127   : git diff -p org-whatever.el > org-whatever.el.diff
128
129   If you already committed your changes to your index (staging area), then
130   you should compare against a particular branch (in this example,
131   origin/master):
132
133   : git diff -p origin/master org-whatever.el > org-whatever.el.diff
134
135   You email the output to the mailing list, adding =[PATCH]= to the
136   subject, and description of what you fixed or changed.
137 #+end_quote
138
139 ** Sending commits
140
141 For more significant changes, you might want to work in several steps and
142 send each commit separately.  Here is the suggested workflow
143
144 #+begin_quote
145 :   ~$ git pull                 # make sure your repo is up to date
146 :   ~$ git branch my-changes    # create a new branch
147 :   ~$ git checkout my-changes  # switch to this new branch
148
149   ... make some changes (1) ...
150
151 :   ~$ git commit -m "This is change (1)"  # Commit your change
152
153   ... make another change (2) ...
154
155 :   ~$ git commit -m "This is change (2)"  # Commit your change
156 :   ~$ git format-patch master             # Creates two patches
157
158   ... Then two patches for your two commits are ready to be sent to the
159   list and detected by the patchwork server.
160 #+end_quote
161
162 Write useful commit messages: unless your change is very small, please
163 provide 1) a reason for it in your email and 2) a ChangeLog entry in the
164 commit message.
165
166 ** Sharing changes from a public branch
167
168 For more significant contributions, the best way to submit patches is
169 through public branches of your repository clone.
170
171 1. Clone our git repository at =http://orgmode.org/w/org-mode.git=.
172    You can clone using any of the commands below.
173
174    : git clone git://orgmode.org/org-mode.git
175    : git clone http://orgmode.org/org-mode.git
176
177    The url using the git protocol is preferred. If you are behind a
178    firewall that blocks ~git://~, you can use the http url.
179
180 2. Create a repository that can be publicly accessed, for example on
181    /GitHub/, /repo.or.cz/, or on your own server.
182
183 3. Push your topic branches (and optionally the master branch) to your
184    public repository.
185
186    Define a remote for your public repository you push topics to.
187
188    : git remote add REMOTE URL-GOES-HERE
189
190    Push branches to the remote
191
192    : git push REMOTE BRANCH1 [BRANCH2 BRANCH3 ...]
193
194    e.g.
195
196    : git remote add github ssh://.../     # Done once to define the remote 'github'
197    : git push github my-topic
198
199 4. Do your work on topic-specific branches, using a branch name that
200    relates to what you are working on.
201
202 5. Often do
203
204    : git remote update
205
206    to pull commits from all defined remote repositories, in particular
207    the org-mode master at /repo.or.cz/.
208
209 6. When you have something workable, publish the git path and branch
210    name on the mailing list, so that people can test it and review
211    your work.
212
213 7. After your topic has been merged to the project master branch you
214    can delete the topic on your local and remote repositories.
215
216    : git branch -d NEWTOPIC
217    : git push REMOTE :NEWTOPIC
218
219 * Commit messages and ChangeLog entries
220
221 We have decided to no longer keep a ChangeLog file to record changes to
222 individual functions.  In a modern version control system like git,
223 ChangeLog is duplicating information that should be in the commit message,
224 and it is the main cause of merge conflicts.
225
226 Instead, the change log entry should be part of the commit message.  A
227 commit message should be constructed in the following way:
228
229 - Line 1 of the commit message should always be a short description of
230   the overall change.  Line 1 does /not/ get a dot at the end.
231 - Line 2 is an empty line
232 - In line 3, the ChangeLog entry should start, in a similar format as
233   in the old ChangeLog files, but without the author information
234   (which is part of the commit anyway).
235 - After the changelog, another empty line should come before any
236   additional information that the committer wishes to provide in order
237   to explain the patch.
238 - If the change is a minor change made by a committer without
239   copyright assignment to the FSF, the commit message should also
240   contain the cookie =TINYCHANGE= (anywhere in the message).  When we
241   later produce the ChangeLog file for Emacs, the change will be
242   marked appropriately.
243
244 Here is an example for such a message
245
246 #+begin_example
247   Capture: Fix the case of using a template file
248       
249   ,* lisp/org-capture.el (org-capture-set-plist): Make sure txt is a string
250   before calling `string-match'.
251   (org-capture-templates): Fix customization type.
252   ,* doc/org.texi (Capture): Document using a file for a template
253       
254   The problem here was that a wrong keyword was given in the
255   customization type.  This let to a string-match against a list value.
256   
257   Modified from a patch proposal by Johan Friis.
258   
259   TINYCHANGE
260 #+end_example
261
262 If you are using /magit.el/ in Emacs, The ChangeLog-like such entries are
263 easily made by pressing =C= in the diff listing.  Another option to make
264 the entries is to use `C-x 4 a' in the changed function.  This will create
265 entries in the ChangeLog file, and you can then cut and paste these to the
266 commit message and remove the indentation.
267
268 * Copyrighted contributors to Org-mode
269
270 Here is the list of people who have contributed actual code to the
271 Org-mode core.  Note that the manual contains a more extensive list
272 with acknowledgments, including contributed ideas!  The lists below
273 are mostly for house keeping, to help the maintainers keep track of
274 copyright issues.
275
276 ** Current contributors
277   :PROPERTIES:
278   :CUSTOM_ID: contributors_with_fsf_papers
279   :END:
280
281 Here is the list of people who signed the papers with the Free Software
282 Foundation and can now freely submit code to Org files that are included
283 within GNU Emacs:
284
285 1. Adam Elliott
286 2. Andreas Burtzlaff
287 3. Andreas Leha
288 4. Andrzej Lichnerowicz
289 5. Andy Steward
290 6. Anthony Lander
291 7. Baoqiu Cui
292 8. Barry Leonard Gidden
293 9. Bastien Guerry
294 10. Benjamin Andresen
295 11. Bernd Grobauer
296 12. Bernt Hansen
297 13. Brian James Gough
298 14. Carsten Dominik
299 15. Charles Sebold
300 16. Christian Egli
301 17. Christian Moe
302 18. Christopher League
303 19. Christopher Miles Gray
304 20. Christopher Suckling
305 21. Dan Davison
306 22. Daniel M German
307 23. Daniel M. Hackney
308 24. David Maus
309 25. David O'Toole
310 26. Ethan Ligon
311 27. Eric S. Fraga
312 28. Eric Schulte
313 29. Erik Iverson
314 30. Giovanni Ridolfi
315 31. Ian Barton
316 32. James TD Smith
317 33. Jan Böker
318 34. Jason Riedy
319 35. Jeffrey Ryan Horn
320 36. Joel Boehland
321 37. John Wiegley
322 38. Juan Pechiar
323 39. Julian Gehring
324 40. Julien Barnier
325 41. Julien Danjou
326 42. Konstantin Antipin
327 43. Lawrence Mitchell
328 44. Lennart Borgman
329 45. Lukasz Stelmach
330 46. Magnus Henoch
331 47. Manuel Giraud
332 48. Martin Pohlack
333 49. Martyn Jago
334 50. Matt Lundin
335 51. Max Mikhanosha
336 52. Michael Brand
337 53. Michael Gauland
338 54. Michael Sperber
339 55. Miguel A. Figueroa-Villanueva
340 56. Mikael Fornius
341 57. Nathan Neff
342 58. Nicolas Goaziou
343 59. Niels Giessen
344 60. Noorul Islam K M
345 61. Paul Sexton
346 62. Peter Jones
347 63. Pieter Praet
348 64. Phil Jackson
349 65. Philip Rooke
350 66. Piotr Zielinski
351 67. Puneeth Chaganti
352 68. Richard Klinda
353 69. Richard Riley
354 70. Ross Patterson
355 71. Russel Adams
356 72. Sacha Chua
357 73. Sebastian Rose
358 74. Sebastien Vauban
359 75. Sergey Litvinov
360 76. Seweryn Kokot
361 77. Stephen Eglen
362 78. Thomas Holst
363 79. Thorsten Jolitz
364 80. Tassilo Horn
365 81. Thomas Baumann
366 82. Thomas S. Dye
367 83. Tokuya Kameshima
368 84. Tom Breton
369 85. Tomas Hlavaty
370 86. Ulf Stegemann
371 87. Zhang Weize
372
373 ** Processing
374
375 These people have been asked to sign the papers, and they are
376 currently considering it or a request is being processed by the FSF.
377
378 1. Chris Gray
379
380 ** Tiny Changes
381
382 These people have submitted tiny change patches that made it into Org
383 without FSF papers.  When they submit more, we need to get papers
384 eventually.  The limit is a cumulative change of 20 non-repetitive
385 change lines.  Details are given in [[http://www.gnu.org/prep/maintain/maintain.html#Legally-Significant ][this document]].
386
387 1. Robert P. Goldman
388 2. Andy Lutomirski
389 3. Adam Spiers
390
391 (this list may be incomplete - please help to complete it)
392
393 ** No FSF assignment
394
395 These people cannot or prefer to not sign the FSF copyright papers,
396 and we can only accept patches that do not change the core files (the
397 ones that are also in Emacs).
398
399 Luckily, this list is still empty.
400
401 #+BEGIN: timestamp :string "Last update: " :format "%Y-%m-%d @ %H:%M"
402
403 #+END: