Je tiens à avertir l'utilisateur si leur message de commit ne suit pas un certain ensemble de lignes directrices, et ensuite leur donner la possibilité de modifier leur message de commit, ignorer l'avertissement, ou d'annuler la livraison. Le problème est que je ne semble pas avoir d'accès à l'entrée standard.
Ci-dessous est mon commit-fichier 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
Voici le résultat quand je quitte le Champ de l'information en blanc:
Scope information should not be omitted
Do you want to:
1) edit the commit message 3) cancel the commit
2) ignore this warning
#?
Le message est correct, mais il ne fait pas d'arrêt pour l'entrée. J'ai aussi essayé d'utiliser le plus simple "lecture" de commande, et il a le même problème. Il semble que le problème est qu'à ce stade, git a le contrôle de l'entrée standard stdin et fournit sa propre entrée. Comment puis-je résoudre ce problème?
Mise à jour: Il semble que ce pourrait être un doublon de cette question qui, malheureusement, semble suggérer que je suis hors de la chance.