Ubuntu logo

Packaging Guide

9. Fusion — Mise à jour à partir de Debian et de l’Amont

La fusion est l’un des points forts de Bazaar, et fréquemment utilisée dans le développement Ubuntu. Les mises à jour peuvent fusionner depuis Debian, depuis une nouvelle version de l’amont, ou depuis d’autres développeurs Ubuntu. Réaliser cela dans Bazaar est assez simple, et entièrement basé sur la commande bzr merge [1].

Lorsque vous êtes dans n’importe quel répertoire de travail d’une branche, vous pouvez fusionner une branche depuis un emplacement différent. Vérifiez tout d’abord que vous n’avez pas de modifications non validées :

$ bzr status

Si cela signale quelque chose, vous devrez soit soumettre les modifications, les inverser ou les classer pour y revenir ultérieurement.

9.1. Fusion depuis Debian

Exécutez ensuite bzr merge en donnant l’URL de la branche à partir de laquelle fusionner. Par exemple, pour fusionner depuis la version du paquet dans Debian Unstable, lancez [2] :

$ bzr merge lp:debian/tomboy

Cela fusionnera les modifications depuis le dernier point de fusion et vous laissera avec les modifications à revoir. Cela pourrait engendrer quelques conflits. Vous pouvez voir tout ce que la commande merge a réalisé en exécutant :

$ bzr status
$ bzr diff

Si des conflits sont signalés alors vous devrez éditer ces fichiers pour les faire paraître comme ils devraient, en supprimant les marqueurs de conflit. Une fois que vous l’avez fait, exécutez :

$ bzr resolve
$ bzr conflicts

Ceci permet de résoudre tout conflit de fichier que vous avez corrigé, et vous indique ensuite ce qu’il vous reste à traiter.

Une fois que tous les conflits sont résolus, et que vous avez effectué toutes les autres modifications nécessaires, ajoutez une nouvelle entrée au changelog, et soumettez :

$ dch -i
$ bzr commit

comme décrit précédemment.

Toutefois, avant de soumettre, il est toujours bon de vérifier toutes les modifications d’Ubuntu en exécutant :

$ bzr diff -r tag:0.6.10-5

qui montre les différences entre les versions Debian (0.6.10-5) et Ubuntu (0.6.10-5ubuntu1). D’une manière similaire, vous pouvez comparer chacune des autres versions. Pour voir toutes les versions disponibles, exécutez :

$ bzr tags

Après avoir testé et soumis votre fusion, vous devrez rechercher un parrainage ou télécharger vers l’archive de la manière habituelle.

Si vous êtes sur le point de construire le paquet source depuis cette branche fusionnée, vous devez utiliser l’option -S à la commande bd. Vous devez également prendre en considération l’utilisation de l’option --package-merge. Cela ajoutera le cas échéant les options -v et -sa au paquet source, de telle sorte que toutes les entrées du changelog depuis la dernière modification Ubuntu seront incluses dans votre fichier _source.changes. Par exemple :

$ bzr builddeb -S --package-merge

9.2. Fusion d’une nouvelle version de l’amont

Lorsque l’amont livre une nouvelle version (ou si vous souhaitez empaqueter un instantané), vous devez fusionner une archive dans votre branche.

Ceci est réalisé en utilisant la commande bzr merge-upstream. Si votre paquet possède un fichier debian/watch valide, depuis l’intérieur de la branche que vous souhaitez fusionner, tapez simplement :

$ bzr merge-upstream

Cela va télécharger l’archive et la fusionner à votre branche, vous ajoutant automatiquement une entrée debian/changelog pour vous. bzr-builddeb inspecte le fichier debian/watch pour localiser l’archive de l’amont.

Si vous n’avez pas de fichier debian/watch, vous devez spécifier manuellement la localisation de l’archive de l’amont, et sa version :

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

L’option --version est utilisée pour spécifier la version de l’amont qui est en cours de fusion, puisque la commande n’est pas (encore) capable de la déduire.

Le dernier paramètre est l’emplacement de l’archive que vous mettez à niveau ; cela peut être soit un chemin du système de fichiers local, soit une URI http, ftp, sftp, etc. comme indiqué. La commande va vous télécharger automatiquement l’archive. Elle sera renommée convenablement et, si nécessaire, convertie en .gz.

La commande merge-upstream va vous indiquer sa réussite ou si il y a eu des conflits. De toute façon, vous serez en mesure d’examiner les modifications avant la soumission habituelle.

Si vous fusionnez une version amont dans une branche Bazaar existante qui n’a pas antérieurement utilisé le format UDD, bzr merge-upstream va échouer avec une erreur indiquant que la balise de la version précédente de l’amont n’est pas disponible ; la fusion ne peut être terminée sans connaître la version de base pour la fusion. Pour contourner ce problème, créez une balise dans votre dépôt existant pour la dernière version de l’amont présente ici ; par exemple, si la dernière version Ubuntu est 1.1-0ubuntu3, créer la balise upstream-1.1 pointant vers la révision bzr que vous voulez utiliser comme la pointe de la branche amont.

[1]

Vous aurez besoin des dernières version de bzr et de bzr-builddeb pour que la commande merge fonctionne. Utilisez les versions d’Ubuntu 12.04 (Precise) ou les versions de développement depuis le PPA bzr. Spécifiquement, vous prendrez bzr version 2.5 beta 5 ou plus récent et bzr-builddeb version 2.8.1 ou plus récent. Pour les versions plus anciennes, utilisez plutôt la commande bzr merge-package.

[2]

Pour vérifier les autres branches disponibles d’un paquet dans Debian, voir la page de code du paquet. Par exemple, https://code.launchpad.net/debian/+source/tomboy