home · contact · privacy
Fix.
authorChristian Heller <c.heller@plomlompom.de>
Sat, 17 May 2025 13:07:35 +0000 (15:07 +0200)
committerChristian Heller <c.heller@plomlompom.de>
Sat, 17 May 2025 13:07:35 +0000 (15:07 +0200)
bookworm/copy/seedbox/home/plom/tmp/KILL_ME [new file with mode: 0644]
bookworm/scripts/lib/apt_get_digested
testing/scripts/sync_rtorrent_download.sh

diff --git a/bookworm/copy/seedbox/home/plom/tmp/KILL_ME b/bookworm/copy/seedbox/home/plom/tmp/KILL_ME
new file mode 100644 (file)
index 0000000..e69de29
index 6f707a7d3637e44f5730990371607a74a9725258..eaabbb762c7d07f62ff23fbf541bb070c1afc1fa 100644 (file)
@@ -1,10 +1,11 @@
+. 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
@@ -29,57 +30,62 @@ dpkg warns: unable to delete old directories (not empty):|dpkg: warning: unable
 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
index e99aac6e251f4c4c42d8314334861a6d7457ac17..66c1f2c1a315a6a98d4fb4704eb8082924819df7 100755 (executable)
@@ -8,7 +8,7 @@ cd $(dirname "$0")
 . lib/expect_n_args
 . lib/expected_rtorrent_files
 . lib/for_line_in
-. lib/path_tmp_timestamped
+. lib/trapp
 cd - > /dev/null
 
 DIRNAME_DOWNLOAD='download'
@@ -134,25 +134,30 @@ if [ -z "${SYNC_DOWN}" ]; then printf 'LOCAL'; else printf 'REMOTE'; fi
 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