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