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