Je suis Charlie

Autres trucs

Accueil

Seulement les RFC

Seulement les fiches de lecture

Ève

Synchroniser deux dépôts darcs par courrier

Première rédaction de cet article le 9 juin 2009


darcs est un excellent VCS décentralisé. Il est par exemple utilisé pour gérer les fichiers de ce blog. Permet-il de travailler sur plusieurs machines sans qu'aucun des dépôts ne soit connecté en permanence ? Oui, en échangeant des patches par courrier, patches qu'on applique ensuite localement.

D'abord, il faut demander à darcs de produire un patch. On peut utiliser pour cela la fonction shell darcsdiff, que présentait mon article sur les fonctions shell. darscdiff prend comme argument l'ID du dernier message du dépôt qui est en retard de synchronisation. (Ou, dit autrement, l'ID immédiatement précédent celui à partir duquel on veut envoyer les patches.) Si on prend un ID trop lointain dans le passé, ce n'est pas très grave (le message sera simplement trop gros), darcs n'appliquera que les patches nouveaux.

Donc, par exemple :

% darcsdiff 'Manque de scalabilite du Wifi' 
What is the target email address? stephane+darcs@bortzmeyer.org
Successfully sent patch bundle to: stephane+darcs@bortzmeyer.org.

(Attention, par défaut, darcsdiff envoie tout le dépôt s'il ne trouve pas l'ID donc lisez bien les avertissements avant de taper sur la touche Entrée.)

Et le destinataire reçoit un message du genre :

Subject: darcs patch: Article NetBSD format fini (and 26 more)
From: bortzmeyer@batilda.nic.fr
To: stephane+darcs@bortzmeyer.org
Date: Tue,  9 Jun 2009 09:04:00 +0200 (CEST)
X-Mail-Originator: Darcs Version Control System
X-Darcs-Version: 2.0.2 (release)
DarcsURL: CONTEXT

[-- Attachment #1 --]
[-- Type: text/plain, Encoding: quoted-printable, Size: 2.4K --]

Wed Jun  3 11:37:53 CEST 2009  stephane@ludwigVII.sources.org
  * Article NetBSD format fini

Wed Jun  3 13:25:43 CEST 2009  stephane@ludwigVII.sources.org
  * TODO: strlen et l'optimisation

...

Il doit alors sauvegarder le message (par défaut, l'attachement porte comme nom l'ID du premier patch qui était manquant) puis demander à darcs d'appliquer ces patches (il peut y en avoir plusieurs, comme dans l'exemple ci-dessus) :

% darcs apply article-netbsd-format-fini.dpatch 

Si on le fait deux fois, par erreur :

% darcs apply article-netbsd-format-fini.dpatch 
All these patches have already been applied.  Nothing to do.

On trouve de nombreux détails, notamment l'intégration avec mutt dans la documentation de darcs.

(Les utilisateurs de git peuvent sans doute faire à peu près pareil avec git bundle create /tmp/project.gitbundle HEAD, puis en envoyant le /tmp/project.gitbundle par courrier.)

Version PDF de cette page (mais vous pouvez aussi imprimer depuis votre navigateur, il y a une feuille de style prévue pour cela)

Source XML de cette page (cette page est distribuée sous les termes de la licence GFDL)