Improve "dry run" mode

Hooks are executed, but they show the actions instead of doing them.
This commit is contained in:
Jérémy Lecour 2019-03-09 13:48:38 +01:00
parent 463555475b
commit 293c38fb83

View file

@ -98,20 +98,29 @@ hook_commit() {
if test -d "${GIT_DIR}" && test -d "${GIT_WORK_TREE}"; then
CHANGED_LINES=$(${GIT_BIN} status --porcelain | wc -l | tr -d ' ')
if [ "${CHANGED_LINES}" != "0" ]; then
${GIT_BIN} add --all
${GIT_BIN} commit --message "${TEXTE}" --author="${USER} <${USER}@evolix.net>" --quiet
# Add the SHA to the log file if something has been committed
SHA=$(${GIT_BIN} rev-parse --short HEAD)
STATS=$(${GIT_BIN} show --stat | tail -1)
# append commit data, without empty lines
GIT_COMMITS=$(printf "%s\n%s : %s %s" "${GIT_COMMITS}" "${GIT_DIR}" "${SHA}" "${STATS}" | sed -e '/^$/d')
if [ "${DRY_RUN}" = "1" ]; then
STATS=$(${GIT_BIN} diff --stat | tail -1)
GIT_COMMITS=$(printf "%s\n%s : %s" "${GIT_COMMITS}" "${GIT_DIR}" "${STATS}" | sed -e '/^$/d')
else
${GIT_BIN} add --all
${GIT_BIN} commit --message "${TEXTE}" --author="${USER} <${USER}@evolix.net>" --quiet
# Add the SHA to the log file if something has been committed
SHA=$(${GIT_BIN} rev-parse --short HEAD)
STATS=$(${GIT_BIN} show --stat | tail -1)
# append commit data, without empty lines
GIT_COMMITS=$(printf "%s\n%s : %s %s" "${GIT_COMMITS}" "${GIT_DIR}" "${SHA}" "${STATS}" | sed -e '/^$/d')
fi
fi
fi
# unset environment variables to prevent accidental influence on other git commands
unset GIT_DIR GIT_WORK_TREE
done
if [ -n "${GIT_COMMITS}" ]; then
echo "${GIT_COMMITS}" >> "${LOGFILE}"
if [ "${DRY_RUN}" = "1" ]; then
echo "\n\n********** Commits ****************\n${GIT_COMMITS}\n***********************************"
else
echo "${GIT_COMMITS}" >> "${LOGFILE}"
fi
fi
fi
}
@ -119,18 +128,26 @@ hook_commit() {
hook_db() {
# SQL_TEXTE=`echo "${TEXTE}" | sed "s/'/\\\\\\'/g ; s@/@\\\\\/@g ; s@\\&@et@g"`
SQL_TEXTE=$(echo "${TEXTE}" | sed "s/'/''/g")
PG_QUERY="INSERT INTO evomaint(hostname,userid,ipaddress,begin_date,end_date,details) VALUES ('${HOSTNAME}','${USER}','${IP}','${BEGIN_DATE}',now(),'${SQL_TEXTE}')"
echo "${PG_QUERY}" | psql ${PGDB} ${PGTABLE} -h ${PGHOST}
if [ "${DRY_RUN}" = "1" ]; then
echo "\n\n********** DB query **************\n${PG_QUERY}\n***********************************"
else
echo "${PG_QUERY}" | psql ${PGDB} ${PGTABLE} -h ${PGHOST}
fi
}
hook_mail() {
MAIL_TEXTE=$(echo "${TEXTE}" | sed -e "s@/@\\\\\/@g ; s@&@\\\\&@")
MAIL_GIT_COMMITS=$(echo "${GIT_COMMITS}" | sed -e "s@/@\\\\\/@g ; s@&@\\\\&@")
MAIL_CONTENT=$(cat /usr/share/scripts/evomaintenance.tpl | \
sed -e "s/__TO__/${EVOMAINTMAIL}/ ; s/__HOSTNAME__/${HOSTNAME_TEXT}/ ; s/__USER__/${USER}/ ; s/__BEGIN_DATE__/${BEGIN_DATE}/ ; s/__END_DATE__/${END_DATE}/ ; s/__GIT_COMMITS__/${MAIL_GIT_COMMITS}/ ; s/__TEXTE__/${MAIL_TEXTE}/ ; s/__IP__/${IP}/ ; s/__FULLFROM__/${FULLFROM}/ ; s/__FROM__/${FROM}/ ; s/__URGENCYFROM__/${URGENCYFROM}/ ; s/__URGENCYTEL__/${URGENCYTEL}/")
cat /usr/share/scripts/evomaintenance.tpl | \
sed -e "s/__TO__/${EVOMAINTMAIL}/ ; s/__HOSTNAME__/${HOSTNAME_TEXT}/ ; s/__USER__/${USER}/ ; s/__BEGIN_DATE__/${BEGIN_DATE}/ ; s/__END_DATE__/${END_DATE}/ ; s/__GIT_COMMITS__/${MAIL_GIT_COMMITS}/ ; s/__TEXTE__/${MAIL_TEXTE}/ ; s/__IP__/${IP}/ ; s/__FULLFROM__/${FULLFROM}/ ; s/__FROM__/${FROM}/ ; s/__URGENCYFROM__/${URGENCYFROM}/ ; s/__URGENCYTEL__/${URGENCYTEL}/" | \
${SENDMAIL_BIN} -oi -t -f ${FROM}
if [ "${DRY_RUN}" = "1" ]; then
echo "\n\n********** Mail *******************\n${MAIL_CONTENT}\n***********************************"
else
echo "${MAIL_CONTENT}" | ${SENDMAIL_BIN} -oi -t -f ${FROM}
fi
}
test -f /etc/evomaintenance.cf && . /etc/evomaintenance.cf
@ -254,24 +271,18 @@ echo "> Press <Enter> to submit, or <Ctrl+c> to cancel."
read enter
# write log
echo "----------- $(get_now) ---------------" >> "${LOGFILE}"
echo "${BLOB}" >> "${LOGFILE}"
if [ "${DRY_RUN}" = "1" ]; then
echo
echo "[DRY-RUN] Options:"
echo "OPT_COMMIT: ${OPT_COMMIT}"
echo "OPT_DB: ${OPT_DB}"
echo "OPT_MAIL: ${OPT_MAIL}"
exit 2
echo "\n\n********** Log ********************\n${BLOB}\n***********************************"
else
# git commit
[ "${OPT_COMMIT}" = "1" ] && hook_commit
# insert into PG
[ "${OPT_DB}" = "1" ] && hook_db
# send mail
[ "${OPT_MAIL}" = "1" ] && hook_mail
exit 0
echo "----------- $(get_now) ---------------" >> "${LOGFILE}"
echo "${BLOB}" >> "${LOGFILE}"
fi
# Hooks
# git commit
[ "${OPT_COMMIT}" = "1" ] && hook_commit
# insert into PG
[ "${OPT_DB}" = "1" ] && hook_db
# send mail
[ "${OPT_MAIL}" = "1" ] && hook_mail
exit 0