Rephrase the link to MobileOrg for Android
[Worg.git] / org-contribute.org
blob53860968842a979251248e631217fbb8572999e2
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
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 where
20 your contribution will be useful:
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]]"
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.
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.
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.
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]].
52 * Copyright issues when contributing to Emacs org-mode
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.
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?]]
73 * For Org developers
74 :PROPERTIES:
75 :CUSTOM_ID: devs
76 :END:
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.
84 If you are undertaking big changes, please create a dedicated branch for
85 them.
87 * For Org contributors: preferred way of submitting patches
89 ** Coding conventions
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.
94 ** Sending patch with git
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.
101 ** Patches get caught on patchwork
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.
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.
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.
121 ** Sending quick fixes
123 #+begin_quote
124   This command will make a patch between the staging area (in your
125   computer), and the file you modified:
127   : git diff -p org-whatever.el > org-whatever.el.diff
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):
133   : git diff -p origin/master org-whatever.el > org-whatever.el.diff
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
139 ** Sending commits
141 For more significant changes, you might want to work in several steps and
142 send each commit separately.  Here is the suggested workflow
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
149   ... make some changes (1) ...
151 :   ~$ git commit -m "This is change (1)"  # Commit your change
153   ... make another change (2) ...
155 :   ~$ git commit -m "This is change (2)"  # Commit your change
156 :   ~$ git format-patch master             # Creates two patches
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
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.
166 ** Sharing changes from a public branch
168 For more significant contributions, the best way to submit patches is
169 through public branches of your repository clone.
171 1. Clone our git repository at =http://orgmode.org/w/org-mode.git=
173 2. Create a repository that can be publicly accessed, for example on
174    /GitHub/, /repo.or.cz/, or on your own server.
176 3. Push your topic branches (and optionally the master branch) to your
177    public repository.
179    Define a remote for your public repository you push topics to.
181    : git remote add REMOTE URL-GOES-HERE
183    Push branches to the remote
185    : git push REMOTE BRANCH1 [BRANCH2 BRANCH3 ...]
187    e.g.
189    : git remote add github ssh://.../     # Done once to define the remote 'github'
190    : git push github my-topic
192 4. Do your work on topic-specific branches, using a branch name that
193    relates to what you are working on.
195 5. Often do
197    : git remote update
199    to pull commits from all defined remote repositories, in particular
200    the org-mode master at /repo.or.cz/.
202 6. When you have something workable, publish the git path and branch
203    name on the mailing list, so that people can test it and review
204    your work.
206 7. After your topic has been merged to the project master branch you
207    can delete the topic on your local and remote repositories.
209    : git branch -d NEWTOPIC
210    : git push REMOTE :NEWTOPIC
212 * Commit messages and ChangeLog entries
214 We have decided to no longer keep a ChangeLog file to record changes to
215 individual functions.  In a modern version control system like git,
216 ChangeLog is duplicating information that should be in the commit message,
217 and it is the main cause of merge conflicts.
219 Instead, the change log entry should be part of the commit message.  A
220 commit message should be constructed in the following way:
222 - Line 1 of the commit message should always be a short description of
223   the overall change.  Line 1 does /not/ get a dot at the end.
224 - Line 2 is an empty line
225 - In line 3, the ChangeLog entry should start, in a similar format as
226   in the old ChangeLog files, but without the author information
227   (which is part of the commit anyway).
228 - After the changelog, another empty line should come before any
229   additional information that the committer wishes to provide in order
230   to explain the patch.
231 - If the change is a minor change made by a committer without
232   copyright assignment to the FSF, the commit message should also
233   contain the cookie =TINYCHANGE= (anywhere in the message).  When we
234   later produce the ChangeLog file for Emacs, the change will be
235   marked appropriately.
237 Here is an example for such a message
239 #+begin_example
240   Capture: Fix the case of using a template file
241       
242   ,* lisp/org-capture.el (org-capture-set-plist): Make sure txt is a string
243   before calling `string-match'.
244   (org-capture-templates): Fix customization type.
245   ,* doc/org.texi (Capture): Document using a file for a template
246       
247   The problem here was that a wrong keyword was given in the
248   customization type.  This let to a string-match against a list value.
249   
250   Modified from a patch proposal by Johan Friis.
251   
252   TINYCHANGE
253 #+end_example
255 If you are using /magit.el/ in Emacs, The ChangeLog-like such entries are
256 easily made by pressing =C= in the diff listing.  Another option to make
257 the entries is to use `C-x 4 a' in the changed function.  This will create
258 entries in the ChangeLog file, and you can then cut and paste these to the
259 commit message and remove the indentation.
261 * Copyrighted contributors to Org-mode
263 Here is the list of people who have contributed actual code to the
264 Org-mode core.  Note that the manual contains a more extensive list
265 with acknowledgments, including contributed ideas!  The lists below
266 are mostly for house keeping, to help the maintainers keep track of
267 copyright issues.
269 ** Current contributors
270   :PROPERTIES:
271   :CUSTOM_ID: contributors_with_fsf_papers
272   :END:
274 Here is the list of people who signed the papers with the Free Software
275 Foundation and can now freely submit code to Org files that are included
276 within GNU Emacs:
278 1. Adam Elliott
279 2. Andreas Burtzlaff
280 3. Andreas Leha
281 4. Andy Steward
282 5. Anthony Lander
283 6. Baoqiu Cui
284 7. Barry Leonard Gidden
285 8. Bastien Guerry
286 9. Benjamin Andresen
287 10. Bernd Grobauer
288 11. Bernt Hansen
289 12. Brian James Gough
290 13. Carsten Dominik
291 14. Charles Sebold
292 15. Christian Egli
293 16. Christian Moe
294 17. Christopher League
295 18. Christopher Miles Gray
296 19. Christopher Suckling
297 20. Dan Davison
298 21. Daniel M German
299 22. Daniel M. Hackney
300 23. David Maus
301 24. David O'Toole
302 25. Eric S. Fraga
303 26. Eric Schulte
304 27. Erik Iverson
305 28. Giovanni Ridolfi
306 29. Ian Barton
307 30. James TD Smith
308 31. Jan Böker
309 32. Jason Riedy
310 33. Jeffrey Ryan Horn
311 34. Joel Boehland
312 35. John Wiegley
313 36. Juan Pechiar
314 37. Julian Gehring
315 38. Julien Barnier
316 39. Julien Danjou
317 40. Konstantin Antipin
318 41. Lawrence Mitchell
319 42. Lennart Borgman
320 43. Lukasz Stelmach
321 44. Magnus Henoch
322 45. Manuel Giraud
323 46. Martin Pohlack
324 47. Martyn Jago
325 48. Matt Lundin
326 49. Michael Brand
327 50. Michael Gauland
328 51. Michael Sperber
329 52. Miguel A. Figueroa-Villanueva
330 53. Mikael Fornius
331 54. Nathan Neff
332 55. Nicolas Goaziou
333 56. Niels Giessen
334 57. Noorul Islam K M
335 58. Paul Sexton
336 59. Peter Jones
337 60. Pieter Praet
338 61. Phil Jackson
339 62. Philip Rooke
340 63. Piotr Zielinski
341 64. Puneeth Chaganti
342 65. Richard Klinda
343 66. Richard Riley
344 67. Ross Patterson
345 68. Russel Adams
346 69. Sacha Chua
347 70. Sebastian Rose
348 71. Sebastien Vauban
349 72. Sergey Litvinov
350 73. Seweryn Kokot
351 74. Stephen Eglen
352 75. Thomas Holst
353 76. Thorsten Jolitz
354 77. Tassilo Horn
355 78. Thomas Baumann
356 79. Thomas S. Dye
357 80. Tokuya Kameshima
358 81. Tom Breton
359 82. Tomas Hlavaty
360 83. Ulf Stegemann
361 84. Zhang Weize
363 ** Processing
365 These people have been asked to sign the papers, and they are
366 currently considering it or a request is being processed by the FSF.
368 1. Chris Gray
370 ** Tiny Changes
372 These people have submitted tiny change patches that made it into Org
373 without FSF papers.  When they submit more, we need to get papers
374 eventually.  The limit is a cumulative change of 20 non-repetitive
375 change lines.  Details are given in [[http://www.gnu.org/prep/maintain/maintain.html#Legally-Significant ][this document]].
377 1. Robert P. Goldman
378 2. Andy Lutomirski
379 3. Ethan Ligon
381 (this list may be incomplete - please help to complete it)
383 ** No FSF assignment
385 These people cannot or prefer to not sign the FSF copyright papers,
386 and we can only accept patches that do not change the core files (the
387 ones that are also in Emacs).
389 Luckily, this list is still empty.
391 #+BEGIN: timestamp :string "Last update: " :format "%Y-%m-%d @ %H:%M"
393 #+END: