Ubuntu logo

Packaging Guide

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

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

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

$ bzr status

Если появится отчет, то Вам нужно либо применить изменения, откатить их, либо отложить решения (и возвратиться к их решению позже).

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

Затем запустите bzr merge, передавай URL ветки для слияния. К примеру, чтобы выполнить слияние версий пакета в Debian Unstable запустите [2]:

$ bzr merge lp:debian/tomboy

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

$ bzr status
$ bzr diff

Если появится отчет о конфликтах, Вам нужно отредактировать соответствующие файлы, чтобы привести их к должному виду, убрав конфликтующие маркеры (conflict markers). Как только Вы это сделали, выполните:

$ bzr resolve
$ bzr conflicts

Это решит проблему с конфликтующими файлами, которые Вы исправляли, и сообщит что еще Вам нужно сделать.

После того, как все конфликты разрешены, и вы внесли все другие необходимые изменения, нужно добавить новую запись в 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

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

Если Вы собираетесь создать исходный пакет из этой объединенной ветки, то нужно использовать опцию -S команды bd. Также Вам захочется рассмотреть использование опции --package-merge. Это добавит соответствующие опции -v и -sa к исходному пакету, чтобы все записи в логе изменений после последних изменений в Ubuntu были включены в Ваш файл _source.changes. Например:

$ bzr builddeb -S --package-merge

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

Когда в апстриме выпускается новая версия (или Вы хотите запаковать скриншот), Вам нужно выполнить слияние tar-архива и Вашей ветки.

Это делается командой 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 сообщит либо о своём удачном завершении, либо о том, что имеются конфликты. В любом случае у вас будет возможность проверить изменения перед их фиксацией обычным способом.

Если Вы объединяете релиз апстрима с существующей веткой Bazaar, в которой еще не использовалась разметка UDD, bzr merge-upstream пройдет неудачно и с ошибкой, что тег предыдущих версий апстрима недоступен. Слияние нельзя выполнить без знания базовой версии для слияния. Для работы с этим, создайте тег в своем существующем репозитории для последней имеющейся там версии апстрима; например, если последний релиз Ubuntu был 1.1-0ubuntu3, создайте тег upstream-1.1, указывая на изменение bzr, которое Вы хотите использовать как подсказку для ветки апстрима.

[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]

Чтобы проверить наличие других веток пакета в Debian, см. страницу кода пакета. Например: https://code.launchpad.net/debian/+source/tomboy