2

「追加/変更/修正/削除」という文字列のいずれかがコミットログメッセージに含まれているかどうかを確認する必要があります。私はsvnprecommitフックを書いています、そして期待されるコミットコメントはメッセージにこれらの4つの文字列のうちの1つを含むべきです。

私が使用しているコードは以下の通りです

REPOS=$1
TXN=$2

SVN="/usr/bin/svn";
SVNLOOK="/usr/bin/svnlook";

$SVNLOOK log "$REPOS" -t "$TXN" | \
grep "[a-zA-Z0-9]" > /dev/null

GREP_STATUS=$?
if [ $GREP_STATUS -ne 0 ]
then
  "${ECHO}" "No Log comments present" >> "${LOG}"
   echo "Your commit has been blocked because you didn't give any log message" 1>&2
   echo "Please write a log message describing the purpose of your changes and" 1>&2
   echo "then try committing again. -- Thank you" 1>&2
exit 1
fi

上記のコードでは、

$SVNLOOK log "$REPOS" -t "$TXN"

ユーザーが入力したコミットメッセージが表示されます。ここで、メッセージに「追加、変更、修正、削除」という文字列が含まれているかどうかを確認する必要があります。あれは、

if (any of the above 4 strings are not present),
 exit 1

で試してみました

$($SVNLOOK log -t "$TXN" "$REPOS" | grep -q "Added\|Changed\|Fixed\|Deleted"|)

しかし、それは機能していないようです。

4

3 に答える 3

8

次のようなオプションを(複数回)使用grep -eします。

grep -e Added -e Changed -e Fixed -e Deleted

それ以外の場合は、正規表現ルートに移動します。

grep --regexp=Added|Changed|Fixed|Deleted
于 2013-03-14T08:56:56.977 に答える
6

交互に使用するには、次のものが必要ですExtended Regexp

grep -qE 'Added|Changed|Fixed|Deleted'

または:

egrep -q 'Added|Changed|Fixed|Deleted'
于 2013-03-14T08:57:56.987 に答える
4

バックスラッシュを削除して、大文字と小文字を区別しないマッチングegrepにもお勧めします。-i

egrep -q -i "added|changed|fixed|deleted"
于 2013-03-14T08:56:33.930 に答える