2016-08-19 134 views
2

我有一个commit-msg钩子验证提交消息的内容。如何从`commit-msg`中打开终端编辑器git hook

如果检查失败,我想重新打开提交消息文件我的终端编辑器,以便我可以纠正错误。

我有以下几点,当验证失败时会提示用户。

#!/usr/bin/env bash 

COMMIT_MSG_FILE="$1" 

# If we have a STDIN, use it, otherwise get one 
if tty >/dev/null 2>&1; then 
    TTY=$(tty) 
else 
    TTY=/dev/tty 
fi 

while true; do 

    # read lines from file 
    COMMIT_MSG_LINES=() 
    while IFS= read -r; do 
    COMMIT_MSG_LINES+=("$REPLY") 
    done < <(cat $COMMIT_MSG_FILE) 

    # validate - limit the subject to 50 characters 
    test "${#COMMIT_MSG_LINES[0]}" -le 50 && break; 

    echo -n "Validation failed. Proceed with commit [y/n]? " 
    read REPLY < "$TTY" 

    case "$REPLY" in 
    Y*|y*) exit 0 ;; 
    N*|n*) exit 1 ;; 
    *)  $EDITOR $COMMIT_MSG_FILE; continue ;; 
    esac 

done 

YyNn之外的任何响应应该重新打开编辑器。

但是相反,我发现了以下错误:

Received SIGHUP or SIGTERM 

当我打电话钩手动脚本正常工作,所以我认为这是值得做的,其中挂钩调用内容。

我怎样才能让编辑器从这样的commit-msg挂钩中打开?

回答

0

解决了它。显式重定向TTY到$EDITOR似乎工作。

替换:

$EDITOR $COMMIT_MSG_FILE 

有:

$EDITOR $COMMIT_MSG_FILE < "$TTY" 
相关问题