Asegurar una fusión entre sucursales ocurre en una dirección

Esta mañana descubrí que mi compañero de trabajo se había fusionado en el path equivocado entre dos twigs en mercurial: tenemos una twig ver5 y ver6, con files adicionales en ver6. ¿Hay alguna forma (probablemente un gancho en el lado del server) de hacer cumplir que los hijos de cualquier nodo ver5 sean del ver5?

En lugar de publicar dos veces, ¿mi respuesta a " Mercurial: permitir la fusión de una twig de publicación a la pnetworkingeterminada, pero no viceversa " ayuda? http://sofes.miximages.com/a/19926324/1025457

Si tiene ver5 combinado en ver6 o ver6 combinado en ver5 todavía está terminando con un hijo de ver5 que tiene cosas de ver6 en él.

Sin embargo, si desea evitar un set de cambios cuyo nombre de sucursal es ver5 con ancestros que sean verídicos, podría hacerlo fácilmente con un gancho. Justo donde pones ese gancho es la parte difícil. Si lo convierte en un gancho pretxnchangegroup puede evitar que las personas pretxnchangegroup una fusión ofensiva en el repository del lado del server, pero ya lo habrán comprometido, y tal vez algunos cambios más encima, y ​​les será difícil calcularlo. qué hacer para arreglarlo Si puede controlar sus configuraciones locales, puede colocar un pretxncommit que les impide comprometer la fusión, pero no puede hacer que ejecuten ese enlace utilizando solo herramientas de Mercurial.

El gancho real, cualquiera que sea el tipo que lo haga, podría usar cualquiera de estas estrategias:

  • compruebe si el nombre de twig es ver5 y, de ser así, asegúrese de que ningún file / contenido específico de ver6 esté presnet

o

  • compruebe si branchname es ver6 y, de ser así, asegúrese de que ni p1 ni p2 tienen branchname ver5

TL; DR: Probablemente sea más problemático de lo que valga la pena, apegarse a la vergüenza.

Esto debería hacerlo. Utiliza una consulta de revset para encontrar fusiones en ver5 desde ver6 .

 hg log -r 'children(p2(::ver5 and ::ver6 and merge()) and branch(ver6)) and branch(ver5)' 
  • ::ver5 and ::ver6 and merge() encuentra todas las fusiones que son ancestros de las twigs ver5 y ver6
  • p2(...) and branch(ver6) el segundo padre (set de cambios entrante) que están en la twig ver6 .
  • children(...) and branch(ver5) luego toma el set de cambios de fusión real que está en la twig ver5 .

Hace poco tuve que resolver esto por mi count , pero también necesitaba asegurarme de que el default no se fusionara indirectamente en mi twig de publicación, es decir, por defecto -> function -> versión.