mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-30 08:09:04 +00:00
2346856168
* .gitignore: Add 'ChangeLog'. * build-aux/gitlog-to-changelog: New file, from Gnulib. * build-aux/gitlog-to-emacslog: New file. * CONTRIBUTE: Document the revised workflow. * Makefile.in (clean): Remove *.tmp and etc/*.tmp* instead of just special cases. (CHANGELOG_HISTORY_INDEX_MAX, CHANGELOG_N, gen_origin): New vars. (ChangeLog, unchanged-history-files, change-history) (change-history-commit): New rules. * admin/admin.el (make-manuals-dist--1): Don't worry about doc/ChangeLog. * admin/authors.el: Add a FIXME. * admin/make-tarball.txt: * lisp/calendar/icalendar.el: * lisp/gnus/deuglify.el: * lisp/obsolete/gulp.el: * lwlib/README: Adjust to renamed ChangeLog history files. * admin/merge-gnulib (GNULIB_MODULES): Add gitlog-to-changelog. * admin/notes/repo: Call it 'master' a la Git, not 'trunk' a la Bzr. Remove obsolete discussion of merging ChangeLog files. New section "Maintaining ChangeLog history". * build-aux/git-hooks/pre-commit: Reject attempts to commit files named 'ChangeLog'. * lib/gnulib.mk, m4/gnulib-comp.m4: Regenerate. * make-dist: Make and distribute top-level ChangeLog if there's a .git directory. Distribute the new ChangeLog history files instead of scattered ChangeLog files. Distribute the new files gitlog-to-changelog and gitlog-to-emacslog. Fixes: bug#19113
286 lines
11 KiB
Plaintext
286 lines
11 KiB
Plaintext
This file contains information on Emacs developer processes.
|
||
|
||
For information on contributing to Emacs as a non-developer, see
|
||
(info "(emacs)Contributing") or
|
||
http://www.gnu.org/software/emacs/manual/html_node/emacs/Contributing.html
|
||
|
||
* Information for Emacs Developers.
|
||
|
||
An "Emacs Developer" is someone who contributes a lot of code or
|
||
documentation to the Emacs repository. Generally, they have write
|
||
access to the Emacs git repository on Savannah
|
||
https://savannah.gnu.org/git/?group=emacs.
|
||
|
||
** 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.
|
||
|
||
** Commit messages
|
||
|
||
Typically, a patch creates ChangeLog entries by putting them into its
|
||
commit message, not by changing a ChangeLog file. Here is an example
|
||
commit message (indented):
|
||
|
||
Deactivate shifted region
|
||
|
||
Do not silently extend a region that is not highlighted;
|
||
this can happen after a shift.
|
||
* doc/emacs/mark.texi (Shift Selection): Document the change.
|
||
* lisp/window.el (handle-select-window):
|
||
* src/frame.c (Fhandle_switch_frame, Fselected_frame):
|
||
Deactivate the mark.
|
||
Fixes: bug#19003
|
||
|
||
The general format is as follows.
|
||
|
||
- Start with a single unindented summary line explaining the change,
|
||
then an empty line, then unindented ChangeLog entries.
|
||
|
||
- Limit lines in commit messages to 78 characters, unless they consist
|
||
of a single word of at most 140 characters; this is enforced by a
|
||
commit hook. It's nicer to limit the summary line to 50 characters;
|
||
this isn't enforced. If the change can't be summarized so briefly,
|
||
add a paragraph after the empty line and before the individual file
|
||
descriptions.
|
||
|
||
- If only a single file is changed, the summary line can be the normal
|
||
file first line (starting with the asterisk). Then there is no
|
||
individual files section.
|
||
|
||
- Explaining the rationale for a design choice is best done in comments
|
||
in the source code. However, sometimes it is useful to describe just
|
||
the rationale for a change; that can be done in the commit message
|
||
between the summary line and the file entries.
|
||
|
||
- Commit messages should contain only printable UTF-8 characters.
|
||
|
||
- Commit messages should not contain the "Signed-off-by:" lines that
|
||
are used in some other projects.
|
||
|
||
- 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.
|
||
|
||
- Some of the rules in the GNU coding standards section 5.2
|
||
"Commenting Your Work" also apply to ChangeLog entries: they must be
|
||
in English, and be complete sentences starting with a capital and
|
||
ending with a period (except the summary line should not end in a
|
||
period).
|
||
|
||
It is tempting to relax this rule for commit messages, since they
|
||
are somewhat transient. However, they are preserved indefinitely,
|
||
and have a reasonable chance of being read in the future, so it's
|
||
better that they have good presentation.
|
||
|
||
- Use the present tense; describe "what the change does", not "what
|
||
the change did".
|
||
|
||
- Preferred form for several entries with the same content:
|
||
|
||
* lisp/help.el (view-lossage):
|
||
* lisp/kmacro.el (kmacro-edit-lossage):
|
||
* lisp/edmacro.el (edit-kbd-macro): Fix docstring, lossage is now 300.
|
||
|
||
(Rather than anything involving "ditto" and suchlike.)
|
||
|
||
- If the commit has authors other than yourself, the commit message
|
||
should contain a separate line like the following:
|
||
|
||
Co-authored-by: Joe Schmoe <j.schmoe@example.org>
|
||
|
||
- If the commit is a tiny change that is exempt from copyright paperwork,
|
||
the commit message should contain a separate line like the following:
|
||
|
||
Copyright-paperwork-exempt: yes
|
||
|
||
- If the commit fixes a bug, append a separate line
|
||
|
||
Fixes: bug#NNNN
|
||
|
||
where NNNN is the bug number.
|
||
|
||
- In ChangeLog entries, 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 ChangeLog 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.
|
||
|
||
- If a commit message's first line starts with "; ", the message is
|
||
ignored when generating ChangeLog history files via 'make changelog'
|
||
or via 'make change-history'. You can use "; " for minor commits
|
||
that do not need separate ChangeLog entries.
|
||
|
||
** Generating ChangeLog entries
|
||
|
||
- You can use various Emacs functions to ease the process of writing
|
||
ChangeLog entries; see (info "(emacs)Change Log Commands") or
|
||
http://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Log-Commands.html.
|
||
|
||
- If you use Emacs VC, one way to format ChangeLog entries is to create
|
||
a top-level ChangeLog file, and update it with 'C-x 4 a' file as
|
||
usual. Do not register the ChangeLog file under git; instead, use
|
||
'C-c C-a' to insert its contents into into your *vc-log* buffer.
|
||
|
||
- Alternatively, you can use the vc-dwim command to maintain commit
|
||
messages. When you create a source directory, run the shell command
|
||
'git-changelog-symlink-init' to create a symbolic link from
|
||
ChangeLog to .git/c/ChangeLog. Edit this ChangeLog via its symlink
|
||
with Emacs commands like 'C-x 4 a', and commit the change using the
|
||
shell command 'vc-dwim --commit'. Type 'vc-dwim --help' for more.
|
||
|
||
** 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. Announcements about the freeze
|
||
(and other important events) are made on the info-gnu-emacs 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.
|
||
|
||
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.
|
||
|
||
*** git vs rename
|
||
|
||
git does not explicitly represent a file renaming; it uses a percent
|
||
changed heuristic to deduce that a file was renamed. So if you are
|
||
planning to make extensive changes to a file after renaming it (or
|
||
moving it to another directory), you should:
|
||
|
||
- create a feature branch
|
||
|
||
- commit the rename without any changes
|
||
|
||
- make other changes
|
||
|
||
- merge the feature branch to trunk, _not_ squashing the commits into
|
||
one. The commit message on this merge should summarize the renames
|
||
and all the changes.
|
||
|
||
** 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 .
|
||
|
||
To email a patch you can use a shell command like 'git format-patch -1'
|
||
to create a file, and then attach the file to your email. This nicely
|
||
packages the patch's commit message and changes.
|
||
|
||
** Document your changes.
|
||
|
||
Any change that matters to end-users should have an entry in etc/NEWS.
|
||
|
||
Doc-strings should be updated together with the code.
|
||
|
||
Think about whether your change requires updating the manuals. 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.
|
||
|
||
Please see (info "(elisp)Documentation Tips") or
|
||
https://www.gnu.org/software/emacs/manual/html_node/elisp/Documentation-Tips.html
|
||
for more specific tips on Emacs's doc style. Use `checkdoc' to check
|
||
for documentation errors before submitting a patch.
|
||
|
||
** Test your changes.
|
||
|
||
Please test your changes before committing them or sending them to the
|
||
list.
|
||
|
||
Emacs uses ERT, Emacs Lisp Regression Testing, for testing. See (info
|
||
"(ert)") or https://www.gnu.org/software/emacs/manual/html_node/ert/
|
||
for more information on writing and running tests.
|
||
|
||
To run tests on the entire Emacs tree, run "make check" from the
|
||
top-level directory. Most tests are in the directory
|
||
"test/automated". From the "test/automated" directory, run "make
|
||
<filename>" to run the tests for <filename>.el(c). See
|
||
"test/automated/Makefile" for more information.
|
||
|
||
** 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:
|