2016-08-19 1 views
2

コミットメッセージの内容を検証するcommit-msgフックがあります。`commit-msg` gitフック内からターミナルエディタを開く方法

このチェックが失敗した場合、間違いを修正できるように私の端末エディタにコミットメッセージファイルを再度開きます。

私は次のことを確認します。

#!/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" 
関連する問題