Fusion pendant la construction

Une fonctionnalité particulière de svn-buildpackage est le mode mergeWithUpstream. De nombreux projets ne préfèrent pas garder l'intégralité des sources amont sous gestionnaire de version, à cause de l'espace disque nécessaire ou du temps de traitement par exemple. Parfois, il est logique de ne garder que le répertoire debian/ et peut-être quelques autres fichiers sous gestionnaire de version.

L'exportation des sources du dépôt et l'ajout aux sources amont avant la construction deviennent agaçants au bout d'un moment. Les outils svn-buildpackage automatisent la plupart de ces opérations en basculant vers le mode mergeWithUpstream si un indicateur particulier est détecté : la propriété (Subversion) mergeWithUpstream du répertoire debian. svn-buildpackage fusionnera le tronc avec le code source amont au moment de la construction et svn-upgrade ne mettra à niveau que les fichiers modifiés dans ce cas.

Pour activer cette fonctionnalité lors de l'importation initiale du paquet source, il suffit d'ajouter l'option -o lors de l'appel à svn-inject pour préparer les sources dans le mode mergeWithUpstream. Le jeu de fichiers est alors réduit à ceux modifiés pour Debian et la propriété mergeWithUpstream est configurée.

Mais qu'en est-il de basculer en mode mergeWithUpstream après l'injection du paquet ? Pour ce faire, extraire le dépôt complet, enlever les fichiers non modifiés dans le paquet Debian à la fois dans les sources amont et dans la branche Debian (svn rm) et configurer la propriété mergeWithUpstream sur debian dans le répertoire trunk avec :

svn propset mergeWithUpstream 1 debian

Pour finalement arrêter d'utiliser le mode mergeWithUpstream, enlever la propriété mergeWithUpstream ainsi :

svn propdel mergeWithUpstream debian/

Pour éviter de conserver les sources amont de tous les paquets du dépôt, il suffit d'ajouter l'option --no-branches lors de l'appel à svn-inject, pour l'empêcher de créer un sous-répertoire branches.

Prise en charge du format 3.0 de dpkg-source

svn-buildpackage peut construire des paquets au format source 3.0, même en utilisant ../tarballs/truc_1.2.3-1.orig.tar.bz2 en mode mergeWithUpstream. Vérifier que le fichier debian/source/format existe et a été ajouté à la copie de travail de Subversion.

Si debian/source/format existe et contient 3.0 *, svn-buildpackage recherche un fichier .orig.tar.bz2 dans le répertoire tarballs et l'utilise pour la construction suivante.

Exemple 3.2. vérifications des formats de source avec dpkg-source

dpkg-source --print-format doit être un peu aidé pour comprendre les structures habituellement utilisées avec Subversion. La commande a besoin de deux répertoires : le répertoire actuel est utilisé pour trouver l'archive amont d'origine, et le répertoire indiqué est utilisé pour trouver ./debian/changelog. Modifier le répertoire contenant l'archive avant d'exécuter dpkg-source --print-format :

$ svn mkdir debian/source
$ echo "3.0 (quilt)" > debian/source/format
$ svn add debian/source/format
$ pushd ../tarballs/
$ dpkg-source --print-format ../trunk/
3.0 (quilt)
$ popd

Préparation de correctifs (« patch ») dans les paquets au format 3.0 de dpkg-source

Avec 3.0 (quilt) et mergeWithUpstream, svn-do doit être utilisé pour dépaqueter les sources amont avant de simplement modifier ou d'appliquer un correctif sur les fichiers nécessaires au premier correctif. Ensuite dpkg-source peut préparer automatiquement les correctifs :

Exemple 3.3. laisser dpkg-source préparer les correctifs pour 3.0 (quilt)

$ dpkg-buildpackage -uc -us -S

Il faut à ce moment choisir un nom pratique pour le correctif, ajouter ce nom dans le fichier series, puis sortir du sous-interpréteur svn-do pour que les modifications soient recopiées vers trunk. Cette technique doit être répétée pour chaque correctif.