merkuriellen: Wie mq synchronisieren Patches von einem Master als repo mq Patches auf einen Satz von Klon repos

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

  •  26-09-2019
  •  | 
  •  

Frage

Ich habe ein Dutzend verschiedenen Build-Tests auf einer Code-Basis in einem Mercurial-Repository gehalten laufen. Ich möchte nicht, seriell diese Tests auf demselben Repository laufen, weil sie eine Reihe von gemeinsamen Dateien ändern und ich möchte auf verschiedene Maschinen sie parallel laufen zu lassen. Auch nachdem alle Tests ausgeführt werden Ich möchte den Zugang zu neuesten Testergebnisse aus diesen Testarbeitsbereiche haben. Derzeit bin ich das Klonen das Master-Repository ein Dutzend Mal und führen in jedem Klon einen anderen Test. Vor jeder Testausführung kann ich eine Zug / update / Spül-Vorbereitungssequenz, um den Test auf neuesten sauberen Zustand zu starten. Das ist gut für mich.

Ich bereite auch neue Änderungen mq Erweiterung mit, dass ich oben auf allen Klonen wie sie vor der Festlegung testen würde. Für die Prüfung einige bereit Kandidaten mq Patches ich irgendwie bereitstellen möchten / synchronisieren sie in Test Klone zur Verfügung stehen und diejenigen bereit zum Testen einige Wache verwenden, bevor die Prüfung beantragen.

Haben Sie jemand diese Synchronisation vor? Was ist der einfachste Weg, es zu tun? Muss ich zu haben versioniert mq Patches für das?

War es hilfreich?

Lösung

Patches können in ihrem eigenen Repository gehalten werden, vorausgesetzt Sie die "-c" -Schalter auf qinit wie so übergeben

hg qinit -c

Sie können immer noch einen Patch Repo nach der Tat über

in der Lage zu schaffen,
cd .hg/patches
hg init
hg addremove
hg commit -m "my patches"

Aber ich habe noch nie versucht, dass persönlich.

dann .hg / Patches können wie jedes andere Mercurial Repository behandelt werden. so dass ich glaube, Sie könnten wahrscheinlich einige Shell-Scripting rollen. in die .hg dir Ihren geklonten repos zu erhalten und ein

tun
hg clone http://centralrepo.com/patch_repo ./patches

Andere Tipps

Hier ist die Lösung, dass ich umgesetzt habe. Ein paar Anmerkungen:

  • alle bewacht Patches mit ready_for_testing und jene unbewacht sind für die Prüfung angewendet.
  • versioniert repos verwendet, ist besser, weil wir Abstraktion der Warteschlange Repository Implementierung
  • machen kann
  • Ich benutze Mercurial 1.5.1
  • Master Repo ist in master dir
  • Klon repos sind in clone-x dirs

Hier sind die Schritte (einige optional sein könnten):

  1. einmal: put Patches im Master-Repository unter Versionierung mit Mercurial:
    ein. hg -R master init --mq #no commit hier passieren kann später
    erfolgen b. hg -R master commit --mq --addremove --message 'initial patch queue' #make sie sichtbar zu Klon repos

  2. für jeden Klon, einmal nach Klon Erstellung beendet: sofern kein Patches erstellt noch auf Klone, initialize mq Unter Repository:
    ein. hg clone master\.hg\patches clone-x\.hg\patches
    b. hg -R clone-x qselect ready_for_testing

  3. für jede Änderung bereit, im Master (Patch erstellt / importiert in mq Repo): dies tut, bevor Tests für sie starten:
    ein. Review / Update Wachen von mq Patches: diejenigen, für die Prüfung enthalten sollte unbewacht sein oder mit + ready_for_testing
    b. hg -R master commit --mq -A #make sie sichtbar zu Klon repos

  4. für jeden Klon für jede [Test] Iteration für jeden Klon: tun, um diese Vorbereitungssequenz vor dem eigentlichen Test ausgeführt wird:
    ein. 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

Ab Mercurial Version 1.5 können Sie eine Patch-Queue-Repository in einem bereits existierenden Mercurial erstellen Repo mit dem folgenden Befehl:

hg init --mq

Es ist OK Warteschlange Patches haben, wenn Sie diesen Befehl ausgeben.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top