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

StackOverflow https://stackoverflow.com/questions/2629056

  •  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 ?

Était-ce utile?

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) :

  1. 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ôts

  2. pour 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

  3. 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ôts

  4. pour 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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top