Voglio avvisare l'utente se il suo messaggio di commit non segue un determinato insieme di linee guida e quindi dare loro la possibilità di modificare il messaggio di commit, ignorare l'avviso o annullare il commit. Il problema è che non sembra avere accesso a stdin.Come si chiede all'utente di accedere a un hook di commit-msg?
Qui di seguito è il mio file di commettere-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
Ecco l'output quando lascio le informazioni Ambito vuoto:
Scope information should not be omitted
Do you want to:
1) edit the commit message 3) cancel the commit
2) ignore this warning
#?
Il messaggio è corretto, ma in realtà non si ferma per l'input. Ho anche provato a usare il più semplice comando "leggi", e ha lo stesso problema. Sembra che il problema sia che a questo punto git ha il controllo di stdin e sta fornendo il proprio input. Come posso risolvere questo?
Aggiornamento: Sembra che questo potrebbe essere un duplicato di this question che purtroppo sembra suggerire che sono sfortunato.
Quando si ha accesso a un server X si può sfuggire ad uno strumento di dialogo grafica. Brutto ma funzionante – Rudi
Al posto del messaggio di errore è possibile fornire semplicemente un messaggio di errore informativo, incluso l'eco del comando necessario per ignorare l'avviso. – bstpierre
@btspierre, questo è l'approccio che ho preso. Su consiglio di John Feminella, ho permesso l'uso di una variabile di ambiente per ignorare l'avviso e fare semplicemente eco all'avviso ogni volta che si verifica una situazione non valida. –