btrbk-mail: optionally prefix command output lines

Add configurable prefix for each line of command output. Seems wrong,
but outsmarts the mail clients.

The problem is that some (most?) mail clients outsmart the specs and
replace text/plain mails by quotations, emoticons, emphasis, ...
The only "correct" solution is to disable these features in the mail
client.

Acceptable workaround for #376.
pull/397/head
Axel Burri 2021-03-07 17:18:39 +01:00
parent db8cc1cd14
commit 25c5e7b538
1 changed files with 29 additions and 10 deletions

View File

@ -48,6 +48,14 @@ btrbk_command="run"
btrbk_opts="-c /etc/btrbk/btrbk.conf"
### Layout options:
# Prefix command output: useful when using mail clients displaying
# btrbk summary lines starting with ">>>" as quotations.
#mail_cmd_block_prefix='\\u200B' # zero-width whitespace
#mail_cmd_block_prefix=". "
##### end config section #####
@ -127,18 +135,32 @@ die()
exit 1
}
run_cmd()
{
cmd_out=$("$@" 2>&1)
local ret=$?
detail+="++ ${@@Q}\n"
if [[ -n "${mail_cmd_block_prefix:-}" ]] && [[ -n "$cmd_out" ]]; then
detail+=$(echo -n "$cmd_out" | sed "s/^/${mail_cmd_block_prefix}/")
detail+="\n"
else
detail+=$cmd_out
fi
return $ret
}
mount_all()
{
# mount all mountpoints listed in $mount_targets
mounted=""
for mountpoint in $mount_targets; do
ebegin "Mounting $mountpoint"
detail+=`(set -x; findmnt -n $mountpoint) 2>&1`
run_cmd findmnt -n $mountpoint
if [[ $? -eq 0 ]]; then
eend -1 "already mounted"
else
detail+="\n"
detail+=`(set -x; mount --target $mountpoint) 2>&1`
run_cmd mount --target $mountpoint
eend $? && mounted+=" $mountpoint"
fi
done
@ -148,7 +170,7 @@ umount_mounted()
{
for mountpoint in $mounted; do
ebegin "Unmounting $mountpoint"
detail+=`(set -x; umount $mountpoint) 2>&1`
run_cmd umount $mountpoint
eend $?
done
}
@ -170,22 +192,19 @@ for key in $rsync_enable; do
# NOTE: This also appends the stats to the log file (rsync_log).
# Another approach to count the files would be something like:
# "rsync --out-format='' | wc -l"
ret=`(set -x; \
rsync ${rsync_opt[$key]} \
run_cmd rsync ${rsync_opt[$key]} \
--info=stats2 \
${rsync_log[$key]:+--log-file="${rsync_log[$key]}"} \
${rsync_rsh[$key]:+-e "${rsync_rsh[$key]}"} \
"${rsync_src[$key]}" \
"${rsync_dst[$key]}"
) 2>&1`
exitcode=$?
detail+=$ret
# parse stats2 (count created/deleted/transferred files)
REGEXP=$'\n''Number of created files: ([0-9]+)'
REGEXP+='.*'$'\n''Number of deleted files: ([0-9]+)'
REGEXP+='.*'$'\n''Number of regular files transferred: ([0-9]+)'
if [[ $ret =~ $REGEXP ]]; then
if [[ $cmd_out =~ $REGEXP ]]; then
rsync_stats="${BASH_REMATCH[1]}/${BASH_REMATCH[2]}/${BASH_REMATCH[3]}"
rsync_stats_long="${BASH_REMATCH[1]} created, ${BASH_REMATCH[2]} deleted, ${BASH_REMATCH[3]} transferred"
nfiles=$(( ${BASH_REMATCH[1]} + ${BASH_REMATCH[2]} + ${BASH_REMATCH[3]} ))
@ -225,7 +244,7 @@ fi
#
if [[ ${#sync_fs[@]} -gt 0 ]]; then
ebegin "Syncing filesystems at ${sync_fs[@]}"
detail+=`(set -x; sync -f "${sync_fs[@]}") 2>&1`
run_cmd sync -f "${sync_fs[@]}"
eend $?
fi
@ -234,7 +253,7 @@ fi
# run btrbk
#
ebegin "Running btrbk"
detail+=`(set -x; btrbk ${btrbk_opts:-} ${btrbk_command}) 2>&1`
run_cmd btrbk ${btrbk_opts:-} ${btrbk_command}
exitcode=$?
case $exitcode in
0) status="All backups successful"