mercurial:como sincronizar mq patches a partir de um mestre de recompra, como mq patches para um conjunto de clone acordos de recompra

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

  •  26-09-2019
  •  | 
  •  

Pergunta

Eu tenho que executar uma dúzia de diferentes testes em uma base de código mantidos em um repositório mercurial.Eu não quero executar em série destes testes no mesmo repositório, porque eles modificar um conjunto comum de arquivos e quero executá-los em paralelo em máquinas diferentes.Também, depois de todos os testes são executados quero ter acesso aos últimos resultados do teste daqueles de teste áreas de trabalho.Atualmente estou clonando o repositório principal de uma dúzia de vezes e executado em cada clone de um teste diferente.Antes de cada execução do teste de eu fazer um pull/update/limpar preparação de seqüência, a fim de iniciar o teste na mais recente estado limpo.O que é bom para mim.

Eu também estou a preparar novas alterações usando mq extensão que gostaria de teste em todos os clones, como acima antes de cometê-los.Para testar algumas pronto candidato mq patches que eu precisava, de alguma forma, para implantar/sincronizá-los para estar disponível em teste de clones e aplicar essas pronto para testes usando algum guarda antes de executar o teste.

Alguém fazer essa sincronização antes?Qual é a forma mais simples de o fazer?Eu preciso ter a versão mq patches para que?

Foi útil?

Solução

Os patches podem ser mantidos em seu próprio repositório, desde que você tenha passado a mudança "-C" para Qinit como assim

hg qinit -c

Você ainda pode criar um repo de patch após o fato via

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

Mas eu nunca tentei isso pessoalmente.

Então .hg/patches podem ser tratados como qualquer outro repositório mercurial. Então eu acho que você provavelmente poderia rolar alguns scripts de concha. para entrar no .hg diretor de seus repositórios clonados e fazer um

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

Outras dicas

Aqui está a solução que implementei.Algumas notas:

  • todos os patches guardados com ready_for_testing E os desprotegidos são aplicadas para testar.
  • usando versões acordos de recompra é melhor, porque nós pode fazer abstração da fila repositório de implementação
  • Eu uso mercurial 1.5.1
  • mestre repo está em master dir
  • clone acordos de recompra são em clone-x dirs

Aqui estão os passos (alguns pode ser opcional):

  1. uma vez que:colocar remendos no repositório principal, sob controle de versão usando o mercurial:
    um. hg -R master init --mq #não cometer acontecer aqui, pode ser feito posteriormente
    b. hg -R master commit --mq --addremove --message 'initial patch queue' #torná-los visíveis para clonar acordos de recompra

  2. para cada clone, uma vez que depois de clone de criação de acabamentos:supondo que não patches criados ainda no clones, inicializar mq sub-repositório:
    um. hg clone master\.hg\patches clone-x\.hg\patches
    b. hg -R clone-x qselect ready_for_testing

  3. para cada alteração pronto em mestre (patch criado/importados em mq repo):fazer isso antes de iniciar os testes para ele:
    um.revisão/atualização de guardas de mq patches:aqueles incluídos para os testes devem ser subterrâneo ou com +ready_for_testing
    b. hg -R master commit --mq -A #torná-los visíveis para clonar acordos de recompra

  4. para cada clone, para cada [teste] iteração para cada clone:fazer esta preparação sequência antes de executar o teste real:
    um. 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

A partir da versão Mercurial 1.5, você pode criar um repositório de fila de patches em um repositório mercurial já existente usando o seguinte comando:

hg init --mq

Não há problema em ter patches na fila ao emitir esse comando.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top