mercuriel:comment synchroniser les correctifs mq d'un dépôt principal en tant que correctifs mq vers un ensemble de dépôts clones
-
26-09-2019 - |
Question
Je dois exécuter une douzaine de tests de build différents sur une base de code maintenue dans un référentiel Mercurial.Je ne souhaite pas exécuter ces tests en série sur le même référentiel car ils modifient un ensemble de fichiers communs et je souhaite les exécuter en parallèle sur différentes machines.De plus, une fois tous les tests exécutés, je souhaite avoir accès aux derniers résultats des tests de ces zones de travail de test.Actuellement, je clone le référentiel maître une douzaine de fois et j'exécute dans chaque clone un test différent.Avant chaque exécution de test, j'effectue une séquence de préparation pull/mise à jour/purge afin de démarrer le test sur le dernier état propre.C'est bon pour moi.
Je prépare également de nouvelles modifications en utilisant l'extension mq que je testerais sur tous les clones comme ci-dessus avant de les valider.Pour tester certains correctifs mq candidats prêts, je souhaite d'une manière ou d'une autre les déployer/synchroniser pour qu'ils soient disponibles dans les clones de test et appliquer ceux prêts à être testés à l'aide d'un garde avant d'exécuter le test.
Est-ce que quelqu'un a déjà fait cette synchronisation ?Quelle est la manière la plus simple de procéder ?Dois-je disposer de correctifs mq versionnés pour cela ?
La solution
patches peuvent être maintenus dans leur propre dépôt à condition que vous l'interrupteur passé « -c » à qinit comme si
hg qinit -c
Vous pouvez toujours être en mesure de créer un repo patch après le fait via
cd .hg/patches
hg init
hg addremove
hg commit -m "my patches"
Mais je n'ai pas déjà essayé personnellement.
puis .hg / patches peuvent être traités comme tout autre dépôt Mercurial. donc je pense que vous pourriez probablement rouler des scripts shell. pour entrer dans le .hg dir de vos mises en pension et clonés faire
hg clone http://centralrepo.com/patch_repo ./patches
Autres conseils
Voici la solution que j'ai mise en œuvre.Quelques remarques :
- tous les correctifs protégés par ready_for_testing ET ceux non protégés sont appliqués pour les tests.
- il est préférable d'utiliser des dépôts versionnés car nous pouvons faire abstraction de l'implémentation du référentiel de files d'attente
- J'utilise Mercurial 1.5.1
- Le dépôt principal est présent
master
dir - Les dépôts de clones sont disponibles
clone-x
directeurs
Voici les étapes (certaines pourraient être facultatives) :
une fois:placez les correctifs dans le référentiel principal sous versioning à l'aide de Mercurial :
un.hg -R master init --mq
#aucun commit n'a lieu ici, peut être fait plus tard
b.hg -R master commit --mq --addremove --message 'initial patch queue'
#les rendre visibles pour cloner les dépôtspour chaque clone, une fois après la fin de la création du clone :en supposant qu'aucun correctif n'ait encore été créé sur les clones, initialisez le sous-dépôt mq :
un.hg clone master\.hg\patches clone-x\.hg\patches
b.hg -R clone-x qselect ready_for_testing
pour chaque modification prête dans master (patch créé/importé dans le dépôt mq) :faites ceci avant de lancer des tests pour celui-ci :
un.revoir/mettre à jour les gardes des correctifs mq :ceux inclus pour les tests doivent être sans surveillance ou avec +ready_for_testing
b.hg -R master commit --mq -A
#les rendre visibles pour cloner les dépôtspour chaque clone, pour chaque itération [test] pour chaque clone :effectuez cette séquence de préparation avant d'exécuter le test proprement dit :
un.hg -R clone-x qpop --all --force
b.hg -R clone-x pull
c.hg -R clone-x update --clean
d.hg -R clone-x purge --all
e.hg -R clone-x pull --mq
F.hg -R clone-x update --mq
g.hg -R clone-x qpush --all
de la version Mercurial 1.5, vous pouvez créer un référentiel de file d'attente de correctif dans une mise en pension Mercurial déjà existant en utilisant la commande suivante:
hg init --mq
Il est normal d'avoir des patches en file d'attente lorsque vous émettez cette commande.