fix: deploy-to uses scp -r for directories (fixes .bashrc.d upload)

This commit is contained in:
Kenji Morishige
2026-02-23 17:17:15 -06:00
parent a6296da5df
commit 16cbadd016

View File

@@ -944,11 +944,17 @@ cmd_deploy_to() {
local backed_up=0 local backed_up=0
for rel in "${remote_paths[@]}"; do for rel in "${remote_paths[@]}"; do
# Check if the file actually exists on the remote before fetching # Check if the file/dir actually exists on the remote before fetching
if ssh "$target" "[ -f ~/$rel ]" 2>/dev/null; then if ssh "$target" "[ -e ~/$rel ]" 2>/dev/null; then
local local_dest="$backup_base/$rel" local local_dest="$backup_base/$rel"
mkdir -p "$(dirname "$local_dest")" mkdir -p "$(dirname "$local_dest")"
if scp -q "$target:~/$rel" "$local_dest" 2>/dev/null; then # Use -r for directories, plain scp for files
if ssh "$target" "[ -d ~/$rel ]" 2>/dev/null; then
mkdir -p "$local_dest"
if scp -rq "$target:~/$rel/." "$local_dest/" 2>/dev/null; then
(( backed_up++ )) || true
fi
elif scp -q "$target:~/$rel" "$local_dest" 2>/dev/null; then
(( backed_up++ )) || true (( backed_up++ )) || true
fi fi
fi fi
@@ -1018,12 +1024,23 @@ cmd_deploy_to() {
fi fi
if $dry_run; then if $dry_run; then
echo " [dry-run] ~/$rel" echo " [dry-run] ~/$rel$([ -d "$src" ] && echo '/')"
else else
# Ensure parent directory exists on remote
local parent; parent="$(dirname "$rel")" local parent; parent="$(dirname "$rel")"
[[ "$parent" != "." ]] && ssh "$target" "mkdir -p ~/$parent" if [ -d "$src" ]; then
scp -q "$src" "$target:~/$rel" # For directories: remove stale dest first (avoids double-nesting on re-run)
# then scp -r into the parent so the dir name is preserved correctly.
ssh "$target" "rm -rf ~/$rel"
if [[ "$parent" == "." ]]; then
scp -rq "$src" "$target:~/"
else
ssh "$target" "mkdir -p ~/$parent"
scp -rq "$src" "$target:~/$parent/"
fi
else
[[ "$parent" != "." ]] && ssh "$target" "mkdir -p ~/$parent"
scp -q "$src" "$target:~/$rel"
fi
success "Deployed: ~/$rel" success "Deployed: ~/$rel"
(( deployed++ )) || true (( deployed++ )) || true
fi fi