Quantcast
Viewing all articles
Browse latest Browse all 2722

pre-commitするときにマルチバイトを含んでいたらrijectする。

あるプロジェクトで多言語化対応する必要があったのですが、日本語がベタ書きされている箇所もちらほらありつつ「これからコーディングする際はマルチバイトを含んでいたらcommit時に弾こう!」となりました。 そのときに行った処理を記載します。 使用するライブラリ husky この記事で説明しないこと huskyがなんなのか huskyのinstallから設定方法 参考にした記事 Git でコミット前に禁止ワードが入っていないかチェックする 実際のコード #!/bin/sh rootPath=$(git rev-parse --show-toplevel) diffArray=() show_message () { cat <<EOL [WORD CHECK ERROR] Cannot commit multibyte characters [RESULT] $1 [HINT] If you want to force commit, please append prefix 'NO_WORD_CHECK=1' to command. EOL } for file in $(git diff --cached --name-only) do extention=${file##*.} if [ $extention = 'ts' ] || [ $extention = 'js' ] || [ $extention = 'vue' ]; then result=$(less "${rootPath}"/"${file}" | grep -A5 -B5 -i [0-9A-z、-◯ぁ-んァ-ヶ亜-腕弌-熙]) if [ $? -eq 0 ]; then diffArray+=("\n$result\n\n") fi fi done if [ ${#diffArray[@]} -gt 0 ] && [ -z $NO_WORD_CHECK ]; then joinedStr="$(IFS=; echo "${diffArray[*]}")" show_message "$joinedStr" exit 1 else exit 0 fi 説明 git diff --cached --name-only まずは、これでaddしたファイル名を取得しforでブン回します。 extention=${file##*.} if [ $extention = 'ts' ] || [ $extention = 'js' ] || [ $extention = 'vue' ]; then 次に、ts js vueのファイルだけに絞り込みます。 result=$(less "${rootPath}"/"${file}" | grep -A5 -B5 -i [0-9A-z、-◯ぁ-んァ-ヶ亜-腕弌-熙]) lessでファイル開いて、マルチバイトや記号でgrepかけます。 if [ $? -eq 0 ]; then $?には直前の結果が格納されています。 それをarrayに追加しまして。 if [ ${#diffArray[@]} -gt 0 ] && [ -z $NO_WORD_CHECK ]; then joinedStr="$(IFS=; echo "${diffArray[*]}")" show_message "$joinedStr" exit 1 else exit 0 fi 最後に表示させます。 このチェックを回避する場合は、commit時にNO_WORD_CHECK=1のパラメーターを指定するとそのままコミットできます。 NO_WORD_CHECK=1 git commit

Viewing all articles
Browse latest Browse all 2722

Trending Articles