+. lib/for_line_in
. lib/prefixed_msg
apt_get_digested() {
prefixed_msg_init 'apt_get_digested'
-_FINISH_LINE='apt_get_digested_FINISH_LINE'
-_SEDS=\
+local FINISH_LINE='apt_get_digested_FINISH_LINE'
+local SEDS=\
'|\(Reading database \.\.\. .*|IGNORE
|Generation complete.|IGNORE
|Preconfiguring packages \.\.\.|IGNORE
update-alternatives: providing in auto mode:|update-alternatives: using ([[:print:]]+) to provide ([[:print:]]+) \(([[:print:]]+)\) in auto mode| [\1 → \2 (\3)]'
print_nl_if_started_printing() {
- if [ ! -z "${_STARTED_PRINTING}" ]; then
+ if [ ! -z "${STARTED_PRINTING}" ]; then
printf '\n'
fi
printf '\r'
}
-_LAST_PREFIX=''
-_STARTED_PRINTING=
-eval "set +e; DEBIAN_FRONTEND=noninteractive apt-get -y $1; _RESULT=\$?; set -e; echo ${_FINISH_LINE} \${_RESULT}" 2>&1 | while read _LINE; do
- _LINE=$(printf '%s' "${_LINE}" | tr -d '\r')
- if [ -z "${_LINE}" ]; then
+local LAST_PREFIX=''
+local STARTED_PRINTING=
+local LEADER_PREFIX=
+local APT_GET_EXIT_CODE
+local APT_LINE
+eval "set +e; DEBIAN_FRONTEND=noninteractive apt-get -y $1; APT_GET_EXIT_CODE=\$?; set -e; echo ${FINISH_LINE} \${APT_GET_EXIT_CODE}" 2>&1 | while read APT_LINE; do
+ APT_LINE=$(printf '%s' "${APT_LINE}" | tr -d '\r')
+ if [ -z "${APT_LINE}" ]; then
continue
- elif [ "$(echo ${_LINE} | cut -d' ' -f1)" = "${_FINISH_LINE}" ]; then
+ elif [ "$(echo ${APT_LINE} | cut -d' ' -f1)" = "${FINISH_LINE}" ]; then
print_nl_if_started_printing
- _STATUS=$(echo ${_LINE} | cut -d' ' -f2)
- if [ "${_STATUS}" != "0" ]; then
+ local EXIT_CODE=$(echo ${APT_LINE} | cut -d' ' -f2)
+ if [ "${EXIT_CODE}" != "0" ]; then
false
fi
break
fi
- _COMPRESSED_ITEM=''
- for _SED in $(printf '%s' "${_SEDS}" | sed 's/ /#WHITESPACE#/g'); do
- _WHITESPACED=$(printf '%s' "${_SED}" | sed 's/#WHITESPACE#/ /g')
- _PREFIX=$(printf '%s' "${_WHITESPACED}" | cut -d'|' -f1)
- _PATTERN=$(printf '^%s$' "${_WHITESPACED}" | cut -d'|' -f2)
- _REPLACEMENT=$(printf '%s' "${_WHITESPACED}" | cut -d'|' -f3)
- if printf '%s' "${_LINE}" | grep -E "${_PATTERN}" > /dev/null; then
- _COMPRESSED_ITEM=$(printf '%s' "${_LINE}" | sed -E "s|${_PATTERN}|${_REPLACEMENT}|")
- if [ "${_PREFIX}" = "BECOME_NEXT_PREFIX" ]; then
- _LEADER_PREFIX="${_COMPRESSED_ITEM}"
- _COMPRESSED_ITEM=IGNORE
- elif [ "${_PREFIX}" = "FOLLOW_PREFIX" ]; then
- _PREFIX="${_LEADER_PREFIX}"
+ local COMPRESSED_ITEM=''
+ local PREFIX=
+ try_seds() {
+ local SED=$1
+ PREFIX=$(printf '%s' "${SED}" | cut -d'|' -f1)
+ local PATTERN=$(printf '^%s$' "${SED}" | cut -d'|' -f2)
+ local REPLACEMENT=$(printf '%s' "${SED}" | cut -d'|' -f3)
+ if printf '%s' "${APT_LINE}" | grep -E "${PATTERN}" > /dev/null; then
+ COMPRESSED_ITEM=$(printf '%s' "${APT_LINE}" | sed -E "s|${PATTERN}|${REPLACEMENT}|")
+ if [ "${PREFIX}" = "BECOME_NEXT_PREFIX" ]; then
+ LEADER_PREFIX="${COMPRESSED_ITEM}"
+ COMPRESSED_ITEM=IGNORE
+ elif [ "${PREFIX}" = "FOLLOW_PREFIX" ]; then
+ PREFIX="${LEADER_PREFIX}"
fi
break
fi
- done
- if [ "${_COMPRESSED_ITEM}" = "IGNORE" ]; then
+ }
+ for_line_in "${SEDS}" try_seds
+ if [ "${COMPRESSED_ITEM}" = "IGNORE" ]; then
continue
- elif [ -z "${_COMPRESSED_ITEM}" ]; then
+ elif [ -z "${COMPRESSED_ITEM}" ]; then
print_nl_if_started_printing
- prefixed_msg_no_nl "${_LINE}"
- _LAST_PREFIX=''
+ prefixed_msg_no_nl "${APT_LINE}"
+ LAST_PREFIX=''
else
- if [ "${_PREFIX}" != "${_LAST_PREFIX}" ]; then
+ if [ "${PREFIX}" != "${LAST_PREFIX}" ]; then
print_nl_if_started_printing
- prefixed_msg_no_nl "# ${_PREFIX}"
- _LAST_PREFIX="${_PREFIX}"
+ prefixed_msg_no_nl "# ${PREFIX}"
+ LAST_PREFIX="${PREFIX}"
fi
- printf ' %s' "${_COMPRESSED_ITEM}"
+ printf ' %s' "${COMPRESSED_ITEM}"
fi
- _STARTED_PRINTING=1
+ STARTED_PRINTING=1
done
prefixed_msg_exit
. lib/expect_n_args
. lib/expected_rtorrent_files
. lib/for_line_in
-. lib/path_tmp_timestamped
+. lib/trapp
cd - > /dev/null
DIRNAME_DOWNLOAD='download'
printf ' media: %s\n' "${TITLE}"
TARGET_DIR="${LOCAL_STORE}/${TITLE}"
-TMP_DIR=/$(path_tmp_timestamped "${TITLE}")
+if [ -z "${SYNC_DOWN}" ]; then
+ prefixed_msg 'Uploading …'
+ TMP_DIR=$(ssh -t -q "${SERVER}" "TMPDIR=~/tmp mktemp -d")
+else
+ prefixed_msg 'Downloading …'
+ abort_if_exists "${TARGET_DIR}"
+ TMP_DIR=$(mktemp -d)
+ trapp "prefixed_msg 'With abortion, removing'${TMP_DIR}; rm -rf ${TMP_DIR}"
+fi
TMP_DIR_DOWNLOAD="${TMP_DIR}/${DIRNAME_DOWNLOAD}"
TMP_DIR_SESSION="${TMP_DIR}/${DIRNAME_SESSION}"
if [ -z "${SYNC_DOWN}" ]; then
- prefixed_msg 'Uploading …'
- ssh -t -q "${SERVER}" "mkdir ${TMP_DIR}"
scp -r "${TARGET_DIR}/"* "${SERVER}:${TMP_DIR}/"
- ssh -t -q "${SERVER}" "mv ${TMP_DIR_DOWNLOAD} ~/${DIRNAME_DOWNLOADS}/${TITLE}"
+ ssh -t -q "${SERVER}" "mv ${TMP_DIR_DOWNLOAD}/${TITLE} ~/${DIRNAME_DOWNLOADS}/${TITLE}"
ssh -t -q "${SERVER}" "mv ${TMP_DIR_SESSION}/* ~/${DIRNAME_SESSION}/"
- ssh -t -q "${SERVER}" "rmdir ${TMP_DIR_SESSION} && rmdir ${TMP_DIR}"
+ ssh -t -q "${SERVER}" "rmdir ${TMP_DIR_SESSION} && rmdir ${TMP_DIR_DOWNLOAD} && rmdir ${TMP_DIR}"
else
- prefixed_msg 'Downloading …'
- abort_if_exists "${TARGET_DIR}"
- mkdir -p "${TMP_DIR_SESSION}"
- mkdir -p "${TMP_DIR_DOWNLOAD}"
+ mkdir "${TMP_DIR_SESSION}"
+ mkdir "${TMP_DIR_DOWNLOAD}"
scp "${SERVER}:~/${DIRNAME_SESSION}/${HASH}"* "${TMP_DIR_SESSION}/"
scp -r "${SERVER}:~/${DIRNAME_DOWNLOADS}/${TITLE}" "${TMP_DIR_DOWNLOAD}/"
prefixed_msg "Storing in: ${TARGET_DIR}"
mv "${TMP_DIR}" "${TARGET_DIR}"
+ trapp
fi
prefixed_msg_exit