¿Cómo convertir este script en un command mercurial personalizado?

Tengo el siguiente script:

#!/bin/bash if [ $# -ne 2 ]; then echo -n "$0 - a utility for applying uncommitted changes to a " echo "remote hg repository locally also" echo "Usage: $0 user@hostname path/to/repository" exit -1 fi user_at_hostname="$1" remote_path="$2" ssh "$user_at_hostname" hg -R "$remote_path" diff | hg import --no-commit - 

No es la pieza de código más gloriosa, y preferiría hacer algo más "mercurial" que eso, por así decirlo. Específicamente, me preguntaba si podría lograr lo mismo utilizando un alias mercurial / command personalizado. ¿Puedo?

PD: También había pensado en emitir algún tipo de command shelve en el repository remoto en lugar de solo get un diff, pero no quiero complicar demasiado las cosas.

Si solo quiere convertir este script en un command hg foo sin cambiarlo, use un alias shell. Simplemente copie la última línea y reemplace las variables personalizadas con $1 y $2 .

Si desea hacer que esto se parezca más a un flujo de trabajo Mercurial "normal", podría comenzar por comprometer los cambios y luego tirar de ellos. Me imagino que está evitando este flujo de trabajo para que pueda cambiar de opinión sobre estas modificaciones sin contaminar la historia de su repository con commits "oops". Si ese es el caso, entonces probablemente te interese la extensión Evolve . La extensión Evolve está diseñada para proporcionar un sistema seguro y razonablemente bueno para compartir el historial mutable. De esta forma, puedes comprometer un cambio; compartirlo con otro repository; enmendar, volver a clasificar, aplastar, o modificar el cambio; y luego compartir el set de cambios modificado con el mismo repository o uno diferente. También puede eliminar los sets de cambios del historial y compartir el hecho de que los eliminó. Si este intercambio causa problemas, como la modificación de una confirmación que tiene descendientes, Mercurial detectará esos problemas y ofrecerá una solución (por ejemplo, rebase los descendientes en la nueva versión de la confirmación) que puede ejecutar automáticamente con hg evolve . Si bien la extensión aún es experimental, básicamente funciona para la mayoría de los casos de uso simple.

Si el software experimental no le interesa, puede marcar el repository como no publicado . Esto le permitirá utilizar maquinaria de edición de historial más tradicional, como hg rebase , hg histedit y hg strip incluso después de haber enviado al repository. Sin embargo, las revisiones que se destruyen en un repository no se desvanecerán automáticamente de otros repositorys sin la extensión evolucionar. Tendrás que desnudarlos a mano.

Finalmente, tenga en count que hg push --force no destruye las revisiones. Crea nuevas twigs anónimas, lo que generalmente da como resultado una historia desorderada, pero sin perder realmente ningún dato. Es diferente de git de esta manera.