Quiero advertir al usuario si su mensaje de confirmación no sigue un cierto conjunto de pautas, y luego le doy la opción de editar su mensaje de confirmación, ignorar la advertencia o cancelar la confirmación. El problema es que no parece tener acceso a stdin.¿Cómo solicito al usuario desde dentro de un enlace commit-msg?
A continuación es mi archivo de cometer-msg:
function verify_info {
if [ -z "$(grep '$2:.*[a-zA-Z]' $1)" ]
then
echo >&2 $2 information should not be omitted
local_editor=`git config --get core.editor`
if [ -z "${local_editor}" ]
then
local_editor=${EDITOR}
fi
echo "Do you want to"
select CHOICE in "edit the commit message" "ignore this warning" "cancel the commit"; do
case ${CHOICE} in
i*) echo "Warning ignored"
;;
e*) ${local_editor} $1
verify_info "$1" $2
;;
*) echo "CHOICE = ${CHOICE}"
exit 1
;;
esac
done
fi
}
verify_info "$1" "Scope"
if [ $# -ne 0 ];
then
exit $#
fi
verify_info "$1" "Affects"
if [ $# -ne 0 ];
then
exit $#
fi
exit 0
Aquí está la salida cuando deje la información Ámbito blanco:
Scope information should not be omitted
Do you want to:
1) edit the commit message 3) cancel the commit
2) ignore this warning
#?
El mensaje es correcto, pero en realidad no se detiene para la entrada. También intenté usar el comando "leer" más simple, y tiene el mismo problema. Parece que el problema es que en este punto, git tiene el control de stdin y está proporcionando su propia entrada. ¿Cómo puedo solucionar esto?
Actualización: Parece que esto podría ser un duplicado de this question que desafortunadamente parece sugerir que estoy de suerte.
Cuando tiene acceso a un servidor X, puede escaparse a una herramienta gráfica de diálogo. Ugly-but-works – Rudi
En lugar del mensaje de error, simplemente podría proporcionar un mensaje de error informativo, que incluye repetir el comando necesario para ignorar la advertencia. – bstpierre
@btspierre, ese es el enfoque que terminé tomando. Siguiendo el consejo de John Feminella, permití el uso de una variable de entorno para anular la advertencia, y solo hago eco de la advertencia cada vez que se encuentra una mala situación. –