Tôi muốn cảnh báo người dùng nếu thông điệp cam kết của họ không tuân theo một loạt các nguyên tắc nhất định và sau đó cung cấp cho họ tùy chọn chỉnh sửa thư cam kết của họ, bỏ qua cảnh báo hoặc hủy cam kết. Vấn đề là tôi dường như không có quyền truy cập vào stdin.Tôi làm cách nào để nhắc người dùng từ trong móc móc cam kết?
Dưới đây là tập tin cam-msg của tôi:
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
Đây là kết quả khi tôi rời khỏi thông tin Phạm vi trống:
Scope information should not be omitted
Do you want to:
1) edit the commit message 3) cancel the commit
2) ignore this warning
#?
Thông điệp là chính xác, nhưng nó không thực sự dừng lại cho đầu vào. Tôi cũng đã thử sử dụng lệnh "read" đơn giản hơn và nó cũng có cùng một vấn đề. Dường như vấn đề là tại thời điểm này git có quyền kiểm soát stdin và đang cung cấp đầu vào của riêng nó. Làm thế nào để sửa lỗi này?
Cập nhật: Có vẻ như đây có thể là bản sao của this question mà không may dường như cho thấy tôi không may mắn.
Khi bạn có quyền truy cập vào X Server, bạn có thể thoát sang công cụ hộp thoại đồ họa. Xấu xí nhưng hoạt động – Rudi
Thay vì thông báo lỗi, bạn có thể chỉ cần cung cấp một thông báo lỗi thông tin - bao gồm việc lặp lại lệnh cần thiết để bỏ qua cảnh báo. – bstpierre
@btspierre, đó là cách tiếp cận mà tôi đã kết thúc. Theo lời khuyên của John Feminella, tôi cho phép sử dụng một biến môi trường để ghi đè cảnh báo và chỉ lặp lại cảnh báo khi gặp phải tình huống xấu. –