mercuriale:come sincronizzare le patch mq da un repository master come patch mq su un set di repository clone

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

  •  26-09-2019
  •  | 
  •  

Domanda

Devo eseguire una dozzina di test di build diversi su una base di codice mantenuta in un repository mercuriale.Non voglio eseguire questi test in serie sullo stesso repository perché modificano una serie di file comuni e voglio eseguirli in parallelo su macchine diverse.Inoltre, dopo aver eseguito tutti i test, desidero avere accesso ai risultati dei test più recenti da quelle aree di lavoro dei test.Attualmente sto clonando il repository principale una dozzina di volte ed eseguo in ogni clone un test diverso.Prima di ogni esecuzione del test eseguo una sequenza di preparazione pull/update/purge per avviare il test sull'ultimo stato pulito.Per me è un bene.

Sto anche preparando nuove modifiche utilizzando l'estensione mq che testerei su tutti i cloni come sopra prima di eseguirne il commit.Per testare alcune patch mq candidate pronte, voglio in qualche modo distribuirle/sincronizzarle per essere disponibili nei cloni di test e applicare quelle pronte per il test utilizzando alcune protezioni prima di eseguire il test.

Qualcuno ha già fatto questa sincronizzazione?Qual è il modo più semplice per farlo?È necessario disporre di patch mq con versione per questo?

È stato utile?

Soluzione

patch può essere mantenuto nel proprio repository fornito hai superato l'interruttore "-c" per qinit in questo modo

hg qinit -c

Si può ancora essere in grado di creare un repo patch dopo il fatto tramite

cd .hg/patches
hg init
hg addremove
hg commit -m "my patches"

Ma non ho mai provato che personalmente.

poi .hg / patches possono essere trattati come qualsiasi altro repository Mercurial. quindi penso che probabilmente si potrebbe rotolare qualche shell scripting. per entrare nella .hg dir dei tuoi pronti contro termine clonati e fare un

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

Altri suggerimenti

Ecco la soluzione che ho implementato.Poche note:

  • tutte le patch protette con ready_for_testing E quelle non protette vengono applicate per il test.
  • utilizzare repository con versione è migliore perché possiamo fare un'astrazione dell'implementazione del repository di code
  • Utilizzo Mercurial 1.5.1
  • il repository principale è disponibile master dir
  • sono presenti repository clone clone-x dirs

Ecco i passaggi (alcuni potrebbero essere facoltativi):

  1. una volta:inserisci le patch nel repository principale sotto controllo delle versioni utilizzando mercurial:
    UN. hg -R master init --mq #nessun commit avviene qui, può essere eseguito in seguito
    B. hg -R master commit --mq --addremove --message 'initial patch queue' #renderli visibili ai repository clonati

  2. per ciascun clone, una volta al termine della creazione del clone:presupponendo che non siano state ancora create patch sui cloni, inizializzare il sottorepository mq:
    UN. hg clone master\.hg\patches clone-x\.hg\patches
    B. hg -R clone-x qselect ready_for_testing

  3. per ogni modifica pronta nel master (patch creata/importata in mq repo):fallo prima di avviare i test:
    UN.rivedere/aggiornare le protezioni delle patch mq:quelli inclusi per il test dovrebbero essere non protetti o con +ready_for_testing
    B. hg -R master commit --mq -A #renderli visibili ai repository clonati

  4. per ogni clone, per ogni iterazione [test] per ogni clone:eseguire questa sequenza di preparazione prima di eseguire il test vero e proprio:
    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

di Mercurial versione 1.5, è possibile creare un repository coda delle patch in un Mercurial già esistente repo utilizzando il seguente comando:

hg init --mq

E 'bene avere le patch in coda quando si emette quel comando.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top