* lisp/mail/feedmail.el (bbdb-dwim-net-address, vm-mail): Declare.
[bpt/emacs.git] / admin / notes / bzr
CommitLineData
51603dab
GM
1NOTES ON COMMITTING TO EMACS'S BAZAAR REPO -*- outline -*-
2
3* Install changes only on one branch, let them get merged elsewhere if needed.
4In particular, install bug-fixes only on the release branch (if there
5is one) and let them get synced to the trunk; do not install them by
6hand on the trunk as well. E.g. if there is an active "emacs-23" branch
7and you have a bug-fix appropriate for the next Emacs-23.x release,
8install it only on the emacs-23 branch, not on the trunk as well.
9
10Installing things manually into more than one branch makes merges more
11difficult.
12
13http://lists.gnu.org/archive/html/emacs-devel/2010-03/msg01124.html
14
0c6b7b19
GM
15The exception is, if you know that the change will be difficult to
16merge to the trunk (eg because the trunk code has changed a lot).
17In that case, it's helpful if you can apply the change to both trunk
18and branch yourself (when committing the branch change, indicate
19in the commit log that it should not be merged to the trunk; see below).
20
51603dab 21* Backporting a bug-fix from the trunk to a branch (e.g. "emacs-23").
0c6b7b19
GM
22Indicate in the commit log that there is no need to merge the commit
23to the trunk. Anything that matches `bzrmerge-skip-regexp' will do;
24eg start the commit message with "Backport:". This is helpful for the
25person merging the release branch to the trunk.
51603dab
GM
26
27http://lists.gnu.org/archive/html/emacs-devel/2010-05/msg00262.html
28
29* Installing changes from your personal branches.
30If your branch has only a single commit, or many different real
31commits, it is fine to do a merge. If your branch has only a very
32small number of "real" commits, but several "merge from trunks", it is
33preferred that you take your branch's diff, apply it to the trunk, and
34commit directly, not merge. This keeps the history cleaner.
35
5739cdd2
EZ
36In general, when working on some feature in a separate branch, it is
37preferable not to merge from trunk until you are done with the
38feature. Unless you really need some change that was done on the
39trunk while you were developing on the branch, you don't really need
40those merges; just merge once, when you are done with the feature, and
41Bazaar will take care of the rest. Bazaar is much better in this than
42CVS, so interim merges are unnecessary.
43
51603dab
GM
44Or use shelves; or rebase; or do something else. See the thread for
45yet another fun excursion into the exciting world of version control.
46
47http://lists.gnu.org/archive/html/emacs-devel/2010-04/msg00086.html
9aafb22b 48
9092d186
PE
49* Installing changes from gnulib
50Some of the files in Emacs are copied from gnulib. To synchronize
51these files from the version of gnulib that you have checked out into
52a sibling directory of your branch, type "make sync-from-gnulib"; this
53will check out the latest version of gnulib if there is no sibling
54directory already. It is a good idea to run "bzr status" afterwards,
55so that if a gnulib module added a file, you can record the new file
56using "bzr add". After synchronizing from gnulib, do a "make" in the
57usual way.
58
59To change the set of gnulib modules, change the GNULIB_MODULES
60variable in the top-level Makefile.in, and then run:
61
62 ./config.status
63 make sync-from-gnulib
64 bzr status
65
66The last command will mention files that may need to be added using
67"bzr add". If you remove a gnulib module, or if a gnulib module
68removes a file, then remove the corresponding files by hand.
69
9aafb22b
GM
70* How to merge changes from emacs-23 to trunk
71
72The following description uses bound branches, presumably it works in
73a similar way with unbound ones.
74
8ae17ff2
GM
750) (First time only) Get the bzr changelog_merge plugin
76(this will be included by default in bzr 2.4 onwards):
d0ba09dc
GM
77
78cd ~/.bazaar/plugins
8ae17ff2
GM
79# The following is an improved version of: lp:bzr-changelog-merge
80bzr branch lp:~spiv/bzr-changelog-merge/non-head-edits-723968
d0ba09dc
GM
81mv bzr-changelog-merge changelog_merge
82
8ae17ff2
GM
83This should make merging ChangeLogs smoother. It merges new entries
84to the top of the file, rather than trying to fit them in mid-way
85through. Newer versions of the plugin should also be able to deal
86with changes to *old* ChangeLog entries, that should not be floated to
87the head of the file (see launchpad#723968).
d0ba09dc 88
8ae17ff2
GM
89Maybe the default Emacs behavior without this plugin is better,
90though, it's not clear yet.
0560d0ea 91
9aafb22b
GM
921) Get clean, up-to-date copies of the emacs-23 and trunk branches.
93Check for any uncommitted changes with bzr status.
94
952) M-x cd /path/to/trunk
96
d0ba09dc
GM
97The first time only, do this:
98cd .bzr/branch
99Add the following line to branch.conf:
100changelog_merge_files = ChangeLog
101
9aafb22b
GM
1023) load admin/bzrmerge.el
103
1044) M-x bzrmerge RET /path/to/emacs-23 RET
105
106It will prompt about revisions that should be skipped, based on the
107regexp in bzrmerge-missing. If there are more revisions that you know
108need skipping, you'll have to do that by hand.
109
b91f171d 1105) It will stop if there are any conflicts. Resolve them.
9aafb22b
GM
111Using smerge-mode, there are menu items to skip to the next conflict,
112and to take either the trunk, branch, or both copies.
113
565cb736
GM
1146) After resolving all conflicts, you might need to run the bzmerge
115command again if there are more revisions still to merge.
116
b69258a1 117Do not commit (or exit Emacs) until you have run bzrmerge to completion.
9aafb22b 118
4ebf3ee1 119Before committing, check bzr status and bzr diff output.
565cb736
GM
120If you have run bzrmerge enough times, the "pending merge tip" in bzr
121status should be the last revision from the emacs-23 branch, and
122bzr status -v should show all the revisions you expect to merge.
4ebf3ee1 123
4474c927
GM
124(Note that it will also show "skipped" revisions. This is expected,
125and is due to a technical limitation of bzr. The log data for those
126revisions gets merged, the actual changes themselves do not.
127http://lists.gnu.org/archive/html/emacs-devel/2011-01/msg00609.html )
128
59af988b
GM
129In particular, check the ChangeLog entries (eg in case too many
130entries have been included or whitespace between entries needs fixing).
131bzrmerge tries to fix up the dates to today's date, but it only does
132this where there are conflicts. If you used the changelog_merge plugin,
133there won't be any conflicts, and (at time of writing) you will need
ed3d1631
GM
134to adjust dates by hand. In any case, if someone made multiple
135ChangeLog entries on different days in the branch, you may wish to
136collapse them all to a single entry for that author in the trunk
137(because in the trunk they all appear under the same date).
3cbbfdc3
GM
138Obviously, if there are multiple changes to the same file by different
139authors, don't break the logical ordering in doing this.
b91f171d
GM
140
141Notes:
142
1431) A lot that was in tramp.el in emacs-23 has moved to tramp-sh.el in
144the trunk. If you end up with a conflict in tramp.el, the changes may
145need to go to tramp-sh.el instead. Remember to update the file name in
146the ChangeLog.
147
1482) If a file is modified in emacs-23, and deleted in the trunk, you
149get a "contents conflict". Assuming the changes don't need to be in
150the trunk at all, use `bzr resolve path/to/file --take-this' to keep the
151trunk version. Prior to bzr 2.2.3, this may fail. You can just
152delete the .OTHER etc files by hand and use bzr resolve path/to/file.
565cb736
GM
153
1543) Conflicts in autoload md5sums in comments. Strictly speaking, the
155right thing to do is merge everything else, resolve the conflict by
b69258a1 156choosing either the trunk or branch version, then run `make -C lisp
565cb736
GM
157autoloads' to update the md5sums to the correct trunk value before
158committing.
a241b7c0
GM
159
160* Re-adding a file that has been removed from the repository
161
162It's easy to get this wrong. Let's suppose you've done:
163
164bzr remove file; bzr commit
165
166and now, sometime later, you realize this was a mistake and file needs
167to be brought back. DON'T just do:
168
169bzr add file; bzr commit
170
171This restores file, but without its history (`bzr log file' will be
172very short). This is because file gets re-added with a new file-id
173(use `bzr file-id file' to see the id).
174
175Insteading of adding the file, try:
176
177bzr revert -rN file; bzr commit
178
179where revision N+1 is the one where file was removed.
180
181You could also try `bzr add --file-ids-from', if you have a copy of
182another branch where file still exists.