Add a FAQ: "Can I import iCal events/appts from Gnus?"
[Worg.git] / org-contribute.org
blobf6056cc755d153794372920d8a6db4578e8e26b2
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]]
25 - you can submit *feature requests* -- Org is already mature, but new ideas
26   keep popping up.  If you want to request a feature, it might be a good
27   idea to have a look at the current [[http://orgmode.org/worg/org-issues.html][Issue tracking file]] which captures
28   both bug reports and feature requests.  Or dig into the mailing list for
29   possible previous discussions about your idea.  If you cannot find back
30   your idea, formulate it as detailed as possible, if possible with
31   examples, and send it to the mailing list.
33 - you can submit *patches* -- You can submit patches to the mailing list.
34   See the [[Preferred way of submitting patches]] section for details.
36   If your patch is against a file that is part of Emacs, then your
37   total contribution (all patches you submit) should change /less than
38   20 lines/.  If you contribute more, you have to assign the copyright
39   of your contribution to the Free Software Foundation (see below).
40   
41 - you can submit Org *add-ons* -- there are many Org add-ons.  The best way
42   is to submit your code to the mailing list to discuss it with people.  If
43   it is useful, you might consider contributing it to the =CONTRIB/=
44   directory in the git repository.
46 - you can submit material to the *Worg* website -- This website is made of
47   Org files that you can contribute to.  Learn what Worg is [[file:worg-about.org][about]] and how
48   to contribute to it [[file:worg-git.org][through git]].
50 * Copyright issues when contributing to Emacs org-mode
52 Org is made of many files.  Most of them are also distributed as part of
53 GNU Emacs.  These files are called the /Org core/, and they are all
54 copyrighted by the [[http://www.fsf.org][Free Software Foundation, Inc]].  If you consider
55 contributing to these files, your first need to grant the right to include
56 your works in GNU Emacs to the FSF.  For this you need to complete [[http://orgmode.org/request-assign-future.txt][this
57 form]], send it to [[mailto:assign@gnu.org][assign@gnu.org]], and tell the Org-mode maintainer when this
58 process is complete.  Some people consider this a hassle.  I don't want to
59 discuss this in detail here - there are some good reasons for getting the
60 copyright registered, an example is discussed in this [[http://twit.tv/floss117][FLOSS weekly podcast]].
61 Furthermore, by playing according to the Emacs rules, we gain the fantastic
62 advantage that every version of Emacs ships with Org-mode already fully
63 built in.  So please consider doing this - it makes our work as maintainers
64 so much easier, because we can then take your patches without any
65 additional work.
67 If you want to learn more about /why/ copyright assignments are
68 collected, read this: [[http://www.gnu.org/licenses/why-assign.html][Why the FSF gets copyright assignments from
69 contributors?]]
71 * Preferred way of submitting patches
73 Org-mode is developed using /git/ as the version control system.  Git
74 provides an amazing framework to collaborate on a project.  Git can be used
75 to make patches and send them via email -- this is perfectly fine for minor
76 changes.
78 These patches will be automatically registered at [[http://patchwork.newartisans.com/project/org-mode][John Wiegley's patchwork
79 server]] and will then be accepted, rejected, or sent back to the author with
80 a request for modification.
82 ** Sending quick fixes
84 #+begin_quote
85   This command will make a patch between the staging area (in your
86   computer), and the file you modified:
88   : git diff -p org-whatever.el > org-whatever.el.diff
90   If you already committed your changes to your index (staging area), then
91   you should compare against a particular branch (in this example,
92   origin/master):
94   : git diff -p origin/master org-whatever.el > org-whatever.el.diff
96   You email the output to the mailing list, adding =[PATCH]= to the
97   subject, and description of what you fixed or changed.
98 #+end_quote
100 ** Sending commits
102 For more significant changes, you might want to work in several steps and
103 send each commit separately.  Here is the suggested workflow
105 #+begin_quote
106 :   ~$ git pull                 # make sure your repo is up to date
107 :   ~$ git branch my-changes    # create a new branch
108 :   ~$ git checkout my-changes  # switch to this new branch
110   ... make some changes (1) ...
112 :   ~$ git commit -m "This is change (1)"  # Commit your change
114   ... make another change (2) ...
116 :   ~$ git commit -m "This is change (2)"  # Commit your change
117 :   ~$ git format-patch master             # Creates two patches
119   ... Then two patches for your two commits are ready to be sent to the
120   list and detected by the patchwork server.
121 #+end_quote
123 Write useful commit messages: unless your change is very small, please
124 provide 1) a reason for it in your email and 2) a ChangeLog entry in the
125 commit message.
127 ** Sharing changes from a public branch
129 For more significant contributions, the best way to submit patches is
130 through public branches of your repository clone.
132 1. Clone our git repository at =http://orgmode.org/w/org-mode.git=
134 2. Create a repository that can be publicly accessed, for example on
135    /GitHub/, /repo.or.cz/, or on your own server.
137 3. Push your topic branches (and optionally the master branch) to your
138    public repository.
140    Define a remote for your public repository you push topics to.
142    : git remote add REMOTE URL-GOES-HERE
144    Push branches to the remote
146    : git push REMOTE BRANCH1 [BRANCH2 BRANCH3 ...]
148    e.g.
150    : git remote add github ssh://.../     # Done once to define the remote 'github'
151    : git push github my-topic
153 4. Do your work on topic-specific branches, using a branch name that
154    relates to what you are working on.
156 5. Often do
158    : git remote update
160    to pull commits from all defined remote repositories, in particular
161    the org-mode master at /repo.or.cz/.
163 6. When you have something workable, publish the git path and branch
164    name on the mailing list, so that people can test it and review
165    your work.
167 7. After your topic has been merged to the project master branch you
168    can delete the topic on your local and remote repositories.
170    : git branch -d NEWTOPIC
171    : git push REMOTE :NEWTOPIC
173 * Commit messages and ChangeLog entries
175 We have decided to no longer keep a ChangeLog file to record changes to
176 individual functions.  In a modern version control system like git,
177 ChangeLog is duplicating information that should be in the commit message,
178 and it is the main cause of merge conflicts.
180 Instead, the change log entry should be part of the commit message.  A
181 commit message should be constructed in the following way:
183 - Line 1 of the commit message should always be a short description of
184   the overall change.  Line 1 does /not/ get a dot at the end.
185 - Line 2 is an empty line
186 - In line 3, the ChangeLog entry should start, in a similar format as
187   in the old ChangeLog files, but without the author information
188   (which is part of the commit anyway).
189 - After the changelog, another empty line should come before any
190   additional information that the committer wishes to provide in order
191   to explain the patch.
192 - If the change is a minor change made by a committer without
193   copyright assignment to the FSF, the commit message should also
194   contain the cookie =TINYCHANGE= (anywhere in the message).  When we
195   later produce the ChangeLog file for Emacs, the change will be
196   marked appropriately.
198 Here is an example for such a message
200 #+begin_example
201   Capture: Fix the case of using a template file
202       
203   ,* lisp/org-capture.el (org-capture-set-plist): Make sure txt is a string
204   before calling `string-match'.
205   (org-capture-templates): Fix customization type.
206   ,* doc/org.texi (Capture): Document using a file for a template
207       
208   The problem here was that a wrong keyword was given in the
209   customization type.  This let to a string-match against a list value.
210   
211   Modified from a patch proposal by Johan Friis.
212   
213   TINYCHANGE
214 #+end_example
216 If you are using /magit.el/ in Emacs, The ChangeLog-like such entries are
217 easily made by pressing =C= in the diff listing.  Another option to make
218 the entries is to use `C-x 4 a' in the changed function.  This will create
219 entries in the ChangeLog file, and you can then cut and paste these to the
220 commit message and remove the indentation.
222 * Copyrighted contributors to Org-mode
224 Here is the list of people who have contributed actual code to the
225 Org-mode core.  Note that the manual contains a more extensive list
226 with acknowledgments, including contributed ideas!  The lists below
227 are mostly for house keeping, to help the maintainers keep track of
228 copyright issues.
230 ** Current contributors
231   :PROPERTIES:
232   :CUSTOM_ID: contributors_with_fsf_papers
233   :END:
235 Here is the list of people who signed the papers with the Free Software
236 Foundation and can now freely submit code to Org files that are included
237 within GNU Emacs:
239 1. Adam Elliott
240 2. Andreas Burtzlaff
241 3. Andy Steward
242 4. Anthony Lander
243 5. Baoqiu Cui
244 6. Bastien Guerry
245 7. Benjamin Andresen
246 8. Bernd Grobauer
247 9. Bernt Hansen
248 10. Brian James Gough
249 11. Carsten Dominik
250 12. Charles Sebold
251 13. Christian Egli
252 14. Christopher League
253 15. Christopher Miles Gray
254 16. Christopher Suckling
255 17. Dan Davison
256 18. Daniel M German
257 19. Daniel M. Hackney
258 20. David Maus
259 21. David O'Toole
260 22. Eric S. Fraga
261 23. Eric Schulte
262 24. Erik Iverson
263 25. Ian Barton
264 26. James TD Smith
265 27. Jan Böker
266 28. Jason Riedy
267 29. Joel Boehland
268 30. John Wiegley
269 31. Juan Pechiar
270 32. Julien Barnier
271 33. Julien Danjou
272 34. Konstantin Antipin
273 35. Lennart Borgman
274 36. Lukasz Stelmach
275 37. Magnus Henoch
276 38. Manuel Giraud
277 39. Martin Pohlack
278 40. Matt Lundin
279 41. Michael Gauland
280 42. Michael Sperber
281 43. Miguel A. Figueroa-Villanueva
282 44. Mikael Fornius
283 45. Nathan Neff
284 46. Nicolas Goaziou
285 47. Noorul Islam K M
286 48. Paul Sexton
287 49. Peter Jones
288 50. Phil Jackson
289 51. Philip Rooke
290 52. Piotr Zielinski
291 53. Puneeth Chaganti
292 54. Richard Klinda
293 55. Richard Riley
294 56. Ross Patterson
295 57. Russel Adams
296 58. Sacha Chua
297 59. Sebastian Rose
298 60. Sebastien Vauban
299 61. Seweryn Kokot
300 62. Stephen Eglen
301 63. Tassilo Horn
302 64. Thomas Baumann
303 65. Tokuya Kameshima
304 66. Tom Breton
305 67. Tomas Hlavaty
306 68. Ulf Stegemann
307 69. Zhang Weize
309 ** Processing
311 These people have been asked to sign the papers, and they are
312 currently considering it or a request is being processed by the FSF.
314 1. Chris Gray
316 ** Tiny Changes
318 These people have submitted tiny change patches that made it into Org
319 without FSF papers.  When they submit more, we need to get papers
320 eventually.  The limit is a cumulative change of 20 non-repetitive
321 change lines.  Details are given in [[http://www.gnu.org/prep/maintain/maintain.html#Legally-Significant ][this document]].
323 1. Robert P. Goldman
324 2. Andy Lutomirski
326 (this list may be incomplete - please help to complete it)
328 ** No FSF assignment
330 These people cannot or prefer to not sign the FSF copyright papers,
331 and we can only accept patches that do not change the core files (the
332 ones that are also in Emacs).
334 Luckily, this list is still empty.
336 #+BEGIN: timestamp :string "Last update: " :format "%Y-%m-%d @ %H:%M"
338 #+END: