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