Je dois vérifier si l’une des chaînes “Ajouté / Modifié / Fixe / Supprimé” se trouve dans un message de journal de validation. J’écris un hook svn precommit, et le commentaire de validation attendu doit avoir l’une de ces 4 chaînes dans le message.
Le code que j’utilise est comme ci-dessous
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
Dans le code ci-dessus,
$SVNLOOK log "$REPOS" -t "$TXN"
me donnera le message de validation que l’utilisateur a entré. Maintenant, je dois vérifier la présence de l’une des chaînes “Ajouté, modifié, corrigé, supprimé” dans le message. C’est,
if (any of the above 4 ssortingngs are not present), exit 1
J’ai essayé avec
$($SVNLOOK log -t "$TXN" "$REPOS" | grep -q "Added\|Changed\|Fixed\|Deleted"|)
mais cela ne semble pas fonctionner.
Pour utiliser l’alternance, il vous faut Extended Regexp
:
grep -qE 'Added|Changed|Fixed|Deleted'
Ou:
egrep -q 'Added|Changed|Fixed|Deleted'
Utilisez l’option grep -e
(plusieurs fois) comme ceci:
grep -e Added -e Changed -e Fixed -e Deleted
sinon allez sur l’itinéraire regex:
grep --regexp=Added|Changed|Fixed|Deleted
Supprimez les barres obliques inverses et utilisez egrep
Je recommande également -i
pour la correspondance insensible à la casse:
egrep -q -i "added|changed|fixed|deleted"