2024-01-02 01:47:10 +00:00
|
|
|
|
Copyright (C) 2006-2024 Free Software Foundation, Inc.
|
2023-01-01 10:31:12 +00:00
|
|
|
|
See the end of the file for license conditions.
|
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
* How developers contribute to GNU Emacs
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
Here is how software developers can contribute to Emacs. (Non-developers: see
|
2017-09-13 22:52:52 +00:00
|
|
|
|
https://www.gnu.org/software/emacs/manual/html_node/emacs/Contributing.html
|
2016-02-15 03:24:38 +00:00
|
|
|
|
or run the shell command 'info "(emacs)Contributing"'.)
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
** The Emacs repository
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
Emacs development uses Git on Savannah for its main repository.
|
2019-05-26 01:29:16 +00:00
|
|
|
|
To configure Git for Emacs development, you can run the following:
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
git config --global user.name 'Your Name'
|
|
|
|
|
git config --global user.email 'your.name@example.com'
|
|
|
|
|
git config --global transfer.fsckObjects true
|
2019-05-26 01:29:16 +00:00
|
|
|
|
|
|
|
|
|
The following shell commands then build and run Emacs from scratch:
|
|
|
|
|
|
2023-02-04 22:24:37 +00:00
|
|
|
|
git clone https://git.savannah.gnu.org/git/emacs.git
|
2016-02-15 03:24:38 +00:00
|
|
|
|
cd emacs
|
2017-08-12 15:56:52 +00:00
|
|
|
|
./autogen.sh
|
2016-02-15 03:24:38 +00:00
|
|
|
|
./configure
|
|
|
|
|
make
|
|
|
|
|
src/emacs
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
For more details, see
|
2019-09-23 06:53:39 +00:00
|
|
|
|
https://www.emacswiki.org/emacs/GitQuickStartForEmacsDevs and
|
|
|
|
|
https://www.emacswiki.org/emacs/GitForEmacsDevs or see the file
|
2016-02-15 03:24:38 +00:00
|
|
|
|
admin/notes/git-workflow.
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
** Getting involved with development
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
2017-07-22 15:51:18 +00:00
|
|
|
|
Discussion about Emacs development takes place on emacs-devel@gnu.org.
|
2017-11-03 19:55:22 +00:00
|
|
|
|
You can subscribe to the emacs-devel@gnu.org mailing list.
|
|
|
|
|
If you want to get only the important mails (for things like
|
|
|
|
|
feature freezes), choose to receive only the 'emacs-announce' topic
|
|
|
|
|
(although so far this feature has not been well or consistently used).
|
|
|
|
|
See https://lists.gnu.org/mailman/listinfo/emacs-devel for mailing list
|
2016-02-15 03:24:38 +00:00
|
|
|
|
instructions and archives. You can develop and commit changes in your
|
|
|
|
|
own copy of the repository, and discuss proposed changes on the
|
|
|
|
|
mailing list. Frequent contributors to Emacs can request write access
|
|
|
|
|
there.
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
2017-07-22 15:51:18 +00:00
|
|
|
|
Bug reports and fixes, feature requests and patches/implementations
|
|
|
|
|
should be sent to bug-gnu-emacs@gnu.org, the bug/feature list. This
|
2017-09-13 22:52:52 +00:00
|
|
|
|
is coupled to the https://debbugs.gnu.org tracker. It is best to use
|
2017-07-22 15:51:18 +00:00
|
|
|
|
the command 'M-x report-emacs-bug RET' to report issues to the tracker
|
|
|
|
|
(described below). Be prepared to receive comments and requests for
|
|
|
|
|
changes in your patches, following your submission.
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
2017-09-13 22:52:52 +00:00
|
|
|
|
The Savannah info page https://savannah.gnu.org/mail/?group=emacs
|
2017-07-22 15:51:18 +00:00
|
|
|
|
describes how to subscribe to the mailing lists, or see the list
|
|
|
|
|
archives.
|
|
|
|
|
|
|
|
|
|
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
|
2020-06-20 08:42:41 +00:00
|
|
|
|
packages the patch's commit message and changes, and makes sure the
|
|
|
|
|
format and whitespace are not munged in transit by the various mail
|
|
|
|
|
agents. To send just one such patch without additional remarks, it is
|
|
|
|
|
also possible to use a command like
|
|
|
|
|
|
2021-11-09 12:51:48 +00:00
|
|
|
|
git send-email --to=bug-gnu-emacs@gnu.org 0001-DESCRIPTION.patch
|
2020-06-20 08:42:41 +00:00
|
|
|
|
|
|
|
|
|
However, we prefer the 'git format-patch' method with attachment, as
|
|
|
|
|
doing so delivers patches in the correct and easily-recognizable format
|
|
|
|
|
more reliably, and makes the job of applying the patches easier and less
|
2020-07-21 07:54:58 +00:00
|
|
|
|
error-prone. It also allows sending patches whose author is someone
|
2020-06-20 08:42:41 +00:00
|
|
|
|
other than the email sender.
|
2017-07-22 15:51:18 +00:00
|
|
|
|
|
2021-02-18 14:07:34 +00:00
|
|
|
|
Once the cumulative amount of your submissions exceeds a dozen or so
|
|
|
|
|
lines of non-trivial changes, we will need you to assign to the FSF
|
|
|
|
|
the copyright for your contributions. (To see how many lines were
|
2021-02-12 07:25:13 +00:00
|
|
|
|
non-trivially changed, count only added and modified lines in the
|
|
|
|
|
patched code. Consider an added or changed line non-trivial if it
|
|
|
|
|
includes at least one identifier, string, or substantial comment.)
|
2021-03-15 15:51:05 +00:00
|
|
|
|
In most cases, to start the assignment process you should download
|
|
|
|
|
https://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/Copyright/request-assign.future
|
|
|
|
|
and return the completed information to the address at the top.
|
|
|
|
|
(There are other assignment options, but they are much less commonly used.)
|
|
|
|
|
If you have questions about the assignment process, you can ask the
|
|
|
|
|
address listed on the form, and/or emacs-devel@gnu.org.
|
2019-04-11 13:37:02 +00:00
|
|
|
|
|
2017-07-22 15:51:18 +00:00
|
|
|
|
** Issue tracker (a.k.a. "bug tracker")
|
|
|
|
|
|
2017-09-13 22:52:52 +00:00
|
|
|
|
The Emacs issue tracker at https://debbugs.gnu.org lets you view bug
|
2017-07-22 15:51:18 +00:00
|
|
|
|
reports and search the database for bugs matching several criteria.
|
|
|
|
|
Messages posted to the bug-gnu-emacs@gnu.org mailing list, mentioned
|
2019-03-25 17:53:07 +00:00
|
|
|
|
above, are recorded by the tracker with the corresponding
|
|
|
|
|
bugs/issues. If a message to the bug tracker contains a patch, please
|
|
|
|
|
include the string "[PATCH]" in the subject of the message in order to
|
|
|
|
|
let the bug tracker tag the bug properly.
|
2017-07-22 15:51:18 +00:00
|
|
|
|
|
|
|
|
|
GNU ELPA has a 'debbugs' package that allows accessing the tracker
|
|
|
|
|
database from Emacs.
|
|
|
|
|
|
|
|
|
|
Bugs needs regular attention. A large backlog of bugs is
|
|
|
|
|
disheartening to the developers, and a culture of ignoring bugs is
|
|
|
|
|
harmful to users, who expect software that works. Bugs have to be
|
|
|
|
|
regularly looked at and acted upon. Not all bugs are critical, but at
|
|
|
|
|
the least, each bug needs to be regularly re-reviewed to make sure it
|
|
|
|
|
is still reproducible.
|
|
|
|
|
|
|
|
|
|
The process of going through old or new bugs and acting on them is
|
|
|
|
|
called bug triage. This process is described in the file
|
|
|
|
|
admin/notes/bug-triage.
|
|
|
|
|
|
|
|
|
|
** Documenting your changes
|
|
|
|
|
|
|
|
|
|
Any change that matters to end-users should have an entry in etc/NEWS.
|
2018-06-18 16:34:55 +00:00
|
|
|
|
Try to start each NEWS entry with a sentence that summarizes the entry
|
2024-09-11 16:09:29 +00:00
|
|
|
|
and takes just one line -- this will allow reading NEWS in Outline mode
|
|
|
|
|
after hiding the body of each entry. When adding a new user option that
|
|
|
|
|
allows changing behavior, please document its default value. Similarly,
|
|
|
|
|
changes to the default value of an existing user option should be
|
|
|
|
|
announced.
|
2017-07-22 15:51:18 +00:00
|
|
|
|
|
|
|
|
|
Doc-strings should be updated together with the code.
|
|
|
|
|
|
2024-02-09 06:49:55 +00:00
|
|
|
|
New defcustom's and defface's should always have a ':version' tag
|
|
|
|
|
stating the first Emacs version in which they will appear. Likewise
|
|
|
|
|
with defcustom's or defface's whose value is changed -- update their
|
|
|
|
|
':version' tag.
|
2018-06-18 16:34:55 +00:00
|
|
|
|
|
2017-07-22 15:51:18 +00:00
|
|
|
|
Think about whether your change requires updating the manuals. If you
|
2023-09-18 11:21:22 +00:00
|
|
|
|
know it does not, mark the NEWS entry with "---" before the entry. If
|
|
|
|
|
you know that *all* the necessary documentation updates have been made
|
|
|
|
|
as part of your changes or those by others, mark the entry with "+++".
|
2023-03-31 13:18:09 +00:00
|
|
|
|
Otherwise, do not mark it.
|
2017-07-22 15:51:18 +00:00
|
|
|
|
|
|
|
|
|
If your change requires updating the manuals to document new
|
|
|
|
|
functions/commands/variables/faces, then use the proper Texinfo
|
|
|
|
|
command to index them; for instance, use @vindex for variables and
|
2018-09-27 15:48:06 +00:00
|
|
|
|
@findex for functions/commands. For the full list of predefined indices, see
|
2017-09-13 22:52:52 +00:00
|
|
|
|
https://www.gnu.org/software/texinfo/manual/texinfo/html_node/Predefined-Indices.html
|
2017-07-22 15:51:18 +00:00
|
|
|
|
or run the shell command 'info "(texinfo)Predefined Indices"'.
|
|
|
|
|
|
2017-10-13 09:04:40 +00:00
|
|
|
|
We prefer American English both in doc strings and in the manuals.
|
|
|
|
|
That includes both spelling (e.g., "behavior", not "behaviour") and
|
|
|
|
|
the convention of leaving 2 spaces between sentences.
|
|
|
|
|
|
2017-07-22 15:51:18 +00:00
|
|
|
|
For more specific tips on Emacs's doc style, see
|
2017-09-13 22:52:52 +00:00
|
|
|
|
https://www.gnu.org/software/emacs/manual/html_node/elisp/Documentation-Tips.html
|
2017-07-22 15:51:18 +00:00
|
|
|
|
Use 'checkdoc' to check for documentation errors before submitting a patch.
|
|
|
|
|
|
|
|
|
|
** Testing your changes
|
|
|
|
|
|
|
|
|
|
Please test your changes before committing them or sending them to the
|
|
|
|
|
list. If possible, add a new test along with any bug fix or new
|
|
|
|
|
functionality you commit (of course, some changes cannot be easily
|
|
|
|
|
tested).
|
|
|
|
|
|
|
|
|
|
Emacs uses ERT, Emacs Lisp Regression Testing, for testing. See
|
2017-09-13 22:52:52 +00:00
|
|
|
|
https://www.gnu.org/software/emacs/manual/html_node/ert/
|
2017-10-10 05:53:19 +00:00
|
|
|
|
or run 'info "(ert)"' for more information on writing and running
|
2017-07-22 15:51:18 +00:00
|
|
|
|
tests.
|
|
|
|
|
|
|
|
|
|
If your test lasts longer than some few seconds, mark it in its
|
|
|
|
|
'ert-deftest' definition with ":tags '(:expensive-test)".
|
|
|
|
|
|
|
|
|
|
To run tests on the entire Emacs tree, run "make check" from the
|
|
|
|
|
top-level directory. Most tests are in the directory "test/". From
|
|
|
|
|
the "test/" directory, run "make <filename>" to run the tests for
|
|
|
|
|
<filename>.el(c). See "test/README" for more information.
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
2021-09-20 15:18:40 +00:00
|
|
|
|
If you're making changes that involve the Emacs build system, please
|
|
|
|
|
test 'out-of-tree' builds as well, i.e.:
|
|
|
|
|
|
|
|
|
|
mkdir emacs-build
|
|
|
|
|
cd emacs-build
|
|
|
|
|
../path-to-emacs-sources/configure
|
|
|
|
|
make
|
|
|
|
|
|
2015-04-07 07:00:55 +00:00
|
|
|
|
** Commit messages
|
2014-12-23 19:11:45 +00:00
|
|
|
|
|
2024-02-08 20:28:08 +00:00
|
|
|
|
Ordinarily, a changeset you commit should contain a description of the
|
|
|
|
|
changes in its commit message and should not touch the repository's
|
|
|
|
|
ChangeLog files. Here is an example commit message (indented):
|
2015-04-07 07:00:55 +00:00
|
|
|
|
|
|
|
|
|
Deactivate shifted region
|
|
|
|
|
|
|
|
|
|
Do not silently extend a region that is not highlighted;
|
2015-04-19 02:08:53 +00:00
|
|
|
|
this can happen after a shift (Bug#19003).
|
2015-04-07 07:00:55 +00:00
|
|
|
|
* 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.
|
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
Occasionally, commit messages are collected and prepended to a
|
2024-02-08 19:07:10 +00:00
|
|
|
|
generated ChangeLog file, where they can be corrected. It saves time
|
|
|
|
|
to get them right the first time, so here are guidelines for
|
|
|
|
|
formatting them:
|
2014-12-23 19:11:45 +00:00
|
|
|
|
|
2015-04-22 11:25:34 +00:00
|
|
|
|
- Start with a single unindented summary line explaining the change;
|
2021-12-03 02:38:25 +00:00
|
|
|
|
do not end this line with a period. If possible, try to keep the
|
|
|
|
|
summary line to 50 characters or fewer; this is for compatibility
|
|
|
|
|
with certain Git commands that print that line in width-constrained
|
|
|
|
|
contexts.
|
2015-04-22 11:25:34 +00:00
|
|
|
|
|
2021-12-03 02:38:25 +00:00
|
|
|
|
If the summary line starts with a semicolon and a space "; ", the
|
2024-02-08 19:07:10 +00:00
|
|
|
|
commit message will be skipped and not added to the generated
|
|
|
|
|
ChangeLog file. Use this for minor commits that do not need to be
|
|
|
|
|
mentioned in the ChangeLog file, such as changes in etc/NEWS, typo
|
|
|
|
|
fixes, etc.
|
2021-12-03 02:38:25 +00:00
|
|
|
|
|
|
|
|
|
- After the summary line, there should be an empty line.
|
|
|
|
|
|
|
|
|
|
- Unindented ChangeLog entries normally come next. However, if the
|
|
|
|
|
commit couldn't be properly summarized in the brief summary line,
|
2024-09-14 06:52:59 +00:00
|
|
|
|
you can put one or more paragraphs (after the empty line and before
|
|
|
|
|
the individual ChangeLog entries) that further describe(s) the
|
|
|
|
|
commit.
|
2014-12-23 19:11:45 +00:00
|
|
|
|
|
2022-11-11 07:14:14 +00:00
|
|
|
|
- Lines in ChangeLog entries should preferably be not longer than 63
|
|
|
|
|
characters, and must not exceed 78 characters, unless they consist
|
|
|
|
|
of a single word of at most 140 characters; this 78/140 limit is
|
|
|
|
|
enforced by a commit hook.
|
2014-12-23 19:11:45 +00:00
|
|
|
|
|
|
|
|
|
- If only a single file is changed, the summary line can be the normal
|
2024-02-08 19:26:36 +00:00
|
|
|
|
first line of a ChangeLog entry (starting with the asterisk). Then
|
|
|
|
|
there will be no individual ChangeLog entries beyond the one in the
|
|
|
|
|
summary line.
|
2014-12-23 19:11:45 +00:00
|
|
|
|
|
2015-04-24 14:47:23 +00:00
|
|
|
|
- If the commit has more than one author, the commit message should
|
2015-04-24 15:00:02 +00:00
|
|
|
|
contain separate lines to mention the other authors, like the
|
2015-04-24 14:47:23 +00:00
|
|
|
|
following:
|
2015-04-22 11:25:34 +00:00
|
|
|
|
|
|
|
|
|
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
|
|
|
|
|
|
|
|
|
|
- The commit message should contain "Bug#NNNNN" if it is related to
|
|
|
|
|
bug number NNNNN in the debbugs database. This string is often
|
|
|
|
|
parenthesized, as in "(Bug#19003)".
|
2014-12-23 19:11:45 +00:00
|
|
|
|
|
2017-10-15 02:16:12 +00:00
|
|
|
|
- When citing URLs, prefer https: to http: when either will do. In
|
|
|
|
|
particular, gnu.org and fsf.org URLs should start with "https:".
|
|
|
|
|
|
2015-03-29 20:03:55 +00:00
|
|
|
|
- Commit messages should contain only printable UTF-8 characters.
|
2024-03-15 11:29:31 +00:00
|
|
|
|
However, we ask that non-ASCII characters be used only if strictly
|
|
|
|
|
necessary, not just for aesthetic purposes.
|
2015-03-29 20:03:55 +00:00
|
|
|
|
|
2015-03-29 20:59:50 +00:00
|
|
|
|
- Commit messages should not contain the "Signed-off-by:" lines that
|
2015-03-29 20:03:55 +00:00
|
|
|
|
are used in some other projects.
|
|
|
|
|
|
2015-05-19 01:43:01 +00:00
|
|
|
|
- Any lines of the commit message that start with "; " are omitted
|
2015-05-19 01:41:03 +00:00
|
|
|
|
from the generated ChangeLog.
|
|
|
|
|
|
2015-04-22 11:25:34 +00:00
|
|
|
|
- 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
|
2024-02-08 19:26:36 +00:00
|
|
|
|
between the summary line and the following ChangeLog entries.
|
2015-04-22 11:25:34 +00:00
|
|
|
|
|
2024-02-08 19:07:10 +00:00
|
|
|
|
- Emacs follows the GNU coding standards for ChangeLog entries: see
|
|
|
|
|
https://www.gnu.org/prep/standards/html_node/Change-Logs.html or run
|
|
|
|
|
'info "(standards)Change Logs"'. One exception is that commits
|
|
|
|
|
still sometimes quote `like-this' (as the standards used to
|
2016-02-15 03:24:38 +00:00
|
|
|
|
recommend) rather than 'like-this' or ‘like this’ (as they do now),
|
|
|
|
|
as `...' is so widely used elsewhere in Emacs.
|
2014-12-06 08:11:36 +00:00
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
- Some commenting rules in the GNU coding standards 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). See
|
2017-09-13 22:52:52 +00:00
|
|
|
|
https://www.gnu.org/prep/standards/html_node/Comments.html
|
2017-10-13 05:38:28 +00:00
|
|
|
|
or run 'info "(standards)Comments"'. American English is preferred
|
2017-10-13 09:04:40 +00:00
|
|
|
|
in Emacs; that includes spelling and leaving 2 blanks between
|
|
|
|
|
sentences.
|
2014-12-23 19:11:45 +00:00
|
|
|
|
|
2024-02-08 19:07:10 +00:00
|
|
|
|
The ChangeLog entries are preserved indefinitely, and have a
|
|
|
|
|
reasonable chance of being read in the future, so it's better that
|
|
|
|
|
they have good presentation.
|
2014-12-23 19:11:45 +00:00
|
|
|
|
|
|
|
|
|
- Use the present tense; describe "what the change does", not "what
|
|
|
|
|
the change did".
|
|
|
|
|
|
2014-12-06 08:28:38 +00:00
|
|
|
|
- Preferred form for several entries with the same content:
|
|
|
|
|
|
2017-05-11 03:27:37 +00:00
|
|
|
|
* lisp/menu-bar.el (clipboard-yank, clipboard-kill-ring-save)
|
|
|
|
|
(clipboard-kill-region):
|
|
|
|
|
* lisp/eshell/esh-io.el (eshell-virtual-targets)
|
|
|
|
|
(eshell-clipboard-append):
|
|
|
|
|
Replace option gui-select-enable-clipboard with
|
|
|
|
|
select-enable-clipboard; renamed October 2014. (Bug#25145)
|
2014-12-06 08:28:38 +00:00
|
|
|
|
|
|
|
|
|
(Rather than anything involving "ditto" and suchlike.)
|
|
|
|
|
|
2015-04-22 11:25:34 +00:00
|
|
|
|
- There is no standard or recommended way to identify revisions in
|
|
|
|
|
ChangeLog entries. Using Git SHA1 values limits the usability of
|
|
|
|
|
the references to Git, and will become much less useful if Emacs
|
2020-09-25 14:10:56 +00:00
|
|
|
|
switches to a different VCS. So we recommend against doing only that.
|
2014-12-06 08:11:36 +00:00
|
|
|
|
|
|
|
|
|
One way to identify revisions is by quoting their summary line.
|
2020-09-25 14:10:56 +00:00
|
|
|
|
Prefixing the summary with the commit date can give useful context
|
|
|
|
|
(use 'git show -s "--pretty=format:%cd \"%s\"" --date=short HASH' to
|
|
|
|
|
produce that). Often, "my previous commit" will suffice.
|
2014-12-06 08:11:36 +00:00
|
|
|
|
|
2015-11-15 01:35:50 +00:00
|
|
|
|
- There is no need to mention files such as NEWS and MAINTAINERS, or
|
2016-02-15 03:24:38 +00:00
|
|
|
|
to indicate regeneration of files such as 'lib/gnulib.mk', in the
|
2015-11-15 01:35:50 +00:00
|
|
|
|
ChangeLog entry. "There is no need" means you don't have to, but
|
|
|
|
|
you can if you want to.
|
2014-12-06 08:11:36 +00:00
|
|
|
|
|
2015-04-07 07:00:55 +00:00
|
|
|
|
** Generating ChangeLog entries
|
|
|
|
|
|
2019-07-05 00:32:39 +00:00
|
|
|
|
- If you use Emacs VC, you can use 'C-c C-w' to generate formatted
|
|
|
|
|
blank ChangeLog entries from the diff being committed, then use
|
|
|
|
|
'M-q' to combine and fill them. See 'info "(emacs) Log Buffer"'.
|
|
|
|
|
|
2023-09-02 13:53:47 +00:00
|
|
|
|
- If you use the third-party package Magit, you can use
|
|
|
|
|
'magit-generate-changelog' from the commit message buffer.
|
|
|
|
|
See also 'magit-add-change-log-entry' and
|
|
|
|
|
'magit-add-change-log-entry-other-window'.
|
|
|
|
|
|
2019-07-05 00:32:39 +00:00
|
|
|
|
- Alternatively, you can use Emacs functions for ChangeLog files; see
|
2017-09-13 22:52:52 +00:00
|
|
|
|
https://www.gnu.org/software/emacs/manual/html_node/emacs/Change-Log-Commands.html
|
2016-02-15 03:24:38 +00:00
|
|
|
|
or run 'info "(emacs)Change Log Commands"'.
|
2015-04-07 07:00:55 +00:00
|
|
|
|
|
2019-07-05 00:32:39 +00:00
|
|
|
|
To format ChangeLog entries with Emacs VC, create a top-level
|
|
|
|
|
ChangeLog file manually, and update it with 'C-x 4 a' as usual. Do
|
|
|
|
|
not register the ChangeLog file under git; instead, use 'C-c C-a' to
|
|
|
|
|
insert its contents into your *vc-log* buffer. Or if
|
|
|
|
|
'log-edit-hook' includes 'log-edit-insert-changelog' (which it does
|
|
|
|
|
by default), they will be filled in for you automatically.
|
2015-04-07 07:00:55 +00:00
|
|
|
|
|
2019-07-05 00:32:39 +00:00
|
|
|
|
- Instead of Emacs VC, you can use the vc-dwim command to maintain commit
|
2015-04-07 07:00:55 +00:00
|
|
|
|
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.
|
|
|
|
|
|
2022-06-25 09:17:46 +00:00
|
|
|
|
** Committing your changes.
|
|
|
|
|
|
|
|
|
|
When you commit changes, Git invokes several scripts that test the
|
2023-04-15 11:00:38 +00:00
|
|
|
|
commit for validity, and may abort the commit if some of the tests
|
2022-06-25 09:17:46 +00:00
|
|
|
|
fail. These scripts live in the '.git/hooks/' subdirectory of the
|
|
|
|
|
top-level directory of the repository, and they perform the following
|
|
|
|
|
tests:
|
|
|
|
|
|
|
|
|
|
- commit log message must not be empty;
|
|
|
|
|
- the first line of the commit log message doesn't start with
|
|
|
|
|
whitespace characters;
|
|
|
|
|
- the second line of the commit log message must be empty;
|
|
|
|
|
- commit log message should include only valid printable ASCII and
|
|
|
|
|
UTF-8 characters;
|
|
|
|
|
- commit log message lines must be shorter than 79 characters, unless
|
|
|
|
|
a line consists of a single long word, in which case that word can
|
|
|
|
|
be up to 140 characters long;
|
|
|
|
|
- there shouldn't be any "Signed-off-by:" tags in the commit log
|
|
|
|
|
message, and "git commit" should not be invoked with the '-s' option
|
|
|
|
|
(which automatically adds "Signed-off-by:");
|
|
|
|
|
- if the commit adds new files, the file names must not begin with
|
|
|
|
|
'-' and must consist of ASCII letters, digits, and characters of the
|
|
|
|
|
set [-+./_];
|
|
|
|
|
- the changes don't include unresolved merge conflict markers;
|
|
|
|
|
- the changes don't introduce whitespace errors: trailing whitespace,
|
|
|
|
|
lines that include nothing but whitespace characters, and indented
|
|
|
|
|
lines where a SPC character is immediately followed by a TAB in the
|
|
|
|
|
line's initial indentation
|
|
|
|
|
|
2017-07-22 15:51:18 +00:00
|
|
|
|
** Committing changes by others
|
|
|
|
|
|
|
|
|
|
If committing changes written by someone else, commit in their name,
|
|
|
|
|
not yours. You can use 'git commit --author="AUTHOR"' to specify a
|
2022-07-22 08:18:41 +00:00
|
|
|
|
change's author. When using Emacs VC to commit, the author can be
|
|
|
|
|
specified in the log-edit buffer by adding an "Author: AUTHOR" header
|
|
|
|
|
line (set 'log-edit-setup-add-author' non-nil to have this header line
|
|
|
|
|
added automatically). Note that the validity checks described in the
|
2022-06-25 09:17:46 +00:00
|
|
|
|
previous section are still applied, so you will have to correct any
|
|
|
|
|
problems they uncover in the changes submitted by others.
|
2017-07-22 15:51:18 +00:00
|
|
|
|
|
2015-04-22 11:25:34 +00:00
|
|
|
|
** Branches
|
2014-12-06 08:11:36 +00:00
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
Future development normally takes place on the master branch.
|
|
|
|
|
Sometimes specialized features are developed on other branches before
|
|
|
|
|
possibly being merged to the master. Release branches are named
|
|
|
|
|
"emacs-NN" where NN is the major version number, and are mainly
|
|
|
|
|
intended for more-conservative changes such as bug fixes. Typically,
|
|
|
|
|
collective development is active on the master branch and possibly on
|
|
|
|
|
the current release branch. Periodically, the current release branch
|
|
|
|
|
is merged into the master, using the gitmerge function described in
|
2016-05-24 16:06:20 +00:00
|
|
|
|
admin/notes/git-workflow.
|
2014-12-06 08:11:36 +00:00
|
|
|
|
|
2018-11-30 11:07:40 +00:00
|
|
|
|
If you are fixing a bug that exists in the current release, you should
|
|
|
|
|
generally commit it to the release branch; it will be merged to the
|
|
|
|
|
master branch later by the gitmerge function. However, when the
|
|
|
|
|
release branch is for Emacs version NN.2 and later, or when it is for
|
|
|
|
|
Emacs version NN.1 that is in the very last stages of its pretest,
|
|
|
|
|
that branch is considered to be in a feature freeze: only bug fixes
|
|
|
|
|
that are "safe" or are fixing major problems should go to the release
|
|
|
|
|
branch, the rest should be committed to the master branch. This is so
|
|
|
|
|
to avoid destabilizing the next Emacs release. If you are unsure
|
|
|
|
|
whether your bug fix is "safe" enough for the release branch, ask on
|
|
|
|
|
the emacs-devel mailing list.
|
|
|
|
|
|
|
|
|
|
Documentation fixes (in doc strings, in manuals, in NEWS, and in
|
|
|
|
|
comments) should always go to the release branch, if the documentation
|
|
|
|
|
to be fixed exists and is relevant to the release-branch codebase.
|
|
|
|
|
Doc fixes are always considered "safe" -- even when a release branch
|
2021-11-25 08:43:35 +00:00
|
|
|
|
is in feature freeze, it can still receive doc fixes. However, this
|
|
|
|
|
rule is limited to fixing real problems in the documentation; cleanups
|
|
|
|
|
and stylistic changes are excluded.
|
2016-10-04 05:59:37 +00:00
|
|
|
|
|
2016-10-04 21:03:27 +00:00
|
|
|
|
When you know that the change will be difficult to merge to the
|
2016-02-15 03:24:38 +00:00
|
|
|
|
master (e.g., because the code on master has changed a lot), you can
|
2016-02-12 07:04:52 +00:00
|
|
|
|
apply the change to both master and branch yourself. It could also
|
|
|
|
|
happen that a change is cherry-picked from master to the release
|
|
|
|
|
branch, and so doesn't need to be merged back. In these cases,
|
2016-02-15 03:24:38 +00:00
|
|
|
|
say in the release branch commit message that there is no need to merge
|
|
|
|
|
the commit to master, by starting the commit message with "Backport:".
|
|
|
|
|
The gitmerge function excludes these commits from the merge to the master.
|
2016-02-12 07:04:52 +00:00
|
|
|
|
|
|
|
|
|
Some changes should not be merged to master at all, for whatever
|
2023-03-31 13:18:09 +00:00
|
|
|
|
reason. These should be marked by including something like "Do not
|
2016-02-12 07:04:52 +00:00
|
|
|
|
merge to master" or anything that matches gitmerge-skip-regexp (see
|
2016-02-15 03:24:38 +00:00
|
|
|
|
admin/gitmerge.el) in the commit message.
|
2014-12-06 08:11:36 +00:00
|
|
|
|
|
2022-01-10 19:20:29 +00:00
|
|
|
|
** Some packages in Emacs are maintained externally
|
|
|
|
|
|
|
|
|
|
Sometimes a package that ships as part of GNU Emacs is maintained as a
|
|
|
|
|
separate project, with its own upstream repository, its own maintainer
|
|
|
|
|
group, its own development conventions, etc. The upstream project's
|
|
|
|
|
code is periodically merged into Emacs (exactly when and how such
|
|
|
|
|
merges happen depends on the package).
|
|
|
|
|
|
|
|
|
|
So when you are making a contribution -- such as fixing a bug or
|
|
|
|
|
proposing an enhancement -- to one of these externally maintained
|
|
|
|
|
packages, you sometimes need to deal with that package at its upstream
|
|
|
|
|
source.
|
|
|
|
|
|
|
|
|
|
In the section "Externally maintained packages" in "admin/MAINTAINERS"
|
|
|
|
|
we maintain a list of such packages.
|
|
|
|
|
|
2017-04-20 01:43:05 +00:00
|
|
|
|
** GNU ELPA
|
|
|
|
|
|
|
|
|
|
This repository does not contain the Emacs Lisp package archive
|
|
|
|
|
(elpa.gnu.org). See admin/notes/elpa for how to access the GNU ELPA
|
|
|
|
|
repository.
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
** Understanding Emacs internals
|
|
|
|
|
|
|
|
|
|
The best way to understand Emacs internals is to read the code. Some
|
|
|
|
|
source files, such as xdisp.c, have extensive comments describing the
|
|
|
|
|
design and implementation. The following resources may also help:
|
|
|
|
|
|
2017-09-13 22:52:52 +00:00
|
|
|
|
https://www.gnu.org/software/emacs/manual/html_node/elisp/Tips.html
|
|
|
|
|
https://www.gnu.org/software/emacs/manual/html_node/elisp/GNU-Emacs-Internals.html
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
or run 'info "(elisp)Tips"' or 'info "(elisp)GNU Emacs Internals"'.
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
|
|
|
|
The file etc/DEBUG describes how to debug Emacs bugs.
|
|
|
|
|
|
2015-11-06 08:56:59 +00:00
|
|
|
|
*** Non-ASCII characters in Emacs files
|
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
If you introduce non-ASCII characters into Emacs source files, use the
|
|
|
|
|
UTF-8 encoding unless it cannot do the job for some good reason.
|
|
|
|
|
Although it is generally a good idea to add 'coding:' cookies to
|
|
|
|
|
non-ASCII source files, cookies are not needed in UTF-8-encoded *.el
|
|
|
|
|
files intended for use only with Emacs version 24.5 and later.
|
2015-11-06 08:56:59 +00:00
|
|
|
|
|
|
|
|
|
*** Useful files in the admin/ directory
|
|
|
|
|
|
2023-03-31 13:18:09 +00:00
|
|
|
|
See all the files in 'admin/notes/*'. In particular, see
|
|
|
|
|
'admin/notes/newfile' and 'admin/notes/repo'.
|
2015-11-06 08:56:59 +00:00
|
|
|
|
|
|
|
|
|
The file admin/MAINTAINERS records the areas of interest of frequent
|
|
|
|
|
Emacs contributors. If you are making changes in one of the files
|
|
|
|
|
mentioned there, it is a good idea to consult the person who expressed
|
|
|
|
|
an interest in that file, and/or get his/her feedback for the changes.
|
|
|
|
|
If you are a frequent contributor and have interest in maintaining
|
|
|
|
|
specific files, please record those interests in that file, so that
|
|
|
|
|
others could be aware of that.
|
|
|
|
|
|
|
|
|
|
*** 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:
|
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
- Create a feature branch.
|
2015-11-06 08:56:59 +00:00
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
- Commit the rename without any changes.
|
2015-11-06 08:56:59 +00:00
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
- Make other changes.
|
2015-11-06 08:56:59 +00:00
|
|
|
|
|
2016-02-15 03:24:38 +00:00
|
|
|
|
- Merge the feature branch to the master branch, instead of squashing
|
|
|
|
|
the commits into one. The commit message on this merge should
|
|
|
|
|
summarize the renames and all the changes.
|
2015-11-06 08:56:59 +00:00
|
|
|
|
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This file is part of GNU Emacs.
|
|
|
|
|
|
2008-05-15 07:32:14 +00:00
|
|
|
|
GNU Emacs is free software: you can redistribute it and/or modify
|
2007-09-09 11:48:59 +00:00
|
|
|
|
it under the terms of the GNU General Public License as published by
|
2008-05-15 07:32:14 +00:00
|
|
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
|
|
|
(at your option) any later version.
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
|
|
|
|
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
|
2017-09-13 22:52:52 +00:00
|
|
|
|
along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
|
2007-09-09 11:48:59 +00:00
|
|
|
|
|
|
|
|
|
Local variables:
|
|
|
|
|
mode: outline
|
|
|
|
|
paragraph-separate: "[ ]*$"
|
2016-02-15 03:24:38 +00:00
|
|
|
|
coding: utf-8
|
2007-09-09 11:48:59 +00:00
|
|
|
|
end:
|