2010-10-15 10:36:36 +00:00
|
|
|
# -*- mode:org -*-
|
|
|
|
|
|
|
|
#+title: Maintainer tasks
|
2010-11-16 14:22:14 +00:00
|
|
|
#+startup: noindent
|
2010-10-15 10:36:36 +00:00
|
|
|
|
|
|
|
This document describes the tasks the Org-mode maintainer has to do
|
|
|
|
and how they are performed.
|
|
|
|
|
2010-11-15 11:00:11 +00:00
|
|
|
* Working with patchwork
|
|
|
|
|
|
|
|
John Wiegley is running a patchwork server that looks at the
|
|
|
|
emacs-orgmode mailing list and extracts patches. The maintainer and
|
|
|
|
his helpers should work through such patches, give feedback on them
|
|
|
|
and apply the ones which are good and done.
|
|
|
|
|
|
|
|
I have found that the best workflow for this is using the pw script by
|
|
|
|
Nate Case, with the modifications for Org-mode made by John Wiegley
|
|
|
|
and Carsten Dominik. The correct version of this script that should
|
|
|
|
be used with Org mode is distributed in the UTILITIES directory of the
|
|
|
|
Org mode distribution. Here is the basic workflow for this.
|
|
|
|
|
|
|
|
** Access to the patchwork server
|
|
|
|
|
|
|
|
If you want to work on patchwork patches, you need write access at the
|
|
|
|
patchwork server. You need to contact John Wiegley to get this
|
|
|
|
access.
|
|
|
|
|
|
|
|
There is a web interface to look at the patches and to change the
|
|
|
|
status of patches. This interface is self-explanatory. There is also
|
|
|
|
a command line script which can be very convenient to use.
|
|
|
|
|
|
|
|
** Testing patches
|
|
|
|
|
|
|
|
To start testing a patch, first assign it to yourself
|
|
|
|
|
|
|
|
: pw update -s "Under Review" -d DELEGATE-NAME NNN
|
|
|
|
|
|
|
|
where =NNN= is a patch number and =DELEGATE-NAME= is your user name on
|
|
|
|
the patchwork server.
|
|
|
|
|
|
|
|
The get the patch into a branch:
|
|
|
|
|
|
|
|
: pw branch NNN
|
|
|
|
|
|
|
|
This will create a local topic branch in your git repository with the
|
|
|
|
name =t/patchNNN=. You will also be switched to the branch so that
|
|
|
|
you can immediately start testing it. Quite often small amends need
|
|
|
|
to be made, or documentation has to be added. Also, many contributors
|
|
|
|
do not yet provide the proper ChangeLog-like entries in the commit
|
|
|
|
message for the patch. As a maintainer, you have two options here.
|
|
|
|
Either ask the contributor to make the changes and resubmit the patch,
|
|
|
|
or fix it yourself. In principle, asking to contributor to change the
|
|
|
|
patch until it is complete is the best route, because it will educate
|
|
|
|
the contributor and minimize the work for the maintainer. However,
|
|
|
|
sometimes it can be less hassle to fix things directly and commit the
|
|
|
|
changes to the same branch =t/patchNNN=.
|
|
|
|
|
|
|
|
If you ask the contributor to make the changes, the patch should be
|
|
|
|
marked on the patchwork server as "changes requested".
|
|
|
|
|
|
|
|
: pw update -s "Changed Requested" -m "What to change" NNN
|
|
|
|
|
2010-11-16 14:17:15 +00:00
|
|
|
This will send an email to the contributor and the mailing list with a
|
2010-11-15 11:00:11 +00:00
|
|
|
request for changes. The =-m= message should not be more than one
|
|
|
|
sentence and describe the requested changes. If you need to explain
|
|
|
|
in more detail, write a separate email to the contributor.
|
|
|
|
|
|
|
|
When a new version of the patch arrives, you mark the old one as
|
|
|
|
superseded
|
|
|
|
|
|
|
|
: pw update -s "Superseded" NNN
|
|
|
|
|
|
|
|
and start working at the new one.
|
|
|
|
|
|
|
|
** Merging a final patch
|
|
|
|
|
|
|
|
Once the patch has been iterated and is final (including the
|
|
|
|
ChangeLog-like entries in the commit message), it should be merged.
|
|
|
|
The assumption here is that the final version of the patch is given by
|
|
|
|
the HEAD state in the branch =t/patchNNN=. To merge, do this:
|
|
|
|
|
|
|
|
: pw merge -m "maintainer comment" NNN
|
|
|
|
|
2010-11-16 14:17:15 +00:00
|
|
|
This will merge the patch into master, switch back to master and send
|
2010-11-15 11:00:11 +00:00
|
|
|
an email to both contributor and mailing list stating that this change
|
|
|
|
has been accepted, along with the comment given in the =-m= message.
|
|
|
|
|
|
|
|
At some point you might then want to remove the topic branch
|
|
|
|
|
|
|
|
: git -d t/patchNNN
|
|
|
|
|
2010-10-15 10:36:36 +00:00
|
|
|
* Releases
|
|
|
|
|
|
|
|
** Main releases
|
|
|
|
|
|
|
|
The release number for main releases look like this: =7.13=
|
|
|
|
|
|
|
|
Main releases are made whenever Org is in a state where the feature
|
|
|
|
set is consistent and we feel that the features that are implemented
|
|
|
|
is something we want to support in the future.
|
|
|
|
|
|
|
|
A major release turns the current state of the master branch into a
|
|
|
|
release. The release process is a single make command:
|
|
|
|
|
|
|
|
: make release TAG=7.13
|
|
|
|
|
2010-10-23 06:18:06 +00:00
|
|
|
Before issuing this command, you should make sure that everything
|
|
|
|
during the process will work right, you can do so my running
|
|
|
|
|
|
|
|
: make testrelease TAG=7.13
|
|
|
|
|
|
|
|
When this fails, make sure to clean up. =git reset --hard= if
|
|
|
|
necessary, and check if there are unwanted files, directories, or
|
|
|
|
branches left over from the testing.
|
|
|
|
|
2010-10-15 10:36:36 +00:00
|
|
|
** Minor releases
|
|
|
|
|
|
|
|
The release number for minor releases look like this: =7.13.01=
|
|
|
|
|
|
|
|
Minor releases are small amends to main releases. Usually they fix
|
2010-10-16 05:19:00 +00:00
|
|
|
bugs discovered in a main release. Only the fix to the bug is
|
|
|
|
bundled into a release, without the main development work going on in
|
2010-11-16 14:17:15 +00:00
|
|
|
the master branch. Since the bug fix will also be needed in the
|
2010-10-15 10:36:36 +00:00
|
|
|
master branch, usually the fix is made in master and then
|
|
|
|
cherry-picked into maint. When this is done, a release is made from
|
|
|
|
maint with this command:
|
|
|
|
|
|
|
|
: make fixrelease TAG=7.13.01
|
|
|
|
|
2010-10-23 06:18:06 +00:00
|
|
|
** Between releases
|
|
|
|
|
|
|
|
While working on master between releases, I use something like
|
|
|
|
7.02trans as the version string. To set this version string in all
|
|
|
|
relevant files, use
|
|
|
|
|
|
|
|
: UTILITIES/set_version 7.02trans
|
|
|
|
|
|
|
|
and commit the result. Note that the above command does not change
|
|
|
|
the version string in the file from which Org's homepage is
|
|
|
|
generated. To change that as well, you would use a =--all= flag. TO
|
|
|
|
change only this file, use =--only=.
|
|
|
|
|
2010-10-15 10:36:36 +00:00
|
|
|
* Synchonization with Emacs
|
|
|
|
|
|
|
|
This is still a significant headache. Some hand work is needed here.
|
|
|
|
|
2010-11-16 14:17:15 +00:00
|
|
|
Emacs uses bzr, and while I see all the advantages this would have, I
|
2010-10-23 06:18:06 +00:00
|
|
|
cannot bring myself to switch away from git for my day-to-day work.
|
|
|
|
So the way I have been doing things with Emacs is this:
|
2010-10-15 10:36:36 +00:00
|
|
|
|
2010-10-23 06:18:06 +00:00
|
|
|
1. I do not update the version in Emacs too often. Just once every
|
|
|
|
few month - this is frequently enough for the Emacs release cycle.
|
|
|
|
|
|
|
|
2. I watch the Emacs diffs for changes made by the maintainers of
|
2010-10-15 10:36:36 +00:00
|
|
|
Emacs in the org-mode files in Emacs. Any changes that come up
|
|
|
|
there, I merge into the development version of Org-mode.
|
|
|
|
Occasionally I do not do this, if I do not agree with a change.
|
|
|
|
The changes go into Org /without/ a ChangeLog-like entry in the
|
|
|
|
commit message. The reason for this is that we will later generate
|
|
|
|
a ChangeLog file from our commit messages, and I do not want double
|
2010-10-23 06:18:06 +00:00
|
|
|
ChangeLog entries in the Emacs ChangeLog file.
|
2010-10-15 10:36:36 +00:00
|
|
|
|
2010-10-23 06:18:06 +00:00
|
|
|
3. When I have made a release (usually I wait for the minor releases
|
|
|
|
to stabilize), I *copy* org files into the Emacs repository. Yes,
|
|
|
|
I do not merge, I copy. This has been the source of some problems
|
|
|
|
in the past - but I have not had the patience to work out a better
|
|
|
|
mechanism, and I really dislike the idea that the version in Emacs
|
|
|
|
starts diverging from my own.
|
2010-10-15 10:36:36 +00:00
|
|
|
|
2010-10-23 06:18:06 +00:00
|
|
|
Careful: Copy /org.texi/ and /orgcard.tex/ into the right places,
|
|
|
|
and also copy the lisp files with *two exceptions*: Do *not* copy
|
2010-10-15 10:36:36 +00:00
|
|
|
/org-colview-xemacs.el/ and /org-install.el/. The former does not
|
|
|
|
belong in Emacs. And the latter would actually be harmful because
|
|
|
|
Emacs generates its own autoloads. The Emacs distribution contains
|
|
|
|
an empty org-install.el, so that users can have =(require
|
|
|
|
'org-install)= in .emacs with no ill effects. So if you were to
|
|
|
|
copy org-install.el, you would overwrite that empty placeholder
|
|
|
|
file.
|
|
|
|
|
2010-10-23 06:18:06 +00:00
|
|
|
4. Generate the ChangeLog entries
|
2010-10-15 10:36:36 +00:00
|
|
|
|
|
|
|
For this, I do in the org-mode git repository
|
|
|
|
|
|
|
|
: UTILITIES/make_emacs_changelog release_7.02.05..release_7.03.02
|
|
|
|
|
2010-10-23 06:18:06 +00:00
|
|
|
This will spit out ChangeLog entries (for the given commit range)
|
|
|
|
that need to go into the ChangeLog files in Emacs. Org-mode
|
|
|
|
contributes to 3 different ChangeLog files in Emacs:
|
|
|
|
|
|
|
|
: lisp/org/ChangeLog (for lisp changes)
|
|
|
|
: doc/misc/ChangeLog (for org.texi changes)
|
|
|
|
: etc/ChangeLog (for refcard changes)
|
|
|
|
|
|
|
|
When you run the =make_emacs_changelog= program, you will be
|
|
|
|
prompted for a date in ISO format YYYY-MM-DD, this date will be
|
|
|
|
used in the ChangeLog entries - Emacs wants these dates to be the
|
|
|
|
time when the change has been installed into Emacs, not the time
|
|
|
|
when we made the change in our own repository. You will also be
|
|
|
|
prompted for the kind of ChangeLog you want to make, possible
|
|
|
|
answers are =lisp=, =texi=, and =card=. The program will then
|
|
|
|
select the correct entries for the specified ChangeLog file. If
|
|
|
|
you don't like being prompted, you can give the date and type as
|
|
|
|
second and third command line arguments to =make_emacs_changelog=.
|
|
|
|
|
|
|
|
These entries need to be added to the ChangeLog files in Emacs.
|
|
|
|
You should, in the ChangeLog file, select the inserted region of
|
|
|
|
new entries and do =M-x fill-region=, so that the entries are
|
|
|
|
formatted correctly. I then do look through the entries quickly to
|
|
|
|
make sure they are formatted properly, that the email addresses
|
|
|
|
look right etc.
|
|
|
|
|
|
|
|
5. Commit the changes into the bzr repository and you are done. Emacs
|
|
|
|
developers often look throught the commit and make minor changes -
|
|
|
|
these need to be merged back into our own repo.
|
|
|
|
|
2010-10-15 10:36:36 +00:00
|
|
|
|
|
|
|
|