mirror of
git://git.sv.gnu.org/emacs.git
synced 2025-12-27 07:41:28 -08:00
338 lines
12 KiB
Text
338 lines
12 KiB
Text
Copyright (C) 2006-2014 Free Software Foundation, Inc.
|
||
See end for license conditions.
|
||
|
||
|
||
Contributing to Emacs
|
||
|
||
Emacs is a collaborative project and we encourage contributions from
|
||
anyone and everyone. If you want to contribute in the way that will
|
||
help us most, we recommend (1) fixing reported bugs and (2)
|
||
implementing the feature ideas in etc/TODO. However, if you think of
|
||
new features to add, please suggest them too -- we might like your
|
||
idea. Porting to new platforms is also useful, when there is a new
|
||
platform, but that is not common nowadays.
|
||
|
||
For documentation on Emacs (to understand how to implement your
|
||
desired change), refer to:
|
||
|
||
- the Emacs Manual
|
||
http://www.gnu.org/software/emacs/manual/emacs.html
|
||
(info "(Emacs)Top")
|
||
|
||
- the Emacs Lisp Reference Manual
|
||
http://www.gnu.org/software/emacs/manual/elisp.html
|
||
(info "(elisp)Top")
|
||
|
||
- http://www.gnu.org/software/emacs
|
||
|
||
- http://www.emacswiki.org/
|
||
|
||
There are many ways to contribute to Emacs:
|
||
|
||
- implement a new feature, and submit a patch (see "Submitting
|
||
Patches" below).
|
||
|
||
- answer questions on the Emacs user mailing list
|
||
https://lists.gnu.org/mailman/listinfo/help-gnu-emacs
|
||
|
||
- write documentation, either on the wiki, or in the Emacs source
|
||
repository (see "Submitting Patches" below)
|
||
|
||
- find and report bugs; use M-x report-emacs-bug
|
||
|
||
- check if existing bug reports are fixed in newer versions of Emacs
|
||
http://debbugs.gnu.org/cgi/pkgreport.cgi?which=pkg&data=emacs
|
||
|
||
- develop a package that works with Emacs, and publish it on your own
|
||
or in Gnu ELPA (see admin/notes/elpa).
|
||
|
||
Here are some style and legal conventions for contributors to Emacs:
|
||
|
||
|
||
* Coding Standards
|
||
|
||
Contributed code should follow the GNU Coding Standards
|
||
(http://www.gnu.org/prep/standards/ - may also be available in info on
|
||
your system).
|
||
|
||
If it doesn't, we'll need to find someone to fix the code before we
|
||
can use it.
|
||
|
||
Emacs has additional style and coding conventions:
|
||
|
||
- the "Tips" Appendix in the Emacs Lisp Reference
|
||
http://www.gnu.org/software/emacs/manual/html_node/elisp/Tips.html
|
||
(info "(elisp)Tips").
|
||
|
||
- Avoid using `defadvice' or `eval-after-load' for Lisp code to be
|
||
included in Emacs.
|
||
|
||
- Remove all trailing whitespace in all source and text files.
|
||
|
||
- Emacs has no convention on whether to use tabs in source code;
|
||
please don't change whitespace in the files you edit.
|
||
|
||
- Use ?\s instead of ? in Lisp code for a space character.
|
||
|
||
* Copyright Assignment
|
||
|
||
The FSF (Free Software Foundation) is the copyright holder for GNU Emacs.
|
||
The FSF is a nonprofit with a worldwide mission to promote computer
|
||
user freedom and to defend the rights of all free software users.
|
||
For general information, see the website http://www.fsf.org/ .
|
||
|
||
Generally speaking, for non-trivial contributions to GNU Emacs we
|
||
require that the copyright be assigned to the FSF. For the reasons
|
||
behind this, see: http://www.gnu.org/licenses/why-assign.html .
|
||
|
||
Copyright assignment is a simple process. Residents of some countries
|
||
can do it entirely electronically. We can help you get started, and
|
||
answer any questions you may have (or point you to the people with the
|
||
answers), at the emacs-devel@gnu.org mailing list.
|
||
|
||
(Please note: general discussion about why some GNU projects ask
|
||
for a copyright assignment is off-topic for emacs-devel.
|
||
See gnu-misc-discuss instead.)
|
||
|
||
A copyright disclaimer is also a possibility, but we prefer an assignment.
|
||
Note that the disclaimer, like an assignment, involves you sending
|
||
signed paperwork to the FSF (simply saying "this is in the public domain"
|
||
is not enough). Also, a disclaimer cannot be applied to future work, it
|
||
has to be repeated each time you want to send something new.
|
||
|
||
We can accept small changes (roughly, fewer than 15 lines) without
|
||
an assignment. This is a cumulative limit (e.g. three separate 5 line
|
||
patches) over all your contributions.
|
||
|
||
* Getting the Source Code
|
||
|
||
The current working version of the Emacs source code is stored in a
|
||
git repository on the Savannah web site
|
||
(http://savannah.gnu.org/projects/emacs). It is important to write
|
||
your patch based on the current working version. If you start from an
|
||
older version, your patch may be outdated (so that maintainers will
|
||
have a hard time applying it), or changes in Emacs may have made your
|
||
patch unnecessary.
|
||
|
||
After you have downloaded the repository source, you should read the file
|
||
INSTALL.REPO for build instructions (they differ to some extent from a
|
||
normal build).
|
||
|
||
* Submitting Patches
|
||
|
||
Every patch must have several pieces of information before we
|
||
can properly evaluate it.
|
||
|
||
When you have all these pieces, bundle them up in a mail message and
|
||
send it to the developers. Sending it to bug-gnu-emacs@gnu.org
|
||
(which is the bug/feature list) is recommended, because that list
|
||
is coupled to a tracking system that makes it easier to locate patches.
|
||
If your patch is not complete and you think it needs more discussion,
|
||
you might want to send it to emacs-devel@gnu.org instead. If you
|
||
revise your patch, send it as a followup to the initial topic.
|
||
|
||
** Description
|
||
|
||
For bug fixes, a description of the bug and how your patch fixes it.
|
||
|
||
For new features, a description of the feature and your implementation.
|
||
|
||
** ChangeLog
|
||
|
||
A ChangeLog entry as plaintext (separate from the patch).
|
||
|
||
See the existing ChangeLog files for format and content. Note that,
|
||
unlike some other projects, we do require ChangeLogs for
|
||
documentation, i.e. Texinfo files.
|
||
|
||
Ref: "Change Log Concepts" node of the GNU Coding Standards Info
|
||
Manual, for how to write good log entries.
|
||
http://www.gnu.org/prep/standards/html_node/Change-Log-Concepts.html
|
||
|
||
When using git, commit messages should use ChangeLog format, with a
|
||
single short line explaining the change, then an empty line, then
|
||
unindented ChangeLog entries. (Essentially, a commit message should
|
||
be a duplicate of what the patch adds to the ChangeLog files. We are
|
||
planning to automate this better, to avoid the duplication.) You can
|
||
use the Emacs functions log-edit-add-to-changelog or
|
||
log-edit-insert-changelog to ease this process.
|
||
|
||
** The patch itself.
|
||
|
||
If you are accessing the Emacs repository, make sure your copy is
|
||
up-to-date (e.g. with 'git pull'). You can commit your changes
|
||
to a private branch and generate a patch from the master version
|
||
by using
|
||
git format-patch master
|
||
Or you can leave your changes uncommitted and use
|
||
git diff
|
||
With no repository, you can use
|
||
diff -u OLD NEW
|
||
|
||
** Mail format.
|
||
|
||
We prefer to get the patches as plain text, either inline (be careful
|
||
your mail client does not change line breaks) or as MIME attachments.
|
||
|
||
** Please reread your patch before submitting it.
|
||
|
||
** Do not mix changes.
|
||
|
||
If you send several unrelated changes together, we will ask you to
|
||
separate them so we can consider each of the changes by itself.
|
||
|
||
** Do not make formatting changes.
|
||
|
||
Making cosmetic formatting changes (indentation, etc) makes it harder
|
||
to see what you have really changed.
|
||
|
||
|
||
* Supplemental information for Emacs Developers.
|
||
|
||
An "Emacs Developer" is someone who contributes a lot of code or
|
||
documentation to the Emacs repository.
|
||
|
||
** Write access to the Emacs repository.
|
||
|
||
Once you become a frequent contributor to Emacs, we can consider
|
||
giving you write access to the version-control repository. Request
|
||
access on the emacs-devel@gnu.org mailing list.
|
||
|
||
** Using the Emacs repository
|
||
|
||
Emacs uses git for the source code repository.
|
||
|
||
See http://www.emacswiki.org/emacs/GitQuickStartForEmacsDevs to get
|
||
started, and http://www.emacswiki.org/emacs/GitForEmacsDevs for more
|
||
advanced information.
|
||
|
||
Alternately, see admin/notes/git-workflow.
|
||
|
||
If committing changes written by someone else, make the ChangeLog
|
||
entry in their name, not yours. git distinguishes between the author
|
||
and the committer; use the --author option on the commit command to
|
||
specify the actual author; the committer defaults to you.
|
||
|
||
** Changelog notes
|
||
|
||
- Emacs generally follows the GNU coding standards when it comes to
|
||
ChangeLogs:
|
||
http://www.gnu.org/prep/standards/html_node/Change-Logs.html . One
|
||
exception is that we still sometimes quote `like-this' (as the
|
||
standards used to recommend) rather than 'like-this' (as they do
|
||
now), because `...' is so widely used elsewhere in Emacs.
|
||
|
||
- There are multiple ChangeLogs in the emacs source; roughly one per
|
||
high-level directory. The ChangeLog entry for a commit belongs in the
|
||
lowest ChangeLog that is higher than or at the same level as any file
|
||
changed by the commit.
|
||
|
||
- Preferred form for several entries with the same content:
|
||
|
||
* help.el (view-lossage):
|
||
* kmacro.el (kmacro-edit-lossage):
|
||
* edmacro.el (edit-kbd-macro): Fix docstring, lossage is now 300 keys.
|
||
|
||
(Rather than anything involving "ditto" and suchlike.)
|
||
|
||
- In ChangeLog files, there is no standard or recommended way to
|
||
identify revisions.
|
||
|
||
One way to identify revisions is by quoting their summary line.
|
||
Another is with an action stamp - an RFC3339 date followed by !
|
||
followed by the committer's email - for example,
|
||
"2014-01-16T05:43:35Z!esr@thyrsus.com". Often, "my previous commit"
|
||
will suffice.
|
||
|
||
- There is no need to make separate change log entries for files such
|
||
as NEWS, MAINTAINERS, and FOR-RELEASE, or to indicate regeneration
|
||
of files such as 'configure'. "There is no need" means you don't
|
||
have to, but you can if you want to.
|
||
|
||
** branches
|
||
|
||
Development normally takes places on the trunk.
|
||
Sometimes specialized features are developed on separate branches
|
||
before possibly being merged to the trunk.
|
||
|
||
Development is discussed on the emacs-devel mailing list.
|
||
|
||
Sometime before the release of a new major version of Emacs a "feature
|
||
freeze" is imposed on the trunk, to prepare for creating a release
|
||
branch. No new features may be added to the trunk after this point,
|
||
until the release branch is created. This freeze is announced on the
|
||
emacs-devel mailing list, and not anywhere else.
|
||
|
||
The trunk branch is named "master" in git; release branches are named
|
||
"emacs-nn" where "nn" is the major version.
|
||
|
||
You must follow emacs-devel to know exactly what kinds of changes are
|
||
allowed on what branch at any time. Announcements about the freeze
|
||
(and other important events) will contain "ANNOUNCE" in the subject.
|
||
|
||
If you are fixing a bug that exists in the current release, be sure to
|
||
commit it to the release branch; it will be merged to the master
|
||
branch later.
|
||
|
||
However, if you know that the change will be difficult to merge to the
|
||
trunk (eg because the trunk code has changed a lot), you can apply the
|
||
change to both trunk and branch yourself. Indicate in the release
|
||
branch commit log that there is no need to merge the commit to the
|
||
trunk; start the commit message with "Backport:". gitmerge.el will
|
||
then exclude that commit from the merge to trunk.
|
||
|
||
|
||
** Other process information
|
||
|
||
See all the files in admin/notes/* . In particular, see
|
||
admin/notes/newfile, see admin/notes/repo.
|
||
|
||
** Emacs Mailing lists.
|
||
|
||
Discussion about Emacs development takes place on emacs-devel@gnu.org.
|
||
|
||
Bug reports and fixes, feature requests and implementations should be
|
||
sent to bug-gnu-emacs@gnu.org, the bug/feature list. This is coupled
|
||
to the tracker at http://debbugs.gnu.org .
|
||
|
||
You can subscribe to the mailing lists, or see the list archives,
|
||
by following links from http://savannah.gnu.org/mail/?group=emacs .
|
||
|
||
** Document your changes.
|
||
|
||
Any change that matters to end-users should have an entry in etc/NEWS.
|
||
|
||
Think about whether your change requires updating the documentation
|
||
(both manuals and doc-strings). If you know it does not, mark the NEWS
|
||
entry with "---". If you know that *all* the necessary documentation
|
||
updates have been made, mark the entry with "+++". Otherwise do not mark it.
|
||
|
||
** Understanding Emacs Internals.
|
||
|
||
The best way to understand Emacs Internals is to read the code,
|
||
but the nodes "Tips" and "GNU Emacs Internals" in the Appendix
|
||
of the Emacs Lisp Reference Manual may also help.
|
||
|
||
The file etc/DEBUG describes how to debug Emacs bugs.
|
||
|
||
|
||
|
||
This file is part of GNU Emacs.
|
||
|
||
GNU Emacs is free software: you can redistribute it and/or modify
|
||
it under the terms of the GNU General Public License as published by
|
||
the Free Software Foundation, either version 3 of the License, or
|
||
(at your option) any later version.
|
||
|
||
GNU Emacs is distributed in the hope that it will be useful,
|
||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
GNU General Public License for more details.
|
||
|
||
You should have received a copy of the GNU General Public License
|
||
along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
|
||
|
||
Local variables:
|
||
mode: outline
|
||
paragraph-separate: "[ ]*$"
|
||
end:
|