wiki:fr/patchs/mq
developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Version 5 (modified by laurentj, 9 years ago) (diff)

--

Cette page ne concerne plus le développement de jelix depuis que Git est utilisé à la place de Mercurial pour le projet.

Utilisation de MQ pour créer et proposer des patchs

Si vous fournissez des patchs régulièrement (indépendants ou non), la meilleure façon est de gérer une pile de patchs (ou queue de patchs), avec l'extension mercurial "mq". Pour cela il n'est pas recommandé d'avoir sa propre branche ou fork du repository, car un reviewer peut refuser le commit. Donc vous aurez plusieurs commits pour un simple patch, et le problème est que nous voulons un historique "clair" (un commit par ticket, excepté pour les grosses modifications).

Créer une pile de patchs

Vous pouvez héberger vos patchs sur votre ordinateur, ou vous pouvez les partager sur bitbucket, ce qui peut être utile au reviewer pour voir l'historique des modifications dans votre patch, review après review.

Si vous n'utilisez pas bitbucket, clonez un des dépôts de jelix, et fait hg qinit -c.

Pour partager votre liste de patch, créer vous un compte sur bitbucket.org, et suivez les instructions (remplacez "jelix-trunk" par jelix-1.1.x ou autre nom de branche si vous souhaitez travailler avec des branches) :

  • Allez sur on http://bitbucket.org/jelix/jelix-trunk/
  • cliquez sur "patch queue", remplissez le formulaire, en donnant un nom à votre dépôt pour la queue. Prenez par exemple "jelix-trunk-patches"
  • vous pouvez alors clonez votre nouveau dépôt qui contient le patch (utilisez qclone, et non clone !):
    hg qclone ssh://hg@bitbucket.org/your-login/jelix-trunk-patches
    
  • Sur votre ordinateur, vous avez à présent un répertoire jelix-trunk-patches, avec un répertoire .hg/patches/ . Maintenant remplissez le répertoire avec le contenu de jelix-trunk, pour avoir les sources du code de jelix avec votre queue de patch
    cd jelix-trunk-patches
    hg pull -u ssh://hg@bitbucket.org/jelix/jelix-trunk
    

Créer un patch

Vous pouvez commencer à travailler. Créons notre premier patch :

# créer le patch
hg qnew ticket123.patch

# faites quelques modifications
...
# rafraichissez le patch à chaque fois que vous faites une modification
hg qrefresh

# vous pouvez commiter la modification '''dans la queue du patch''', non dans le dépôt lui-même
hg qcommit -m "mon premier travail sur le patch du ticket 123"

Vous pouvez répéter qrefresh, qcommit pour améliorer votre patch.

Il est conseillé également d'inclure directement dans le patch le message qui sera indiqué dans le commit lorsque le patch sera intégré définitivement dans le dépôt officiel. Cela facilitera le travail de celui qui fera cette intégration, si vous n'avez pas les droits sur le dépôt officiel. Pour cela utilisez l'option -m de qrefresh:

hg qrefresh -m "ticket #123: bug fix on bla bla bla" -u "votre nom ou login bitbucket"

Les messages de commit doivent respecter un format?. L'option -u inclus également votre nom. Si vous ne voulez pas avoir à indiquer le nom à chaque fois, mettez le dans la configuration mercurial (fichier hgrc).

Vous pouvez créer plusieurs patch avec qnew. Souvenez vous que les modifications que vous faites sont pour le dernier patch. Si vous voulez faire un changement dans un ancien patch, vous devez utiliser qpop pour supprimer les patchs du haut. Pour appliquer à nouveau le patch le plus récent, utilisez qpush.

Lisez the tutorial on queues pour en connaitre d'avantage sur les queues de patchs.

Chaque fois que vous voulez mettre à jour les source de jelix, faites

hg qpop -a  # supprimer vos patches (de la file d'attente des patches) du code source
hg pull -u ssh://hg@bitbucket.org/jelix/jelix-trunk
hg qpush -a # ajouter les patches (de la file d'attente des patches) au code source

Si des conflits sont détectés pendant hg qpush, corriger les conflits (n'oubliez pas de faire hg qrefresh) et recommencez qpush jusqu'à ce que ce soit ok.

Publier un patch

Pour publier vos patches sur votre dépôt de patchs sur bitbucket, allez dans le répertoire .hg/patches et tapez :

hg push

Proposer un patch

Quand un de vos patchs est prêt, allez dans le ticket correspondant sur developer.jelix.org et demandez une review, en indiquant l'URL du patch dans les sources de votre pile sur bitbucket.

Voir les détails pour la suite dans la partie "proposer un patch" de cette page.

Intégrer un patch

Si vous avez les droits sur le dépôt de jelix, voici comment intégrer votre patch.

Deux façons selon la situation :

Vous voulez intégrer tous les patchs ou les premiers patchs de votre pile

Attention, cette méthode fonctionne que si le dépôt sur lequel est appliquée votre pile est un clone parfait (vous n'avez pas créer de branches, commité ou autre). Si ce n'est pas le cas, voyez la seconde méthode.

Assurez-vous d'avoir mis un message de commit dans chaque patch, à l'aide de la commande hg qrefresh -m "le message" (voir plus haut).

Assurez-vous d'avoir la dernière mise à jour des sources :

hg qpop -a  # supprimer vos patches (de la file d'attente des patches) du code source
hg pull -u ssh://hg@bitbucket.org/jelix/jelix-trunk
hg qpush -a # ajouter les patches (de la file d'attente des patches) au code source

Vous n'êtes pas obligé d'utiliser "-a" avec qpush. Vous pouvez faire un qpush jusqu'au dernier patch, dans la pile, que vous voulez intégrer. (appliquer donc juste une partie des patchs que vous voulez intégrer.

Vous pouvez alors taper :

hg qfinish -a

Tous les patchs appliqués seront transformés en commit, et retiré de votre pile de patch. Pousser ensuite ces commits sur le dépôt officiel

hg push ssh://hg@bitbucket.org/jelix/jelix-trunk

Enfin, committez votre pile de patch et mettez à jour le dépôt de la pile de patch sur bitbucket si vous utilisez bitbucket.

hg qcommit -m "patchs poussés"
cd .hg/patchs/
hg push
cd ../..

Vous voulez intégrer seulement un des patchs de votre pile

Assurez-vous d'avoir la dernière mise à jour des sources, sans réappliquer vos patchs :

hg qpop -a  # supprimer vos patches (de la file d'attente des patches) du code source
hg pull -u ssh://hg@bitbucket.org/jelix/jelix-trunk

Vous devez récupérer le fichier du patch, et le commiter directement dans le dépôt de jelix

hg import -m "message de commit si votre patch n'en contient pas" .hg/patchs/ticket123.patch
hg push ssh://hg@bitbucket.org/jelix/jelix-trunk

Vous devez ensuite supprimer votre patch de la pile:

hg qdelete ticket123.patch
hg qcommit -m "ticket123.patch intégré"

Si votre pile est sur bitbucket :

cd .hg/patches/
hg push
cd ../..

Supprimer un patch intégré

Quand votre patch a été intégré au dépôt officiel par quelqu'un d'autre que vous, il vous faut le supprimer de votre queue avant la mise à jour des sources de jelix.

hg qpop -a
hg qdelete ticket123.patch
hg qcommit -m "remove ticket123.patch"

Si votre pile est sur bitbucket :

cd .hg/patches/
hg push
cd ../..

Ensuite mettre à jour les sources :

hg pull -u ssh://hg@bitbucket.org/jelix/jelix-trunk
hg qpush -a