Show rsync verbose output in TUI and application log
Replace tee with _snaplog_tee shell function that writes each line unbuffered to three destinations: snapshot log, application log file, and stderr (which the TUI captures for live display). This fixes the issue where rsync file-by-file output was invisible in both the Logs screen and the Running Tasks view due to pipe buffering. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -98,7 +98,7 @@ _rclone_cmd() {
|
|||||||
local rc=0
|
local rc=0
|
||||||
if [[ -n "${_TRANSFER_LOG:-}" && "$subcmd" == "copy" ]]; then
|
if [[ -n "${_TRANSFER_LOG:-}" && "$subcmd" == "copy" ]]; then
|
||||||
echo "=== rclone copy $* ===" >> "$_TRANSFER_LOG"
|
echo "=== rclone copy $* ===" >> "$_TRANSFER_LOG"
|
||||||
rclone "$subcmd" "${rclone_opts[@]}" --verbose "$@" > >(tee -a "$_TRANSFER_LOG") 2>&1 || rc=$?
|
rclone "$subcmd" "${rclone_opts[@]}" --verbose "$@" > >(_snaplog_tee) 2>&1 || rc=$?
|
||||||
else
|
else
|
||||||
rclone "$subcmd" "${rclone_opts[@]}" "$@" || rc=$?
|
rclone "$subcmd" "${rclone_opts[@]}" "$@" || rc=$?
|
||||||
fi
|
fi
|
||||||
|
|||||||
@@ -4,6 +4,16 @@
|
|||||||
[[ -n "${_GNIZA4LINUX_SNAPLOG_LOADED:-}" ]] && return 0
|
[[ -n "${_GNIZA4LINUX_SNAPLOG_LOADED:-}" ]] && return 0
|
||||||
_GNIZA4LINUX_SNAPLOG_LOADED=1
|
_GNIZA4LINUX_SNAPLOG_LOADED=1
|
||||||
|
|
||||||
|
# Tee helper: writes each line to the transfer log, app log, and stderr (TUI).
|
||||||
|
# Used as process substitution target: cmd > >(_snaplog_tee) 2>&1
|
||||||
|
_snaplog_tee() {
|
||||||
|
while IFS= read -r line; do
|
||||||
|
echo "$line" >> "${_TRANSFER_LOG}"
|
||||||
|
[[ -n "${LOG_FILE:-}" ]] && echo "$line" >> "${LOG_FILE}"
|
||||||
|
echo "$line" >&2
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
# Initialize snapshot log directory and transfer log file.
|
# Initialize snapshot log directory and transfer log file.
|
||||||
snaplog_init() {
|
snaplog_init() {
|
||||||
_SNAP_LOG_DIR=$(mktemp -d "${WORK_DIR}/gniza-snaplog-XXXXXX")
|
_SNAP_LOG_DIR=$(mktemp -d "${WORK_DIR}/gniza-snaplog-XXXXXX")
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ rsync_to_remote() {
|
|||||||
local rc=0
|
local rc=0
|
||||||
if [[ -n "${_TRANSFER_LOG:-}" ]]; then
|
if [[ -n "${_TRANSFER_LOG:-}" ]]; then
|
||||||
echo "=== rsync: $source_dir -> ${REMOTE_USER}@${REMOTE_HOST}:${remote_dest} ===" >> "$_TRANSFER_LOG"
|
echo "=== rsync: $source_dir -> ${REMOTE_USER}@${REMOTE_HOST}:${remote_dest} ===" >> "$_TRANSFER_LOG"
|
||||||
"${rsync_cmd[@]}" > >(tee -a "$_TRANSFER_LOG") 2>&1 || rc=$?
|
"${rsync_cmd[@]}" > >(_snaplog_tee) 2>&1 || rc=$?
|
||||||
else
|
else
|
||||||
"${rsync_cmd[@]}" || rc=$?
|
"${rsync_cmd[@]}" || rc=$?
|
||||||
fi
|
fi
|
||||||
@@ -133,7 +133,7 @@ rsync_local() {
|
|||||||
local rc=0
|
local rc=0
|
||||||
if [[ -n "${_TRANSFER_LOG:-}" ]]; then
|
if [[ -n "${_TRANSFER_LOG:-}" ]]; then
|
||||||
echo "=== rsync (local): $source_dir -> $local_dest ===" >> "$_TRANSFER_LOG"
|
echo "=== rsync (local): $source_dir -> $local_dest ===" >> "$_TRANSFER_LOG"
|
||||||
rsync "${rsync_opts[@]}" "$source_dir" "$local_dest" > >(tee -a "$_TRANSFER_LOG") 2>&1 || rc=$?
|
rsync "${rsync_opts[@]}" "$source_dir" "$local_dest" > >(_snaplog_tee) 2>&1 || rc=$?
|
||||||
else
|
else
|
||||||
rsync "${rsync_opts[@]}" "$source_dir" "$local_dest" || rc=$?
|
rsync "${rsync_opts[@]}" "$source_dir" "$local_dest" || rc=$?
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user