bzr 8.5 KB

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