Ubuntu logo

Packaging Guide

9. Слияние — обновления из Debian и апстрима

Слияние — это одна из сильнейших сторон Bazaar, и мы часто выполняем его в процессе разработки Ubuntu. Слияние может быть выполнено с обновлениями из Debian, из нового выпуска в апстриме и от других разработчиков Ubuntu. Сделать это в Bazaar очень просто, всё основано на команде bzr merge [1].

Находясь в рабочем каталоге любой ветки, вы можете выполнить слияние изменений из ветки в другом месте. Сначала проверьте, что у вас нет незафиксированных изменений:

$ bzr status

If that reports anything then you will either have to commit the changes, revert them, or shelve them to come back to later.

9.1. Слияние из Debian

Next run bzr merge passing the URL of the branch to merge from. For example, to merge from the version of the package in Debian Unstable run [2]:

$ bzr merge lp:debian/tomboy

This will merge the changes since the last merge point and leave you with changes to review. This may cause some conflicts. You can see everything that the merge command did by running:

$ bzr status
$ bzr diff

If conflicts are reported then you need to edit those files to make them look how they should, removing the conflict markers. Once you have done this, run:

$ bzr resolve
$ bzr conflicts

This will resolve any conflicted files that you fixed, and then tell you what else you have to deal with.

После того, как все конфликты разрешены, и вы внесли все другие необходимые изменения, нужно добавить новую запись в changelog и выполнить фиксацию:

$ dch -i
$ bzr commit

как было описано выше.

Однако перед фиксацией всегда желательно проверить все изменения, сделанные в Ubuntu, выполнив:

$ bzr diff -r tag:0.6.10-5

Эта команда покажет различия между версиями в Debian (0.6.10-5) и Ubuntu (0.6.10-5ubuntu1). Подобным же способом вы можете выполнить сравнение с любыми другими версиями. Чтобы увидеть все доступные версии, выполните:

$ bzr tags

После проверки и фиксации слияния, вам нужно найти попечителя или выгрузить пакет в архив обычным способом.

If you are going to build the source package from this merged branch, you would use the -S option to the bd command. One other thing you’ll want to consider is also using the --package-merge option. This will add the appropriate -v and -sa options to the source package so that all the changelog entries since the last Ubuntu change will be included in your _source.changes file. For example:

$ bzr builddeb -S --package-merge

9.2. Слияние с новой версией из апстрима

When upstream releases a new version (or you want to package a snapshot), you have to merge a tarball into your branch.

Это делается командой bzr merge-upstream. Если в вашем пакете имеется файл debian/watch с правильным содержимым, то из каталога ветки, в которую вы собираетесь слить изменения, просто наберите:

$ bzr merge-upstream

Команда загрузит тарбол и сольёт его в вашу ветку, автоматически добавив запись в debian/changelog. bzr-builddeb просматривает файл debian/watch, чтобы определить местоположение тарбола из апстрима.

Если у вас отсутствует файл debian/watch, то вам нужно вручную указать местоположение тарбола из апстрима и версию:

$ bzr merge-upstream --version 1.2 http://example.org/releases/foo-1.2.tar.gz

Опция --version используется для указания версии апстрима, из которой выполняется слияние, поскольку команда не способна (пока) узнать её самостоятельно.

Последний параметр — это местоположение тарбола, на который выполняется обновление: это может быть путь в локальной файловой системе, http, ftp, sftp или другой URI, как показано в примере. Команда автоматически загрузит тарбол для вас, переименует его соответствующим образом и, если требуется, преобразует в .gz.

Команда merge-upstream сообщит либо о своём удачном завершении, либо о том, что имеются конфликты. В любом случае у вас будет возможность проверить изменения перед их фиксацией обычным способом.

If you are merging an upstream release into an existing Bazaar branch that has not previously used the UDD layout, bzr merge-upstream will fail with an error that the tag for the previous upstream version is not available; the merge can’t be completed without knowing what base version to merge against. To work around this, create a tag in your existing repository for the last upstream version present there; e.g., if the last Ubuntu release was 1.1-0ubuntu3, create the tag upstream-1.1 pointing to the bzr revision you want to use as the tip of the upstream branch.

[1]

Для работы с командой merge вам понадобятся более новые версии bzr и bzr-builddeb. Используйте версии из Ubuntu 12.04 (Precise) или разрабатываемые версии из PPA bzr. Точнее говоря, вам понадобится bzr версии 2.5 beta 5 или более новой, а также bzr-builddeb версии 2.8.1 или более новой. Для старых версий используйте взамен команду bzr merge-package.

[2]To check other available branches of a package in Debian, see package code page. E.g. https://code.launchpad.net/debian/+source/tomboy