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?
7 #+EMAIL: mdl AT imapmail DOT org
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 [[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).
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
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
72 * Preferred way of submitting patches
74 Org-mode is developed using /git/ as the version control system. Git
75 provides an amazing framework to collaborate on a project. Git can be used
76 to make patches and send them via email -- this is perfectly fine for minor
79 These patches will be automatically registered at [[http://patchwork.newartisans.com/project/org-mode][John Wiegley's patchwork
80 server]] and will then be accepted, rejected, or sent back to the author with
81 a request for modification.
83 ** Sending quick fixes
86 This command will make a patch between the staging area (in your
87 computer), and the file you modified:
89 : git diff -p org-whatever.el > org-whatever.el.diff
91 If you already committed your changes to your index (staging area), then
92 you should compare against a particular branch (in this example,
95 : git diff -p origin/master org-whatever.el > org-whatever.el.diff
97 You email the output to the mailing list, adding =[PATCH]= to the
98 subject, and description of what you fixed or changed.
103 For more significant changes, you might want to work in several steps and
104 send each commit separately. Here is the suggested workflow
107 : ~$ git pull # make sure your repo is up to date
108 : ~$ git branch my-changes # create a new branch
109 : ~$ git checkout my-changes # switch to this new branch
111 ... make some changes (1) ...
113 : ~$ git commit -m "This is change (1)" # Commit your change
115 ... make another change (2) ...
117 : ~$ git commit -m "This is change (2)" # Commit your change
118 : ~$ git format-patch master # Creates two patches
120 ... Then two patches for your two commits are ready to be sent to the
121 list and detected by the patchwork server.
124 Write useful commit messages: unless your change is very small, please
125 provide 1) a reason for it in your email and 2) a ChangeLog entry in the
128 ** Sharing changes from a public branch
130 For more significant contributions, the best way to submit patches is
131 through public branches of your repository clone.
133 1. Clone our git repository at =http://orgmode.org/w/org-mode.git=
135 2. Create a repository that can be publicly accessed, for example on
136 /GitHub/, /repo.or.cz/, or on your own server.
138 3. Push your topic branches (and optionally the master branch) to your
141 Define a remote for your public repository you push topics to.
143 : git remote add REMOTE URL-GOES-HERE
145 Push branches to the remote
147 : git push REMOTE BRANCH1 [BRANCH2 BRANCH3 ...]
151 : git remote add github ssh://.../ # Done once to define the remote 'github'
152 : git push github my-topic
154 4. Do your work on topic-specific branches, using a branch name that
155 relates to what you are working on.
161 to pull commits from all defined remote repositories, in particular
162 the org-mode master at /repo.or.cz/.
164 6. When you have something workable, publish the git path and branch
165 name on the mailing list, so that people can test it and review
168 7. After your topic has been merged to the project master branch you
169 can delete the topic on your local and remote repositories.
171 : git branch -d NEWTOPIC
172 : git push REMOTE :NEWTOPIC
174 * Commit messages and ChangeLog entries
176 We have decided to no longer keep a ChangeLog file to record changes to
177 individual functions. In a modern version control system like git,
178 ChangeLog is duplicating information that should be in the commit message,
179 and it is the main cause of merge conflicts.
181 Instead, the change log entry should be part of the commit message. A
182 commit message should be constructed in the following way:
184 - Line 1 of the commit message should always be a short description of
185 the overall change. Line 1 does /not/ get a dot at the end.
186 - Line 2 is an empty line
187 - In line 3, the ChangeLog entry should start, in a similar format as
188 in the old ChangeLog files, but without the author information
189 (which is part of the commit anyway).
190 - After the changelog, another empty line should come before any
191 additional information that the committer wishes to provide in order
192 to explain the patch.
193 - If the change is a minor change made by a committer without
194 copyright assignment to the FSF, the commit message should also
195 contain the cookie =TINYCHANGE= (anywhere in the message). When we
196 later produce the ChangeLog file for Emacs, the change will be
197 marked appropriately.
199 Here is an example for such a message
202 Capture: Fix the case of using a template file
204 ,* lisp/org-capture.el (org-capture-set-plist): Make sure txt is a string
205 before calling `string-match'.
206 (org-capture-templates): Fix customization type.
207 ,* doc/org.texi (Capture): Document using a file for a template
209 The problem here was that a wrong keyword was given in the
210 customization type. This let to a string-match against a list value.
212 Modified from a patch proposal by Johan Friis.
217 If you are using /magit.el/ in Emacs, The ChangeLog-like such entries are
218 easily made by pressing =C= in the diff listing. Another option to make
219 the entries is to use `C-x 4 a' in the changed function. This will create
220 entries in the ChangeLog file, and you can then cut and paste these to the
221 commit message and remove the indentation.
223 * Copyrighted contributors to Org-mode
225 Here is the list of people who have contributed actual code to the
226 Org-mode core. Note that the manual contains a more extensive list
227 with acknowledgments, including contributed ideas! The lists below
228 are mostly for house keeping, to help the maintainers keep track of
231 ** Current contributors
233 :CUSTOM_ID: contributors_with_fsf_papers
236 Here is the list of people who signed the papers with the Free Software
237 Foundation and can now freely submit code to Org files that are included
245 6. Barry Leonard Gidden
250 11. Brian James Gough
254 15. Christopher League
255 16. Christopher Miles Gray
256 17. Christopher Suckling
259 20. Daniel M. Hackney
269 30. Jeffrey Ryan Horn
275 36. Konstantin Antipin
285 46. Miguel A. Figueroa-Villanueva
315 These people have been asked to sign the papers, and they are
316 currently considering it or a request is being processed by the FSF.
322 These people have submitted tiny change patches that made it into Org
323 without FSF papers. When they submit more, we need to get papers
324 eventually. The limit is a cumulative change of 20 non-repetitive
325 change lines. Details are given in [[http://www.gnu.org/prep/maintain/maintain.html#Legally-Significant ][this document]].
330 (this list may be incomplete - please help to complete it)
334 These people cannot or prefer to not sign the FSF copyright papers,
335 and we can only accept patches that do not change the core files (the
336 ones that are also in Emacs).
338 Luckily, this list is still empty.
340 #+BEGIN: timestamp :string "Last update: " :format "%Y-%m-%d @ %H:%M"