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