From 293c38fb83da0219c1b6359f412bcce0fd3b385d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Lecour?= Date: Sat, 9 Mar 2019 13:48:38 +0100 Subject: [PATCH] Improve "dry run" mode Hooks are executed, but they show the actions instead of doing them. --- evomaintenance.sh | 73 +++++++++++++++++++++++++++-------------------- 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/evomaintenance.sh b/evomaintenance.sh index a1075d8..e37f366 100755 --- a/evomaintenance.sh +++ b/evomaintenance.sh @@ -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 to submit, or 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