mercurial: cómo sincronizar mq parches de un acuerdo de recompra maestro como parches MQ a un conjunto de pases clon

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

  •  26-09-2019
  •  | 
  •  

Pregunta

Tengo que correr una docena de diferentes pruebas Construir sobre una base de código se mantiene en un repositorio mercurial. No quiero ejecutar estas pruebas en serie en el mismo repositorio porque modifican un conjunto de archivos comunes y quiero correr en paralelo en diferentes máquinas. Además, después de todas las pruebas se Quiero tener acceso a los últimos resultados de las pruebas de esas áreas de trabajo de prueba. Actualmente estoy clonar el repositorio central de una docena de veces y se ejecutan en cada clon una prueba diferente. Antes de cada ejecución de la prueba que hago una secuencia de preparación de tracción / actualizar / purga con el fin de iniciar la prueba en el último estado limpio. Eso es bueno para mí.

También estoy preparando nuevos cambios usando mq extensión que iba a probar en todos los clones que el anterior antes de comprometerse ellos. Para el ensayo de algunos parches candidato mq listos que quiero de alguna manera para desplegar / sincronizan que estén disponibles en los clones de prueba y se aplican esos listos para probar el uso de algún guardia antes de ejecutar la prueba.

¿Alguien hacer esta sincronización antes? ¿Cuál es la forma más sencilla de hacerlo? ¿Es necesario que tienen versiones MQ parches para eso?

¿Fue útil?

Solución

parches se puede mantener en su propio repositorio siempre que ha pasado el interruptor "c" a qinit como tal

hg qinit -c

Usted todavía puede ser capaz de crear un acuerdo de recompra parche después de los hechos a través de

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

Pero no he intentado alguna vez que en lo personal.

entonces .hg / parches puede ser tratado como cualquier otro repositorio mercurial. así que creo que probablemente podría rodar algunas secuencias de comandos shell. para entrar en el .hg dir de sus repos clonados y hacer un

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

Otros consejos

Esta es la solución que he implementado. Algunas notas:

  • todos los parches vigilados con ready_for_testing y aquellos sin vigilancia se aplican para la prueba.
  • mediante repos versionados es mejor porque podemos hacer abstracción de la cola de aplicación repositorio
  • Yo uso de mercurio 1.5.1
  • repo maestro está en master dir
  • repos clones están en dirs clone-x

Estos son los pasos (algunos de ellos podrían ser opcional):

  1. una vez: poner parches en repositorio principal bajo control de versiones usando mercurial:
    a. hg -R master init --mq #no commit sucede aquí, se puede hacer más adelante
    si. hg -R master commit --mq --addremove --message 'initial patch queue' #make visibles a pases clon

  2. para cada clon, una vez después de acabados de creación de la copia: suponiendo que no hay parches creados aún sobre los clones, initialize mq sub-repositorio:
    a. hg clone master\.hg\patches clone-x\.hg\patches
    si. hg -R clone-x qselect ready_for_testing

  3. para cada cambio en la lista maestra (parche creado / importado en repo mq): hacer esto antes de iniciar las pruebas para ello:
    a. revisión / guardias de actualización de parches MQ: los incluidos para la prueba debe ser vigilado o con + ready_for_testing
    si. hg -R master commit --mq -A #make visibles a pases clon

  4. para cada clon, para cada iteración [test] para cada clon: hacer esta secuencia de preparación antes de ejecutar la prueba real:
    a. hg -R clone-x qpop --all --force
    si. hg -R clone-x pull
    C. hg -R clone-x update --clean
    re. hg -R clone-x purge --all
    mi. hg -R clone-x pull --mq
    F. hg -R clone-x update --mq
    sol. hg -R clone-x qpush --all

A partir de Mercurial versión 1.5, puede crear un repositorio de colas en un parche Mercurial ya existente Repo con el siguiente comando:

hg init --mq

No es buena idea tener manchas en cola cuando se emite el comando.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top